您的当前位置:首页51单片机编写的闹钟程序

51单片机编写的闹钟程序

2024-07-31 来源:乌哈旅游


51单片机编写的闹钟程序(总6页)

--本页仅作为文档封面,使用时请直接删除即可-- --内页可以根据需求调整合适字体及大小--

#include<>

#define uchar unsigned char #define uint unsigned int sbit w1=P0^0; sbit w2=P0^1; sbit w3=P0^2; sbit w4=P0^3;

sbit k1=P0^4; if(temp0!=1) display(num,num1,num2,num3); // keyscan1(); } }

void display(uint anum,uint anum1,uint anum2,uint anum3) //函数 { P2=table[anum3]; w1=1; delayms(1); w1=0; P2=table[anum2]; w2=1; delayms(1); w2=0; P2=table[anum1]; w3=1; delayms(1); w3=0; P2=table[anum]; w4=1; delayms(1); w4=0; }

void timetune() //时间校正程序 { if(k4==0)

2

时间显示 { //当每按下第四个键后会出现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); } } }

3

按键时由于会产生机械振动,按下所以要延时 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 } }

4

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)

5

按键释放

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)

6

{ 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;i>0;i--) for(j=110;j>0;j--); }

void T0_time() interrupt 1 //中断服务程序 { EA=0; TH0=(65536-45872)/256; TL0=(65536-45872)/256; num0++; EA=1; }

7

因篇幅问题不能全部显示,请点此查看更多更全内容