单片机设计温度计.docx
- 文档编号:25536073
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:11
- 大小:41.71KB
单片机设计温度计.docx
《单片机设计温度计.docx》由会员分享,可在线阅读,更多相关《单片机设计温度计.docx(11页珍藏版)》请在冰豆网上搜索。
单片机设计温度计
单片机设计温度计
第1部分:
原理图
第2部分:
程序代码
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*七段共阴管显示定义*/
ucharcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
ucharcodeTAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodeTAB1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
/*定义并初始化变量*/
ucharseconde=0;
ucharminite=0;
ucharhour=12;
ucharmstcnt=0;
ucharflag=0;
floattp;
sbitDQ=P1^7;
sbitP1_0=P1^0;
//second调整定义
sbitP1_1=P1^1;
//minite调整定义
sbitP1_2=P1^2;
sbitP3_2=P3^2;
voiddelay(uchark);
//延时子程序
voidtime_pro();
//时间处理子程序
voiddisplay();
//显示子程序
voidkeyscan();
voidTMP(void);
voidTime(void);
voiddelayx(uinti)
{
while(i--);
}
voidDelayMS(intx)
{
chart;
while(x--)for(t=0;t<120;t++);
}
voiddelay(uchark)
{
ucharj;
while((k--)!
=0)
{
for(j=0;j<125;j++)
{;}
}
}
init_DS(void)
{
ucharx=0;
DQ=1;
delayx(8);
DQ=0;
delayx(85);
DQ=1;
delayx(14);
x=DQ;
delayx(20);
}
Read(void)
{
uchari=0;
uchardat=0;
for(i=8;i>0;i--)
{
//DQ=1;
//delay
(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;//读出数据放入高位,最后右移到低位
delayx(4);
}
return(dat);
}
write(uchardat)
{
uchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;//从地位开始写入
delayx(5);
DQ=1;
dat>>=1;
}
delayx(4);
}
Readtem(void)
{uchara=0;
ucharb=0;
uchart=0,t1;
init_DS();
write(0xcc);//跳过读序列号操作
write(0x44);//启动温度转换
delayx(125);
init_DS();
write(0xcc);
write(0xbe);//读温度寄存器
a=Read();//读取温度低位LSB
b=Read();//读取温度低位HSB
t1=(a&0x0f)*0.0625;//取小数部分
t=((b<<4)|(a>>4));//取整数部分
if(t>128)
{
t=~t+1;
}
t=t+t1;
return(t);
}
voidtime_pro(void)
{
if(seconde==60)
{seconde=0;
minite++;
if(minite==60)
{minite=0;
hour++;
if(hour==24)
{hour=0;
}
}
}
}
voiddisplay(void)
{
P2=0xfe;
P0=dispcode[hour/10];
delay(4);
P2=0xfd;
P0=(dispcode[(hour%10)])|0X80;
delay(4);
P2=0xfb;
P0=dispcode[minite/10];
delay(4);
P2=0xf7;
P0=(dispcode[minite%10])|0X80;
delay(4);
P2=0xef;
P0=dispcode[seconde/10];
delay(4);
P2=0xdf;
P0=dispcode[seconde%10];
delay(4);
}
voidkeyscan(void)
{
if(P1_0==0)
{
delay(30);
if(P1_0==0)
{
while(!
P1_0);
seconde++;}
if(seconde==60)
{seconde=0;
}
}
if(P1_1==0)
{
delay(30);
if(P1_1==0)
{
while(!
P1_1);
minite++;
}
if(minite==60)
{minite=0;}
}
if(P1_2==0)
{
delay(30);
if(P1_2==0)
{
while(!
P1_2);
hour++;
}
if(hour==24)
{hour=0;}
}
}
voiddisplayqq(intk)//数码管显示
{
P2=0xf7;
P0=TAB[k%10];
DelayMS(5);
P2=0xfb;
P0=TAB[k/10%10];
DelayMS(5);
P2=0xfd;
P0=TAB1[k/100%10];
DelayMS(5);
P2=0xfe;
P0=TAB[k/1000];
DelayMS(5);
}
voidtimer0(void)interrupt1using0
{
TH0=0x3c;
TMOD=0x11;
mstcnt++;
if(mstcnt==20)
{
seconde++;
mstcnt=0;
}
}
voidmain(void)
{
P1=0xff;
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
EX0=1;
TR0=1;
while
(1)
{
if(flag==0)
{Time();}
else{TMP();}
}
}
voidTime(void)
{
keyscan();
time_pro();
display();
}
voidTMP(void)
{floattp;
tp=Readtem();
tp=tp*100;//把二位数乘以100变成四位数
displayqq(tp);
}
voidEX_INT0()interrupt0
{
while(!
P3_2)
{
flag=~flag;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 设计 温度计