电子时钟设计方案及程序

上传人:s9****2 文档编号:562354989 上传时间:2022-08-05 格式:DOCX 页数:12 大小:141.90KB
返回 下载 相关 举报
电子时钟设计方案及程序_第1页
第1页 / 共12页
电子时钟设计方案及程序_第2页
第2页 / 共12页
电子时钟设计方案及程序_第3页
第3页 / 共12页
电子时钟设计方案及程序_第4页
第4页 / 共12页
电子时钟设计方案及程序_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《电子时钟设计方案及程序》由会员分享,可在线阅读,更多相关《电子时钟设计方案及程序(12页珍藏版)》请在金锄头文库上搜索。

1、电子时钟设计简介该设计主要由单片机 AT89C51 和液晶显示器组成,实现常用的实时电子钟功 能。利用可编程芯片AT89C51强大的功能,我们了实现日历功能、时钟功能。该 时钟使用液晶显示器作为显示模块,使用 3 个弹性小按键作为输入模块,调节年、 月、日、星期、时、分、秒。一方案比较与论证根据设计要求,该时钟系统可分输入部分、处理部分和显示数据部分。其中 输入部分是键盘输入数据调整要显示的内容,处理部分单片机接收并通过算法处 理键盘输入的信息变成显示模块所能接受的信息,显示部分是用来实时显示处理 部分处理后的数据。输入模块我们选用三个独立弹性小按键来实现,选用矩阵式键盘则太浪费资 处理模块我

2、们选用了 STC 公司的 STC89C52 芯片来,与 Atmel 公司生产的 AT89S52 一样,也是 40 脚双列直插式封装,这里芯片对刚学单片机的人来说容 易入手,其功能也很强大,用来实现一个电子钟完全足够了。显示部分我们可有两种选择:数码管和 1602 液晶显示器。实现一个电子钟 若用数码管则需6个,所占空间相对大了些,而且我们还要实现日历的功能,需 要更多的数码管,所点空间翻倍,而且还会造成单片机I/O引脚滥用甚至不够用, 用液晶显示器来实现则方便得多,界面也相对友好,但液晶显示器有个缺点就是 价格比较贵。因此我们最终选择了 1602 液晶显示器。另处独立弹性小按键具有 价格便宜、

3、容易获得、容易控制等特点。二系统理论分析、计算与电路仿真1、定时器与中断原理电子钟主要是利用单片机的定时器/计数器和中断来实现。定时器实际是加1 计数器,单片机每运行一个机器周期定时器就自动加1,当计到所定的数N时, 单片机就产生一次中断,停下所做的工作,转而去执行中断服务程序。单片机每 个机器周期等于外部晶振的12个振荡周期,当外部晶振是12MHz时,则每个机器周期的时间是T = 12Xl/12=lMm(2-1)cy定数器设为N时,即每计到N时产生一次中断,而一次中断的时间为:t 二 NXT Mm(2-2)当产生X (x根据N来设置,两者之积为1000000)次中断后我就知道过了 Is,再通

4、过液晶显示出来,这样就达到了让液晶每隔一秒跳一下的目的了。2、proteus仿真结果Rie 單徉 Eck Tip cis Resign 0 衲 oice Deiug L*吟 Ttrnpute 卑hei HelpDe甬直皿 團比*卡食鱼乂& 9。| 9(电H|;KZ|出* 4 啞|佃乂底直內国回|二8UTT0N fillZXRLCD1LAuh.- -2012-89-08 SAT12I5SI5I-4FFHF FEEWD-a?3T4KftfiM MChMD?ftUUV!KLIi4 应2SW rzassii Pj-LMli- nj.rsra 厲昌朋KEB n.inSL Pj xriTE rajfBTT

5、rm-:-a;-J:iEmo 41U1D Ih3、液晶部分3-4图液晶1、2端口分别是工作电源的负、正极,15、16是液晶背光灯电源正负 极,R4起限流作用,避免电流过大烧坏背光灯。第3端口还可接一电位器,调 节液晶显示对比度。无标号的8个端口是数据端,通过一上拉电阻接到单片机的 P0 口。三系统的软件设计(如必要,含有流程图)1、程序流程图流程图中的X表示液晶中秒、分、时、星期、年、月、日中的任一个。图 5-1 主程序流程图图 5-2 扫描键盘的子程序流程 四系统测试及结果 测试结果总的来说很满意,比预计的还要好。但由于中断函数中代码较长, 故存在一定程度的误差,用秒表测试大约为每 5 分钟

6、慢了一秒,这个问题是用单 片机定时器来数时所无法解决的,中断函数必定会较长,处理这一函数会花费一 定的时间这就无法做到让时钟走得很精确。解决方法是用一时钟芯片来实现,由 于时钟芯片不好买又比较贵(新的 20 几块一片),暂时就不考虑了,有机会再尝 试。1源程序/主函数放在最后面#include #define uchar unsigned char#define uint unsigned intsbit rs=P2人4;/定义液晶数据命令选择端 sbit lcden=P2人5;/液晶使能端 sbit s1=P2A0;/按 键 1sbit s2=P2T;按键 2sbit s3=P2人2;/按键

7、 3uchar count,s1num;char shi,fen,miao; 时、分、秒char year,month,day,week;/年月 日星期void delay(uint x)延时子程序uint j,k;for(j=x;j0;j-) for(k=110;k0;k-);/液晶写命令功能-void write_com(uchar com)rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;/-液晶写数据功能void write_date(uchar date)rs=1;lcden=0;P0=date;delay(5);lcden=

8、1;delay(5);lcden=0;/写入时、分、秒?void write_sfm(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi); write_date(0x30+ge);/写入年、月、日void write_nyr(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi); write_date(

9、0x30+ge);/写入星期 Xvoid write_week(uchar we)write_com(0x80+12);switch(we)case 1: write_date(M);delay(5); write_date(O);delay(5); write_date(N); break;case 2: write_date(T);delay(5); write_date(U);delay(5); write_date(E); break;case 3: write_date(W);delay(5); write_date(E);delay(5); write_date(D); break

10、;case 4: write_date(T);delay(5); write_date(H);delay(5); write_date(U); break;case 5: write_date(F);delay(5); write_date(R);delay(5); write_date(I); break;case 6: write_date(S);delay(5); write_date(A);delay(5); write_date(T);break;case 7: write_date(S);delay(5); write_date(U);delay(5); write_date(N)

11、; break;/实现初始化功能void init()lcden=0;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);write_date(2);write_com(0x80+2); write_date(0);write_com(0x80+5); write_date(-);write_com(0x80+8);write_date(-);write_n

12、yr(9,day);write_nyr(6,month); write_nyr(3,year);write_week(week);write_com(0x80+0x40+6); write_date(:);write_com(0x80+0x40+9);write_date(:);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;/ 键盘扫描功能void keyscan()if(sl=O)键盘1是否被

13、按下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

14、+6);if(slnum=7)write_com(0x80+3);if(slnum=8)slnum=0;write_com(0x0c);TR0=l;if(slnum!=O)键盘2是否被按下 if(s2=0)delay(5);if(s2=0)while(!s2);if(slnum=l)miao+;if(miao=60) miao=0; write_sfm(l0,miao);write_com(0x80+0x40+l0);if(slnum=2)fen+;if(fen=60)fen=0;write_sfm(7,fen); write_com(0x80+0x40+7);shi+;if(shi=24) shi=0; write_sfm(4,shi); write_com(0x80+0x40+4);i

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号