51单片机带闹钟c语言程序,51单片机编写的闹钟程序

《51单片机编写的闹钟程序》由会员分享,可在线阅读,更多相关《51单片机编写的闹钟程序(8页珍藏版)》请在人人文库网上搜索。

1、include#define uchar unsigned char#define uint unsigned intsbit 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=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /0-9十六进制数共阴void timetune(); /时间校正函数 void delayms(uint); /延迟。

2、函数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=0x01; /设置定时器0为工作方式1(0000 0001)TH0=(65536-45872)/256; /装初值50毫秒中断一次TL0=(。

3、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小时后自动清0num3=0;num2=0;nu。

4、m=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(。

5、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(!k。

6、2);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后要清0n。

7、um2=0;if(temp=5)temp=0; /为了让时间能够反复校正,temp要清0void keyscan1() /闹钟判断程序if(s1=num&s2=num1&s3=num2&s4=num3&temp0=2) /闹钟判断条件temp0=0; /当闹钟判断条件成立后,第一次闹钟响了后,为了能够进行第二次闹钟的设置,所以temp0要清0fm=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)。

8、;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 xms)uint i,j;for(i=xms;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;。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值