单片机时钟温度实训报告文档格式.docx
- 文档编号:16234468
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:17
- 大小:176.66KB
单片机时钟温度实训报告文档格式.docx
《单片机时钟温度实训报告文档格式.docx》由会员分享,可在线阅读,更多相关《单片机时钟温度实训报告文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
PDIP封装的AT89C52引脚图
AT89C52为8位通用微处理器,采用工业标
准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
1、兼容MCS51指令系统
2、8kB可反复擦写(大于1000次)FlashROM;
3、32个双向I/O口;
4、256x8bit内部RAM;
5、3个16位可编程定时/计数器中断;
6、时钟频率0-24MHz;
7、2个串行中断,可编程UART串行通道;
8、2个外部中断源,共8个中断源;
9、2个读写中断口线,3级加密位;
10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
温度显示
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢
封装式,型号多种多样,有LTM8877,LTM8874等等。
主要根据应用场合的不同而改变其外观。
封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
1:
技术性能描述
①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
②、测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)0.5℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源:
3~5V/DC(可以数据线寄生电源)
⑤、在使用中不需要任何外围元件
⑥、测量结果以9~12位数字量方式串行传送
⑦、不锈钢保护管直径Φ6
⑧、适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温
⑨、标准安装螺纹M10X1,M12X1.5,G1/2”任选
数码管
原理图
实物图
数码管是一种半导体发光器件,其基本单元是发光二极管,是单片机系统中最常用的一种显示输出,主要用于单片机控制中的数据输出和状态信息显示。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);
按能显示多少个“8”可分为1位、2位、4位等等数码管;
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
仿真图:
三、软件设计
1.主程序流程图
图1主程序流程图
图2.1s中断服务子程序流程图
2.电子时钟:
利用定时器T0实现1s定时,T0设置为方式1,时间50ms,利用软件计数20次,实现1s定时。
中断服务子程序流程图如图2
参考以上流程图编写程序。
使用Proteus和Keil仿真。
使用定时器中断T0实现。
图3.显示子程序流程图图4.按键扫描子程序流程图
3.显示子程序流程图:
参考以上流程图3,编写显示时间的子程序或函数。
小时和分钟之间利用显示器的小数点隔开,秒的显示用显示器最后一位的小数点来表示,1秒闪一次。
使用Proteus和Keil仿真调试。
4.按键扫描子程序功能:
扫描按键K1、K2和K3,当K1按下时,小时加1,当K2按下时分钟加1,使用K3实现,时间/温度切换显示。
按以下流程图4编写程序。
名称
引脚
数量
瓷片电容
2
蜂鸣器
1
电解电容
电阻
25
4位共阳LED数码管
12
温度传感器
3
按键
4
AT89C51
40
晶体振荡器
松香
1盒
导线
1段
40针管座
焊锡
程序:
#include<
reg51.h>
18b20.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitk1=P1^0;
sbitk2=P1^1;
sbitk3=P1^2;
sbitbeep=P3^6;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
ucharcodewei1[]={0x01,0x02,0x04,0x08,0x10,0x20};
ucharshi=0,fen=0,miao=0,count=0;
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voidbuzz()
{uinti;
if((fen==59)&
&
(miao>
51))
{beep=~beep;
for(i=0;
i<
50;
i++);
}
voiddisplaytime()
{
P2=wei1[0];
P0=table[shi/10];
delay(5);
P2=wei1[1];
P0=table[shi%10];
P2=wei1[2];
P0=table[fen/10];
P2=wei1[3];
P0=table[fen%10];
P2=wei1[4];
P0=table[miao/10];
P2=wei1[5];
P0=table[miao%10];
}
voidkeyscan()
if(k1==0)//调分钟
{delay(5);
if(k1==0)
{
fen++;
while(!
k1);
if(fen==60)
fen=0;
if(k2==0)//调小时
delay(5);
if(k2==0)
{shi++;
k2);
if(shi==12)
shi=0;
voidmain()
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while
(1)
keyscan();
}
voidt0()interrupt1
count++;
if(count==10)
{count=0;
miao++;
if(miao==60)
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==12)
shi=0;
miao=0;
}
voidt1()interrupt3
TH1=(65536-5000)/256;
if(k3==1)
displaytime();
buzz();
else
{ds1820rst();
//初始化显示
read_temp();
//读取温度
ds1820disp();
//显示
sbitDQ=P3^0;
//ds18b20与单片机连接口
unsignedcharcodestr[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共yang数码管字码表
unsignedcharcodestr1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//个位带小数点字码表
unsignedcharcodewei[]={0x01,0x02,0x04,0x08,0x10,0x20};
unsignedchardatadisdata[4];
unsignedinttvalue;
//温度值
unsignedchartflag;
//温度正负标志
/******************************ds1820程序***************************************/
voiddelay_18B20(unsignedinti)//延时1微秒
while(i--);
voidds1820rst()/*ds1820复位*/
{unsignedcharx=0;
DQ=1;
//DQ复位
delay_18B20(4);
//延时
DQ=0;
//DQ拉低
delay_18B20(100);
//精确延时大于480us
//拉高
delay_18B20(40);
unsignedchards1820rd()/*读数据*/
{unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
i--)
{DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(10);
return(dat);
voidds1820wr(ucharwdata)/*写数据*/
{uchari=0;
for(i=8;
i>
i--)
{DQ=0;
DQ=wdata&
0x01;
wdata>
read_temp()/*读取温度值并转换*/
{uchara,b;
ds1820rst();
ds1820wr(0xcc);
//*跳过读序列号*/
ds1820wr(0x44);
//*启动温度转换*/
ds1820wr(0xbe);
//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<
<
=8;
tvalue=tvalue|a;
if(tvalue<
0x0fff)
tflag=0;
{tvalue=~tvalue+1;
tflag=1;
tvalue=tvalue*(0.625);
//温度值扩大10倍,精确到1位小数
return(tvalue);
/*******************************************************************/
voidds1820disp()//温度值显示
{ucharflagdat;
uchari;
disdata[0]=tvalue/1000;
//位数
disdata[1]=tvalue%1000/100;
//十位数
disdata[2]=tvalue%100/10;
//ge
disdata[3]=tvalue%10;
//小数位
if(tflag==0)
flagdat=0x20;
//正温度不显示符号
flagdat=0x2d;
//负温度显示负号:
-
for(i=0;
150;
i++)
P2=wei[0];
P0=str[disdata[0]];
delay_18B20(60);
P2=wei[1];
P0=str[disdata[1]];
P2=wei[2];
P0=str1[disdata[2]];
P2=wei[3];
P0=str[disdata[3]];
P2=wei[4];
P0=0x9c;
P2=wei[5];
P0=0xc6;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 时钟 温度 报告