《基于c语言的数字电子钟设计.pdf》由会员分享,可在线阅读,更多相关《基于c语言的数字电子钟设计.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.1 一、功能要求 整体上要考虑:构造简单大方、布局美观合理、操作方便易懂、尽量防止各元器件之间的相互影响。1、以 AT89C51 单片机进展实现秒 分 时上的正常显示和进位,其中显示功能由单片机控制共阴极数码管来实现,数码管进展动态显示。2、具有校时功能,按键控制电路其中时键、分键、秒键三个键分别控制时 分 秒时间的调整。按秒键秒加 1;按分键分加 1;按时键时加 1.二、硬件设计 1、整体设计框图 2、管脚功能描述 1*TAL119 脚和*TAL218 脚:振荡器输入输出端口,外接晶振电路。2RST/Vpd9 脚为复位输入端口,外接电阻电容组成的复位电路。3P0 口 8 个端口依次和 LE
2、D 显示器的 A、B、C、D、E、F、G 和 Dp 端口对应连接,实现对显示器的片选功能。4P2.0P2.5 依次与 LED 显示器的 1、2、3、4、5、6 一一连接,实现对显示器的为选功能。(5)P3.0P3.2 依次与按键电路的秒、分、时三个按键相连接。通过按键实现对时间的调试功能。.1 3、整体原理设计 其计时周期为 24 小时,显示满刻度为 23 时 59 分 59 秒,另外还有校时功能。整个设计图由晶振电路、复位电路、AT89C51单片机、键盘控制电路组成。显示电路将“时、“分、“秒通过七段显示器显示出来,6 个数码管的段选接到单片机的 P0 口,位选接到单片机的 P2 口。数码管
3、按照数码管动态显示的工作原理工作。把定时器定时时间设为 50ms,则计数溢出 20 次即得时钟计时最小单位秒,而 20 次计数可用软件方法实现,每累计 60 秒进 1分,每累计 60 分钟,进 1 小时。时采用 24 进制计时器,可实现对一天 24 小时的累计。校时电路时用来对“时、“分、“秒显示数字进展校对调整,时分秒三个控制键分别接单片机的 p3.2、p3.1、p3.0 进展控制。按一下秒键秒单元就加 1,按一下分键分就加 1,按一下时键时就加 1。4、晶振电路 单片机的时钟产生方法有两种:部时钟方式和外部时钟方式。本系统中 AT89C51 单片机采用部时钟方式。采用外接晶体和电容组成的并
4、联谐振回路。其电路图如下:5、显示电路 LED 显示器是现在最常用的显示器之一发光二极管LED分段式显示器由 7 条线段围成 8 字型,每一段包含一个发光二极管。外加正向电压时二极管导通,发出清晰的光。只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要 6 个数码管,采用动态显示方式显示时间,其硬件连接方式如以下图所示。6、键盘控制电路.1 键盘可实现对时间的校对,用三个按键来实现。按时键来调节小时的时间,按分键来调节分针的时间,按秒键来调节秒的时间。其电路连接图如下:三、软件设计 1、主程序流程图 主程序是先开场,然后启动定
5、时器,定时器启动后在进展按键检测,检测完后,就可以显示时间。主程序流程图如下 2、按键控制流程图 按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加 1;如果没有按下,就检测分按键是否按下,分按键如果按下,分就加 1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加 1;每一次按后都有一次延迟,所有检测完后,就把时间显示出来。3、显示电路流程图 由 P2 口进展位选功能,进展动态显示。时间显示是先时个位计算显示,然后是时十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是秒个位计算显示,最后是秒十位显示。每一位显示后都有一个延时 4、中断电路流程图 定时器中断时是先检测
6、1 秒是否到,1 秒如果到,秒单元就加 1;如果没到,就检测 1 分钟是否到,1 分钟如果到,分单元就加 1;如N Y N Y N Y 时加 1 显示时间 开场 秒按键按下.秒加 1 分按键按下.分加 1 时按键按下.开场 时个位计算显示 时十位计算显示.1 果没到,就检测 1 小时是否到,1 小时如果到,时单元就加 1,如果没到,就显示时间。四、系统测试 1、测试容 1能否实现正常的时间显示 默认为走时状态,按 24 小时制分别显示“时时分分秒秒六个数字,时间会按实际时间以秒为最少单位变化。2能否进展正常的时间进位 当秒位为 59 时,下一次秒位数字变化分位是否加 1 同时秒位变为 00;当
7、分位为 59 时,下一次分位数字变化时位是否加 1 同时分位变为 00;当时位为 23 时,下一次时位数字变化时为是否变为00.假设满足以上要求则时间进位正常。3能否通过按键进展时分秒的设定 按秒键对秒进展调整,按一下加一秒;按分键对分进展调整,按一下加一分;按时键对时进展调整,按一下加一小时,从而到达快速设定时间的目的。假设满足以上要求则符合方案要求。假设按一下连续加假设干位,则按键延时时间设置太短,可以通过增大延时时间进展改进。2、系统时钟误差分析 电子钟的走时误差 S=S1-S2,S1 表示程序实际运行计算所得的秒;S2 表示客观时间的标准秒。S0 时表示电子钟秒单元数值刷新N 等于 2
8、4 小时 分单元清零,时单元加 1 N N N Y Y 时单元清零 时间显示 中断返回 开场 一秒时间到.等于 60 秒 等于 60 分 秒单元加 1 秒单元清零,分单元加 1 Y Y.1 滞后,即走时误差为“慢;反之,S0 即走时“慢。其误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。晶体频率产生震荡,容易产生走时误差;定时器溢出的时间误差,本应这一秒溢出,但却在下一秒溢出,造成走时误差;延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。3、软件调试 仿真局部采用 protus 7.5 professional 软件,可以很容易的实现各种系统的仿真。先进展原理图的绘制;绘
9、制好后再选择 Keil 软件来生成.he*文件,选择运行,观察显示结果,根据显示的结果和课题的要求再修改程序,再运行查,直到满足要求。4、仿真图/基于 AT89C51 单片机的电子钟 C 语言程序*include*include*define uchar unsigned char*define uint unsigned int/*七段共阴管显示定义*/.1 uchar code dispcode=0*3F,0*06,0*5B,0*4F,0*66,0*6D,0*7D,0*07,0*7F,0*6F,0*BF,0*86,0*CB,0*CF,0*EF,0*ED,0*FD,0*87,0*FF,0*D
10、F;/*定义并初始化变量*/uchar seconde=0;uchar minite=0;uchar hour=12;uchar mstt=0;sbit P3_0=P30;/second 调整定义 sbit P3_1=P31;/minite 调整定义 sbit P3_2=P32;/hour 调整定义/*函数声明*/void delay(uchar k);/延时子程序 void time_pro();/时间处理子程序 void display();/显示子程序 void keyscan();/键盘扫描子程序 void init();/定时子程序/*/*延时子程序*/*/.1 void delay
11、(uchar k)uchar j;while(k-)!=0)for(j=0;j125;j+);/*/*时间处理子程序*/*/void time_pro(void)if(seconde=60)/秒钟设为 60进制 seconde=0;minite+;if(minite=60)/分钟设为 60 进制 minite=0;hour+;if(hour=24)/时钟设为 24 进制.1 hour=0;/*/*显示子程序*/*/void display(void)P2=0*fe;P0=dispcodehour/10;/显示小时的十位 delay(4);P2=0*fd;P0=(dispcode(hour%10
12、)|0*80;/显示小时的个位 delay(4);P2=0*fb;P0=dispcodeminite/10;/显示分的十位 delay(4);P2=0*f7;.1 P0=(dispcodeminite%10)|0*80;/显示分的个位 delay(4);P2=0*ef;P0=dispcodeseconde/10;/显示秒的十位 delay(4);P2=0*df;P0=dispcodeseconde%10;/显示秒的个位 delay(4);/*/*键盘扫描子程序*/*/void keyscan(void)if(P3_0=0)/按键 1 秒的调整 delay(30);if(P3_0=0).1 se
13、conde+;if(seconde=60)seconde=0;while(!P3_0);if(P3_1=0)/按键 2 分的调整 delay(30);if(P3_1=0)minite+;if(minite=60)minite=0;while(!P3_1);if(P3_2=0)/按键 3 小时的调整 delay(30);if(P3_2=0).1 hour+;if(hour=24)hour=0;while(!P3_2);void timer0(void)interrupt 1 using 0 /定时器 0 方式 1,50ms 中断一次 TH0=0*3c;TMOD=0*11;mstt+;if(mstt=20)seconde+;mstt=0;/对计数单元清零 /*/*定时子程序*/*/.1 void init()P3=0*ff;/初始化 p3 口,全设为 1 TMOD=0*11;/time0 为定时器,方式 1 TH0=0*3c;/预置计数初值 TL0=0*b0;EA=1;ET0=1;TR0=1;/*/*主函数*/*/void main(void)init();while(1)keyscan();/按键扫描 time_pro();/时间处理 display();/显示时间 .1
限制150内