电子时钟基于AT89c51单片机设计电路图及程序Word格式.docx
- 文档编号:21982115
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:13
- 大小:972.68KB
电子时钟基于AT89c51单片机设计电路图及程序Word格式.docx
《电子时钟基于AT89c51单片机设计电路图及程序Word格式.docx》由会员分享,可在线阅读,更多相关《电子时钟基于AT89c51单片机设计电路图及程序Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
reg51.h>
#defineucharunsignedchar//预定义一下
#defineuintunsignedint
uchartable[]="
JD12102Class--21"
;
//显示容
sbitlcden=P3^4;
//寄存器EN片选引脚
sbitlcdrs=P3^5;
//寄存器RS选择引脚
sbitbeep=P3^6;
//接蜂鸣器
externvoidkey1();
externvoidkey2();
externvoidkey3();
ucharnum,hour=12,minite,second,ahour,aminite,asecond,a,F_k1,F_k2,F_k3;
//定义变量
voiddelay(uintz)//延时
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voidwrite_(uchar)
{
lcdrs=0;
P0=;
//送出指令,写指令时序
delay(5);
lcden=1;
lcden=0;
voidwrite_data(uchardate)
lcdrs=1;
P0=date;
//送出数据,写指令程序
voidwrite_add(ucharadd,uchardate)
ucharaa,bb;
aa=date/10;
bb=date%10;
write_(0x80+add);
write_data(0x30+aa);
write_data(0x30+bb);
voidinit()//初始化
{lcden=0;
write_(0x38);
//设置16*2显示,5*7点阵
write_(0x0c);
//开显示,不显示光标
write_(0x06);
//地址加1,写入数据是光标右移1位
write_(0x01);
//清屏
write_(0x80);
//起点为第一行第一个字符开始
voiddisplay(ucharh,ucharm,uchars)//显示设计程序
{{
write_(0x80+0x16);
{write_(0xC0+0x00);
write_data('
T'
);
I'
M'
E'
:
'
write_data(0x30+(h/10));
write_data(0x30+(h%10));
write_data(0x30+(m/10));
write_data(0x30+(m%10));
write_data(0x30+(s/10));
write_data(0x30+(s%10));
'
}}
voidmain()
{init();
TMOD=0X01;
//设置T0定时方式1
TH0=(65535-50000)/256;
//设置初值
TL0=(65535-50000)%256;
EA=1;
//开总中断
TR0=1;
//启动T0
ET0=1;
for(num=0;
num<
16;
num++)//依次读出数据
write_data(table[num]);
while
(1)
key1();
key2();
key3();
if(ahour==hour&
&
aminite==minite&
second<
10)//时间到闹钟响
beep=~beep;
if(F_k1==0&
F_k3==0)//K1和K3按下次数为零就直接显示时分秒
display(hour,minite,second);
voidtimer0()interrupt1//T0中断函数
TH0=(65535-50000)/256;
//装载计数器初值
TL0=(65535-50000)%256;
a++;
if(a==20)
{//进位设置60秒进1分,60分进1时,24时进0时
a=0;
second++;
if(second==60)
second=0;
minite++;
if(minite==60)
minite=0;
hour++;
if(hour==24)
hour=0;
}
#include<
//调时间程序
#defineucharunsignedchar
sbitk1=P1^0;
//定义3个变量
sbitk2=P1^1;
sbitk3=P1^2;
externucharF_k1,F_k3,second,minite,hour,ahour,aminite,asecond;
//预定义变量
externvoidwrite_(uchar);
externvoidwrite_add(ucharadd,uchardate);
externvoiddisplay(ucharh,ucharm,uchars);
voiddelay_key(inti)
{while(i--);
voidkey1()
if(k1==0)//按下K1零次时,直接计时与开机显示
delay_key(100);
if(k1==0)
TR0=0;
while(!
k1);
F_k1++;
if(F_k1==4)
F_k1=0;
if(F_k1==1|F_k3==1)
write_(0xC0+0x0c);
write_(0x0f);
if(F_k1==2|F_k3==2)
write_(0xC0+0x09);
if(F_k1==3|F_k3==3)
write_(0xC0+0x06);
voidkey2()
if(k2==0)
k2);
if(F_k1==1)//按下K1一次时设置闹钟的秒
write_add(0x4b,second);
if(F_k1==2)//按下K3两次时设置闹钟的分
write_add(0x48,minite);
if(F_k1==3)//按下K1三次时设置闹钟的时
write_add(0x45,hour);
if(F_k3==1)//按下K3一次时设置闹钟的秒
{
asecond++;
if(asecond==60)
asecond=0;
write_add(0x4b,asecond);
if(F_k3==2)//按下K3两次时设置闹钟的分
aminite++;
if(aminite==60)
aminite=0;
write_add(0x48,aminite);
if(F_k3==3)//按下K3三次时设置闹钟的时
ahour++;
if(ahour==24)
ahour=0;
write_add(0x45,ahour);
voidkey3()
if(k3==0)
k3);
F_k3++;
if(F_k3==4)//K3等于四次时直接跳入闹钟显示
F_k3=0;
if(F_k3==1)
display(ahour,aminite,asecond);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 基于 AT89c51 单片机 设计 电路图 程序