51单片机编写的闹钟程序24687

上传人:无*** 文档编号:192124093 上传时间:2023-03-06 格式:PDF 页数:7 大小:174.10KB
返回 下载 相关 举报
51单片机编写的闹钟程序24687_第1页
第1页 / 共7页
51单片机编写的闹钟程序24687_第2页
第2页 / 共7页
51单片机编写的闹钟程序24687_第3页
第3页 / 共7页
点击查看更多>>
资源描述
.#include#define uchar unsigned char#define uint unsigned int sbit w1=P00;sbit w2=P01;sbit w3=P02;sbit w4=P03;sbit k1=P04;/定义按键 sbit k2=P05;sbit k3=P06;sbit k4=P07;sbit fm=P34;uchar code table=0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f;/0-9 十六进制数共阴 void timetune();/时间校正函数 void delayms(uint);/延迟函数 void keyscan();/闹钟设置函数 void keyscan1();/闹钟检测函数 void display(uint anum,uint anum1,uint anum2,uint anum3);/显示函数 uint num0,num,num1,num2,num3,anum,anum1,anum2,anum3,temp,temp0,temp1,temp2,temp3,temp4,s,s1,s2,s3,s4;void main()TMOD=0*01;/设置定时器 0 为工作方式 10000 0001 TH0=(65536-45872)/256;/装初值 50 毫秒中断一次 TL0=(65536-45872)/256;EA=1;/开总中断 ET0=1;/开定时器 0 终中断 TR0=1;/开定时器 while(1)/中断后进入死循环时间永不停顿计时 timetune();/调用时间设置函数 keyscan();/调用闹钟设置函数 if(num0=20)num0=0;num+;if(num=10)num1+;num=0;if(num1=6).num2+;num1=0;if(num2=10)/和下面 if 必须分开,否则时间到24 小时后不会清 0 继续走下去 num3+;num2=0;if(num3=2&num2=4)/当时间走到24小时后自动清0 num3=0;num2=0;num=0;num1=0;if(temp0=1)/为了防止闹钟时间显示和正常时间显示同时显示出现数码管显示不清晰,所以 display(s1,s2,s3,s4);/写两个对立的if条件判断语句 temp=1和temp!=1来作为限制条件.if(temp0!=1)display(num,num1,num2,num3);/keyscan1();void display(uint anum,uint anum1,uint anum2,uint anum3)/时间显示函数 P2=tableanum3;w1=1;delayms(1);w1=0;P2=tableanum2;w2=1;delayms(1);w2=0;P2=tableanum1;w3=1;delayms(1);w3=0;P2=tableanum;w4=1;delayms(1);.w4=0;void timetune()/时间校正程序 if(k4=0)/当每按下第四个键后会出现 temp 不同的值,然后用 delayms(10);/不同的值作为不同的条件给四个数码管加减值来校正时间 if(k4=0)temp+;while(!k4);if(temp=1)if(k2=0)delayms(10);/按键时由于会产生机械振动,为了准确检测到按键 if(k2=0)/按下所以要延时 num+;if(num=10)num=0;while(!k2);if(temp=2)if(k2=0)delayms(10);if(k2=0)num1+;if(num1=6)num1=0;while(!k2);if(temp=3)if(k2=0).delayms(10);if(k2=0)num2+;if(num2=10)num2=0;while(!k2);if(temp=4)if(k2=0)delayms(10);if(k2=0)num3+;if(num3=3)num3=0;while(!k2);if(num3=2&num2=4)/前面由于 num2 可以加到十,但是 num2 最多只能是 4,所以 /当 num3 加到 2 时,num2 只能最大为 4,大于 4 后要清 0 num2=0;if(temp=5)temp=0;/为了让时间能够反复校正,temp 要清 0 void keyscan1()/闹钟判断程序 if(s1=num&s2=num1&s3=num2&s4=num3&temp0=2)/闹钟判断条件 temp0=0;/当闹钟判断条件成立后,第一次闹钟响了后,为了能够进展第二次闹钟的设置,所以 temp0 要清 0 fm=0;/蜂鸣器 .void keyscan()/闹钟调整程序 if(k3=0)delayms(10);if(k3=0)temp0+;while(!k3);/按键释放 if(k1=0)delayms(10);if(k1=0)s+;while(!k1);if(s=1)if(k2=0)delayms(10);if(k2=0)s1+;if(s1=10)s1=0;while(!k2);if(s=2)if(k2=0)delayms(10);if(k2=0)s2+;if(s2=6)s2=0;.while(!k2);if(s=3)if(k2=0)delayms(10);if(k2=0)s3+;if(s3=10)s3=0;while(!k2);if(s=4)if(k2=0)delayms(10);if(k2=0)s4+;if(s4=3)s4=0;while(!k2);if(s4=3&s3=5)/同时间调整程序一样 s3=0;if(s=5)s=0;void delayms(uint*ms)uint i,j;.for(i=*ms;i0;i-)for(j=110;j0;j-);void T0_time()interrupt 1 /中断效劳程序 EA=0;TH0=(65536-45872)/256;TL0=(65536-45872)/256;num0+;EA=1;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!