收藏 分销(赏)

51单片机编写的闹钟程序.doc

上传人:二*** 文档编号:4510850 上传时间:2024-09-26 格式:DOC 页数:8 大小:29KB
下载 相关 举报
51单片机编写的闹钟程序.doc_第1页
第1页 / 共8页
亲,该文档总共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;

4、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=

5、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(

6、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,所以 /

7、当num3加到2时,num2只能最大为4,大于4后要清0num2=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)delay

8、ms(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 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;

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服