温度电子时钟程序Word文档格式.docx
- 文档编号:17045044
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:17
- 大小:22.24KB
温度电子时钟程序Word文档格式.docx
《温度电子时钟程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《温度电子时钟程序Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
bitm_flash_flag;
bits_flash_flag;
charalarms=0,alarmid,ii=0;
voidDisp_Alarm(void);
//闹钟显示
voidSet_H_Alarm(void);
//闹钟小时的设置
voidSet_M_Alarm(void);
//闹钟分钟的设置
voidSet_S_Alarm(void);
//闹钟开关设置
voidAlarmup(void);
//闹钟时间到显示
signedcharhoura=7,mina=30;
//闹钟初始时间
uchara[]={"
0123456789"
sbitbeep=P3^6;
//位定义,定义P3.6为蜂鸣器
voiddelay500(void);
voidnaozhong(ucharn);
ucharcodealarm[]={"
ALARMSET"
ucharcodeoff[]={"
OFF"
ucharcodeon[]={"
ON"
ucharcodeup[]={"
TIMEUP!
"
//***********DS1302时间显示定义部分
sbitT_CLK=P1^0;
sbitT_IO=P1^1;
sbitT_RST=P1^2;
sbitACC0=ACC^0;
sbitACC7=ACC^7;
voidSet(uchar,uchar);
//据选择调整相应项目
voidRTInputByte(uchar);
/*输入1Byte*/
ucharRTOutputByte(void);
/*输出1Byte*/
voidW1302(uchar,uchar);
//向DS1302写一个字节
ucharR1302(uchar);
//从DS1302读一个字节
voidSet1302(uchar*);
//设置时间
bitsec,min,hour,year,mon,day,weekk;
//闪烁标志位//初始化后设置为:
04年12月2日星期40点0分0秒
ucharinittime[7]={0x00,0x00,0x00,0x02,0x12,0x04,0x04};
//秒分钟小日月年星期
//*****18B20温度显示定义部
sbitDQ=P3^3;
//18B20接3.3口
typedefucharbyte;
typedefunsignedintword;
Read_Temperature(char,char);
voidmychar(void);
byteow_reset(void);
byteread_byte(void);
voidwrite_byte(charval);
voidadjust_res(charres);
//温度分辨率调整
//*******温度控制部分*********
bitth_flash_flag,tl_flash_flag;
//上、下限闪烁
bitth_flag,tl_flag;
//上、下限越限标志
bittl_sign,th_sign;
//零下标志0:
零上,1:
零下
chartempid;
uchartl=20,th=45,tb;
voidDisp_Temp(void);
//显示上下限温度
voidSet_TH_Temp(void);
//设置温度上限
voidSet_TL_Temp(void);
//设置温度下限
voidCompare_Temp(signedcharl,signedcharh);
//比较温度
voidTl_Al(void);
voidTh_Al(void);
voidTover(void);
//温度报警界面
ucharcodeover[]={"
OVER!
!
ucharcodetemperature[]={"
TEMPERATURE"
//*******1602LCD驱动***
voidWriteDataLCD(ucharWDLCD);
voidDelay5Ms(void);
voidDelay400Ms(void);
voidWriteCommandLCD(ucharWCLCD,BuysC);
ucharReadStatusLCD(void);
voidLCDInit(void);
voidDOC(ucharX,ucharY,ucharDData);
voidDLC(ucharX,ucharY,ucharcode*DData);
ucharcodeweek[]={"
Week."
voidmain(void)
{ucharii=0;
Delay400Ms();
//启动等待,等LCD讲入工作状态
LCDInit();
//LCD初始化
DLC(0,0,shaci);
DLC(0,1,happy);
LCDInit();
mychar();
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
TR0=1;
ET0=1;
W1302(0x90,0xa5);
W1302(0x8e,0x80);
adjust_res(0x1f);
//调整18B20的分辨率
while
(1){if(P1_7==0){dipsmodid++;
lmcinit_or_not=1;
if(dipsmodid>
2)dipsmodid=0;
while(P1_7==0);
}
switch(dipsmodid){case0:
Disp_mod0();
break;
case1:
Disp_mod1();
case2:
Disp_mod2();
if(((R1302(0x81)/16+0x30)==a[0])&
&
((R1302(0x81)/16+0x30)==a[0])&
((R1302(0x83)/16+0x30)==a[mina/10])&
((R1302(0x83)%16+0x30)==a[mina%10])&
((R1302(0x85)/16+0x30)==a[houra/10])&
((R1302(0x85)%16+0x30)==a[houra%10]))
{if(alarms==1){Alarmup();
naozhong(10);
}}
if(ii==50){ii=0;
if(tb>
th)
{Tover();
}}ii++;
voidDisp_mod0(void)//显示模式0
{if(lmcinit_or_not==1)
{LCDInit();
lmcinit_or_not=0;
}DOC(0,0,'
'
);
if((P1_4|P1_5)==0)//初始化
{Delay5Ms();
if((P1_4|P1_5)==0)Set1302(inittime);
if(P1_6==0)//设置和选择项目键
{Delay5Ms();
if(P1_6==0){id++;
if(id>
7)id=0;
while(P1_6==0);
}
switch(id){case0:
sec=0;
Disp_line1();
Disp_line2();
case1year=1;
id_case1_key();
:
//年
case2:
year=0;
mon=1;
Disp_line2();
//月
case3:
mon=0;
day=1;
break;
//日
case4:
day=0;
weekk=1;
id_case1_key();
//星期
case5:
weekk=0;
hour=1;
//小时
case6:
hour=0;
min=1;
//分钟
case7:
min=0;
sec=1;
//秒}}
voidDisp_mod1(void)//显示模式1
{LCDInit();
Read_Temperature(1,0);
DOC(0,1,'
T'
DOC(1,1,'
L'
DOC(2,1,'
'
DOC(7,1,'
DOC(8,1,'
H'
DOC(9,1,'
if(P1_6==0){Delay5Ms();
if(P1_6==0)
{tempid++;
if(tempid>
2)tempid=0;
}}switch(tempid)
{case0:
tl_flash_flag=0;
th_flash_flag=0;
Disp_Temp();
tl_flash_flag=1;
Set_TL_Temp();
th_flash_flag=1;
Set_TH_Temp();
Compare_Temp(tl,th);
Tl_Al();
Th_Al();
voidDisp_mod2(void)//显示模式2
{if(lmcinit_or_not==1)
DOC(0,0,'
DLC(3,0,alarm);
DOC(3,1,a[houra/10]);
DOC(4,1,a[houra%10]);
DOC(5,1,'
DOC(6,1,a[mina/10]);
DOC(7,1,a[mina%10]);
if(alarms==0){DLC(10,1,off);
else{DLC(10,1,on);
if(P1_6==0){Delay5Ms();
{alarmid++;
if(alarmid>
3)alarmid=0;
while(P1_6==0);
}}switch(alarmid)
h_flash_flag=0;
m_flash_flag=0;
s_flash_flag=0;
Disp_Alarm();
h_flash_flag=1;
Set_H_Alarm();
m_flash_flag=1;
Set_M_Alarm();
case3:
s_flash_flag=1;
Set_S_Alarm();
voidDisp_Alarm(void)//闹钟显示
{if(h_flash_flag==1)
{if(flag==1){DOC(3,1,a[houra/10]);
Delay5Ms();
else{DOC(3,1,0x20);
DOC(4,1,0x20);
else{DOC(3,1,a[houra/10]);
if(m_flash_flag==1){if(flag==1){DOC(6,1,a[mina/10]);
DOC(7,1,a[mina%10]);
else{DOC(6,1,0x20);
DOC(7,1,0x20);
else{DOC(6,1,a[mina/10]);
if(s_flash_flag==1){if(flag==1){if(alarms)
{DLC(10,1,on);
Delay5Ms();
else{DLC(10,1,off);
else{DOC(10,1,0x20);
DOC(11,1,0x20);
DOC(12,1,0x20);
}}}
voidSet_H_Alarm(void)//闹钟小时的设置
{if(P1_5==0){Delay5Ms();
if(P1_5==0)
{houra++;
if(houra>
23)houra=0;
while(P1_5==0);
if(P1_4==0){Delay5Ms();
if(P1_4==0)
{houra--;
if(houra<
0)houra=23;
while(P1_4==0);
voidSet_M_Alarm(void)//闹钟分钟的设置
{mina++;
if(mina>
59)mina=0;
{mina--;
if(mina<
0)mina=59;
voidSet_S_Alarm(void)//闹钟开关设置
{alarms=0;
}while(P1_5==0);
{alarms=1;
}while(P1_4==0);
voidAlarmup(void)//闹钟到时显示
{LCDInit();
DOC(0,0,'
DLC(3,0,up);
DOC(3,1,a[houra/10]);
DOC(4,1,a[houra%10]);
voidDisp_Temp(void)//显示上下限温度
{uchartl_gw,tl_sw,tl_bw;
//下限的个,十,百
ucharth_gw,th_sw,th_bw;
//上限的个,十,百
tl_sign=tl>
>
7;
if(tl_sign{tl_bw=(~(tl-1))/100;
//计算百位
tl_sw=((~(tl-1))-tl_bw*100)/10;
//计算十位
tl_gw=(~(tl-1))-tl_bw*100-tl_sw*10;
//个位}
else{tl_bw=(tl)/100;
tl_sw=(tl-tl_bw*100)/10;
tl_gw=tl-tl_bw*100-tl_sw*10;
if(tl_flash_flag==1){if(flag==1){if(tl_sign)
{DOC(3,1,0x2d);
DOC(4,1,tl_sw+0x30);
DOC(5,1,tl_gw+0x30);
else{DOC(3,1,tl_bw+0x30);
DOC(5,1,tl_gw+0x30);
else{DOC(3,1,0x20);
DOC(5,1,0x20);
//显示下限温度}}
else{DOC(3,1,tl_bw+0x30);
DOC(4,1,tl_sw+0x30);
//显示下限温度
th_sign=th>
if(th_sign)
{th_bw=(~(th-1))/100;
th_sw=((~(th-1))-th_bw*100)/10;
th_gw=(~(th-1))-th_bw*100-th_sw*10;
//个位}
else{th_bw=(th)/100;
th_sw=(th-th_bw*100)/10;
th_gw=th-th_bw*100-th_sw*10;
if(th_flash_flag==1){if(flag==1){if(th_sign)
{DOC(10,1,0x2d);
DOC(11,1,th_sw+0x30);
DOC(12,1,th_gw+0x30);
//显示下限温度}
else{DOC(10,1,th_bw+0x30);
//显示下限温度}}
else{DOC(10,1,0x20);
voidSet_TL_Temp(void)//设置温度下限
{tl++;
if(tl>
125)tl=-55;
{tl--;
if(tl<
-55)tl=125;
voidSet_TH_Temp(void)//设置温度上限
{th++;
if(th>
125)th=-55;
{th--;
if(th<
-55)th=125;
voidCompare_Temp(signedcharl,signedcharh)//比较温度
{uchartl_temp;
uchary,s;
union{bytec[2];
intx;
}temp;
ow_reset();
write_byte(0xCC);
//SkipROM
write_byte(0x44);
//转换温度
//SkipROM
write_byte(0xbe);
//读取寄存器
temp.c[1]=read_byte();
//读出温度低8位
temp.c[0]=read_byte();
//读出温度高8位
sflag=0;
//温度零下标志0:
零上,1:
if((temp.c[0]&
0xf8)!
=0x00)
{sflag=1;
//零下标志位置1
temp.c[1]=~temp.c[1];
//低8位取反
temp.c[0]=~temp.c[0];
//高8位取反
tl_temp=temp.c[1]+1;
//低8位加1
temp.c[1]=tl_temp;
//计算后重新存入数组
if(tl_temp>
255)temp.c[0]++;
//如果低8位大于255,向高8位进1}
y=0;
s=0;
y=temp.c[0]<
<
4;
s=temp.c[1]>
y=s|y;
if(y<
l)tl_flag=1;
elsetl_flag=0;
if(y>
h)th_flag=1;
elseth_flag=0;
voidTl_Al(void)//下限越限提示
{if(tl_flag==1){if(flag==1)
{DOC(9,0,'
A'
DOC(10,0,'
else{DOC(9,0,0x20);
DOC(10,0,0x20);
}}
else{DOC(9,0,0x20);
voidTh_Al(void)//上限越限提示
{if(th_flag==1){if(flag==1)
{DOC(13,0,'
DOC(14,0,'
else{DOC(13,0,0x20);
DOC(14,0,0x20);
voidTover(void)//温度越限报警
DLC(3,0,temperature);
DLC(5,1,over);
//中断入口,冒号闪烁
voidt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 电子 时钟 程序