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

上传人:b****3 文档编号:937706 上传时间:2022-10-14 格式:DOCX 页数:8 大小:15.87KB
下载 相关 举报
51单片机编写的闹钟程序.docx_第1页
第1页 / 共8页
51单片机编写的闹钟程序.docx_第2页
第2页 / 共8页
51单片机编写的闹钟程序.docx_第3页
第3页 / 共8页
51单片机编写的闹钟程序.docx_第4页
第4页 / 共8页
51单片机编写的闹钟程序.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

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

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

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

51单片机编写的闹钟程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitw仁P0A0;

sbitw2=P0A1;

sbitw3=P0A2;

sbitw4=P0A3;

sbitk1=P0A4;//定义按键

sbitk2=P0A5;

sbitk3=P0A6;

sbitk4=P0A7;

sbitfm=P3A4;

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f};//0--9十六进制数共阴voidtimetune();//时间校正函数

voiddelayms(uint);//延迟函数

voidkeyscan();//闹钟设置函数

voidkeyscan1();〃闹钟检测函数

voiddisplay(uintanum,uintanum1,uintanum2,uintanum3);//显示函数

uintnum0,num,num1,num2,num3,anum,anum1,anum2,anum3,temp,temp0,temp1,

temp2,temp3,temp4,s,s1,s2,s3,s4;

voidmain()

TMOD=0x01;〃设置定时器0为工作方式1(00000001)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();

}

}

voiddisplay(uintanum,uintanum1,uintanum2,uintanum3)//时间显示函数{

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;

}

voidtimetune()//时间校正程序

{

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后要清0num2=0;

}

if(temp==5)

{

}temp=0;//为了让时间能够反复校正,temp要清0

voidkeyscan1()〃闹钟判断程序

{

if(s1==num&&s2==numl&&s3==num2&&s4==num3&&temp0==2)〃闹钟判断条件{

temp0=0;〃当闹钟判断条件成立后,第一次闹钟响了后,为了能够进行第二次闹钟的设置,所以temp0要清0

fm=0;//蜂鸣器

}

}

voidkeyscan()〃闹钟调整程序

{

if(k3==0)

{

delayms(10);

if(k3==0)

(Dmpo++whiCD(一k3)wif(klHO)宀

de-aymsuo)八if(klHO)

 

S++whiCDuklxif(sp)宀

if(k2xo)

de-aymsusif(k2xo)

 

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;

}

}

voiddelayms(uintxms)

{

uinti,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

voidT0_time()interrupt1//中断服务程序

EA=0;

TH0=(65536-45872)/256;

TL0=(65536-45872)/256;

}num0++;

EA=1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1