



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.附录2主程序 #include #define uchar unsigned char #define uint unsigned int sbit KEYON =P20; / 开始键 sbit KEYOFF=P21; / 关闭键 sbit KEYSET=P22; / 预约键sbit KEYINC=P23; /加1键 sbit KEYDEC=P24; / 减1键 sbit KEYFREE=P25; /预留键sbit POWER=P36; /电源开关指示灯 sbit LED=P33 ; /按键指示灯uchar code dispcode=0x3f,0x06,0x05b,0x4f,0x66,0x
2、6d,0x7d,0x07,0x7f,0x6f,0x40; /0-9的字型码uchar data disbuf=0,0,0,0; /显示缓冲区uchar hour,min ; /小时、分变量bit Onflag,flag;uchar Setflag;void delay(uchar); /延时子函数void init(void); /定时器初始化子函数uchar GetKeyNum(); /求按键号void Keyprocess(uchar); /按键处理子函数void calculate(); /计时子函数void display(); /显示子函数 /-主函数-void main(void)
3、 init(); P1=0x00; while(1) display(); /-定时器TO、T1初始化,外部中断0初始化子函数-void init() TMOD=0x11; /TO、T1作定时器、工作方式1 TH0=(65536-50000)/256 ; /定时50ms TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; IT0=1; /选择外部中断0为下降沿触发方式 EX0=1; /开外部中断0 ET1=1; /开定时器1 ET0=1; /开定时器0 EA =1; /开总中断 TR0=1; /-显示子函数-
4、void display() uchar i,j=0x08; if(Setflag=0)&!(min|hour) /数码管显示“- - - -”;. for(i=0;i4;i+) disbufi=dispcode10;else / 正常显示时间 disbuf0 = dispcodemin%10; /分个位 disbuf1 = dispcodemin/10; /分十位 disbuf2 = dispcodehour%10+0x80; /小时个位 disbuf3 = dispcodehour/10; /小时十位if(Setflag!=0)&flag) /如果调时,数码管闪烁显示 for(i=0;i2
5、) /不显示前面的0 P0=0; else P0=disbufi; if(Setflag=1) P1=j&0xfc; /调时,关断前两位位码 else P1=j & 0xf3; /调分,关断后两位位码 delay(5); /延时2.5ms P1=0x00; j=j1;else /数码管正常显示 for(i=0;i2) P0=0; /不显示前面的0 else P0=disbufi; P1=j; /位选通 delay(5); /延时2.5ms P1=0X00; j=j1; /-外部中断0中断函数- void int0()interrupt 0 using 0 uchar keynum; displ
6、ay(); /动态显示程序作为去抖动 if(INT0=0) /判断是否有按键按下 keynum=GetKeyNum(); /有效键,获取键值 while(INT0=0); /等待按键释放 Keyprocess(keynum); /按键处理 /-定时器0中断子函数- void time0() interrupt 1 /处理调时、显示器闪烁 static uchar ledcnt,num; /设置静态变量 TH0=(65536-50000)/256; /定时50ms;. TL0=(65536-50000)%256; if(Onflag & (hour | min)!=0) |! Onflag) /
7、指示灯每隔0.5s闪烁 ledcnt+; if(ledcnt=10) / 10 X 50mS=0.5S ledcnt=0; LED=LED; if(Setflag!=0) /调时闪烁 num+;if(num=5) num=0; flag=flag;/-定时器1中断子函数-void time1() interrupt 3 TH1=(65536-50000)/256; TL1=(65536-50000)%256;calculate(); /计时/-求按键号-uchar GetKeyNum()uchar temp;if(KEYON=0) temp=1;if(KEYOFF=0) temp=2;if(K
8、EYSET=0) temp=3;if(KEYINC=0) temp=4;if(KEYDEC=0) temp=5;if(KEYFREE=0) temp=6;return(temp);/-按键处理函数-void Keyprocess (uchar x)switch(x)case 1: /KEYON处理函数 Onflag=1; /开Onflag标志 Setflag=0; /关(Setflag)调时标志if(!Setflag)&!(hour | min) /没有调时且未处于预约,继电器通POWER=0;LED=0;elseTR1=1; /定时器1运行、执行计时程序break;case 2 : /KEY
9、OFF,关处理,标志清0;.Onflag=0;Setflag=0;hour=0;min=0;POWER=1;LED=1;break;case 3: /预约调时/调分键,处理调时标志if(Onflag=0) Setflag+;if(Setflag=3) Setflag=1;break;case 4: /加1键if(Setflag=1) /调时键,最大只能调到11hour+;if(hour=12)hour=0;if(Setflag=2) /调分键,最大只能调到59min+;if(min=60)min=0;break;case 5: /减1键if(Setflag=1) /调时键,减小时处理,最小0hour- ; if(hour=-1)hour=12;if(Setflag=2) /调分键,减分处理,最小0min-; if(min=-1)min=59;break; /-计算时间- void caculate()static uint tcount; /tcount为定时次数if(hour | min)!=0) tcount+; /1次50ms到,改变定时次数if(tcount=1200) /1200*50ms=1分钟tcount=0; /初始化定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025年纳米粒子在农业领域的应用创新与市场潜力报告
- 新能源行业品牌塑造策略研究报告-2025年市场分析与技术创新
- 2025年新能源行业光伏发电效率提升与成本降低报告
- 新能源产业碳排放权交易市场机制设计报告
- 2025年新能源品牌建设与市场推广策略报告:技术创新与品牌塑造新思路
- 工业互联网平台数字签名技术规范报告:2025年技术创新与产业升级研究报告
- Revision Module B (1)-说课稿 2025-2026学年外研版七年级英语下册
- 6.3 神经调节的基本方式(教学设计)七年级生物下册同步教学(人教版河北专版)
- 2025年中国感应冲洗阀行业市场分析及投资价值评估前景预测报告
- 2025年环保产业园区循环经济模式下的环保产业园区环境法律法规报告
- 湖南省九校联盟2026届高三上学期9月第一次联考日语试题(含答案)
- 四次侵华战争课件
- 2025年上海市公安辅警、法检系统辅助文员招聘考试(职业能力倾向测验)历年参考题库含答案详解
- XX园项目销售手册
- 锅炉工安全培训知识课件
- GB 46031-2025可燃粉尘工艺系统防爆技术规范
- 质量攻关项目汇报
- 移动患者的体位安全护理
- T/DGGC 005-2020全断面隧道掘进机再制造检测与评估
- 手机媒体概论(自考14237)复习题库(含真题、典型题)
- 消化内科护理进修汇报
评论
0/150
提交评论