电子时钟设计方案及程序Word文件下载.docx
- 文档编号:13785188
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:16
- 大小:140.69KB
电子时钟设计方案及程序Word文件下载.docx
《电子时钟设计方案及程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子时钟设计方案及程序Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
Tcy=12×
1/12=1µ
m(2-1)
定数器设为N时,即每计到N时产生一次中断,而一次中断的时间为:
t=N×
Tcyµ
m(2-2)
当产生X(x根据N来设置,两者之积为1000000)次中断后我就知道过了1s,再通过液晶显示出来,这样就达到了让液晶每隔一秒跳一下的目的了。
2、proteus仿真结果
3、液晶部分
图4-3
液晶1、2端口分别是工作电源的负、正极,15、16是液晶背光灯电源正负极,R4起限流作用,避免电流过大烧坏背光灯。
第3端口还可接一电位器,调节液晶显示对比度。
无标号的8个端口是数据端,通过一上拉电阻接到单片机的
P0口。
三.系统的软件设计(如必要,含有流程图)
1、程序流程图
流程图中的X表示液晶中秒、分、时、星期、年、月、日中的任一个。
图5-1主程序流程图图5-2扫描键盘的子程序流程
四.系统测试及结果
测试结果总的来说很满意,比预计的还要好。
但由于中断函数中代码较长,故存在一定程度的误差,用秒表测试大约为每5分钟慢了一秒,这个问题是用单片机定时器来数时所无法解决的,中断函数必定会较长,处理这一函数会花费一定的时间这就无法做到让时钟走得很精确。
解决方法是用一时钟芯片来实现,由于时钟芯片不好买又比较贵(新的20几块一片),暂时就不考虑了,有机会再尝试。
1.源程序
//主函数放在最后面
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P2^4;
//定义液晶数据命令选择端
sbitlcden=P2^5;
//液晶使能端
sbits1=P2^0;
//按键1
sbits2=P2^1;
//按键2
sbits3=P2^2;
//按键3
ucharcount,s1num;
charshi,fen,miao;
//时、分、秒
charyear,month,day,week;
//年月日星期
voiddelay(uintx)//延时子程序
{
uintj,k;
for(j=x;
j>
0;
j--)
for(k=110;
k>
k--);
}
//----液晶写命令功能---
voidwrite_com(ucharcom)
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
//---液晶写数据功能-----
voidwrite_date(uchardate)
rs=1;
P0=date;
//----------写入时、分、秒--------?
voidwrite_sfm(ucharadd,uchardate)
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
//--------写入年、月、日-----------
voidwrite_nyr(ucharadd,uchardate)
write_com(0x80+add);
//--------------写入星期X---------------
voidwrite_week(ucharwe)
write_com(0x80+12);
switch(we)
{
case1:
write_date('
M'
);
delay(5);
write_date('
O'
N'
break;
case2:
T'
U'
E'
case3:
W'
D'
case4:
H'
case5:
F'
R'
I'
case6:
S'
A'
case7:
}
//-----实现初始化功能-------
voidinit()
shi=1;
fen=1;
miao=1;
day=1;
month=1;
year=1;
week=1;
count=0;
s1num=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+1);
2'
write_com(0x80+2);
0'
write_com(0x80+5);
-'
write_com(0x80+8);
write_nyr(9,day);
write_nyr(6,month);
write_nyr(3,year);
write_week(week);
write_com(0x80+0x40+6);
:
'
write_com(0x80+0x40+9);
write_sfm(10,miao);
write_sfm(7,fen);
write_sfm(4,shi);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
//--------------键盘扫描功能----------------
voidkeyscan()
if(s1==0)//键盘1是否被按下
delay(5);
//如果检测到键盘被按下,延时约
if(s1==0)//5毫秒看是否为键下,这样可越过按
{//键盘时的抖动时间,防止误判
s1num++;
while(!
s1);
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
}
if(s1num==2)
write_com(0x80+0x40+7);
if(s1num==3)
write_com(0x80+0x40+4);
if(s1num==4)
{
write_com(0x80+12);
if(s1num==5)
write_com(0x80+9);
if(s1num==6)
write_com(0x80+6);
if(s1num==7)
write_com(0x80+3);
if(s1num==8)
s1num=0;
write_com(0x0c);
TR0=1;
}
if(s1num!
=0)//键盘2是否被按下
if(s2==0)
{
delay(5);
if(s2==0)
while(!
s2);
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 设计方案 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)