51单片机数码管电子时钟C程序Word格式.docx
- 文档编号:20183000
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:14
- 大小:16.40KB
51单片机数码管电子时钟C程序Word格式.docx
《51单片机数码管电子时钟C程序Word格式.docx》由会员分享,可在线阅读,更多相关《51单片机数码管电子时钟C程序Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
voidjishi();
voidbaoshi();
voidalarm();
voidset_time();
voidset_alarm();
voidset_mdw();
voidkey_change();
voidkey_set();
voiddelay(intm)//延时程序,延时m*0.5ms
{
uinti;
uintj;
for(i=0;
i<
m;
i++)
{
for(j=0;
j<
500;
j++){}
}
}
voidtimer0()interrupt1
TMOD=0x01;
TH0=0x3c;
TL0=0xb1;
n++;
jishi();
main()
TR0=1;
EA=1;
ET0=1;
hh=12;
mm=00;
ss=00;
nhh=7;
nmm=30;
nss=0;
year=2012;
mon=01;
day=01;
week=7;
while
(1)
hhs=hh/10%10;
//时分秒
hhg=hh%10;
mms=mm/10%10;
mmg=mm%10;
sss=ss/10%10;
ssg=ss%10;
nhhs=nhh/10%10;
//闹钟
nhhg=nhh%10;
nmms=nmm/10%10;
nmmg=nmm%10;
nsss=nss/10%10;
nssg=nss%10;
days=day/10%10;
//月日
dayg=day%10;
mons=mon/10%10;
mong=mon%10;
key_change();
//k1按键扫描
key_set();
//k2按键扫描
set_time();
//设置时间
set_mdw();
//设置月日星期
set_alarm();
//设置闹钟
if(set1==1)//正常走时显示
dula=1;
P0=tab[hhs];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
delay
(1);
wela=0;
//时十位
P0=tab[hhg];
P0=0xfd;
//时个位
P0=tab[mms];
P0=0xfb;
//分十位
P0=tab[mmg];
P0=0xf7;
//分个位
P0=tab[sss];
P0=0xef;
//秒十位
P0=tab[ssg];
P0=0xdf;
//秒个位
if(ssg%2==0)
{
P0=tab[12];
P0=0xf5;
//..
}
if(set1==2)//设置时间
wela=0;
if(set1==3)//正常显示月日-星期
P0=tab[mons];
//月十位
P0=tab[mong];
//月个位
P0=tab[days];
//日十位
P0=tab[dayg];
//日个位
P0=tab[week];
//星期
if(set1==4)//设置月日-星期
//星期
if(set1==5)//正常显示定时
P0=tab[nhhs];
P0=tab[nhhg];
P0=tab[nmms];
P0=tab[nmmg];
P0=tab[nsss];
P0=tab[nssg];
P0=0xc0;
if(set1==6)//设置闹钟定时
baoshi();
//整点报时
alarm();
//闹钟
voidjishi()//计时函数
if(n==20)
{n=0;
ss++;
if(ss==60)
{ss=0;
mm++;
if(mm==60)
{mm=0;
hh++;
if(hh==24)
{hh=0;
day++;
week++;
if(week==8)
{week=0;
if(year%4==0&
&
year%100!
=0||year%400==0)//闰年
if(day==table1[mon]+1)
{day=0;
mon++;
if(mon==13)
{mon=0;
year++;
else//非闰年
if(day==table2[mon]+1)
ucharincone(ucharn)//加1函数
if(k3==0)
{delay(20);
while(!
k3);
n=anjian();
return(n);
uchardecone(ucharm)//减1函数
if(k4==0)
delay(20);
m--;
k4);
if(m<
0)
{m=0;
m=anjian();
return(m);
voidkey_change()//k1按键扫描
if(k1==0)
set1++;
k1);
if(set1==7)
{set1=1;
voidkey_set()//k2按键扫描
if(k2==0)
set2++;
k2);
if(set2==4)
{set2=1;
}
voidbaoshi()//整点报时函数
if(mm==00&
ss==00)
fm=0;
if(ss==1)
fm=1;
voidalarm()//闹钟函数
ucharx;
if(nhh==0)
gotoend;
if(hh==nhh&
mm==nmm&
ss==nss)
P0=0x7f;
dual=0;
for(x=0;
x<
6;
x++)
delay(30);
delay(180);
end:
;
voidset_time()//设置时间函数
if(set1==2)
if(set2==1)
hh=incone(hh);
if(hh==24)
{hh=0;
if(hh==-1)
{hh=23;
hh=decone(hh);
if(set2==2)
mm=incone(mm);
if(mm==60)
{mm=0;
if(mm==-1)
{mm=59;
mm=decone(mm);
if(set2==3)
ss=incone(ss);
if(ss==60)
{ss=0;
if(ss==-1)
{ss=59;
ss=decone(ss);
voidset_mdw()//设置月日星期函数
if(set1==4)
mon=incone(mon);
if(mon==13)
{mon=1;
mon=decone(mon);
if(mon==0)
{mon=12;
day=incone(day);
if(day==32)
{day=1;
day=decone(day);
if(day==0)
{day=31;
week=incone(week);
if(week==8)
{week=1;
week=decone(week);
if(week==0)
{week=7;
voidset_alarm()//设置闹钟函数
if(set1==6)
nhh=incone(nhh);
if(nhh==24)
{nhh=0;
if(nhh==-1)
{nhh=23;
nhh=decone(nhh);
nmm=incone(nmm);
if(nmm==60)
{nmm=0;
nmm=decone(nmm);
if(nmm==-1)
{nmm=59;
nss=incone(nss);
if(nss==60)
{nss=0;
nss=decone(nss);
if(nss==-1)
{nss=59;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 数码管 电子 时钟 程序