ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:219.33KB ,
资源ID:5037212      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5037212.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于c语言的数字电子钟设计.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于c语言的数字电子钟设计.docx

1、基于c语言的数字电子钟设计一、功能要求整体上要考虑:结构简单大方、布局美观合理、操作方便易懂、尽量避免各元器件之间的相互影响。1、 以AT89C51单片机进行实现秒 分 时上的正常显示和进位,其中显示功能由单片机控制共阴极数码管来实现,数码管进行动态显示。2、 具有校时功能,按键控制电路其中时键、分键、秒键三个键分别控制时 分 秒时间的调整。按秒键秒加1;按分键分加1;按时键时加1.二、硬件设计1、整体设计框图2、管脚功能描述(1) XTAL1(19 脚)和XTAL2(18 脚):振荡器输入输出端口,外接晶振电路。(2)RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。(3)

2、P0口8个端口依次和LED显示器的A、B、C、D、E、F、G和Dp端口对应连接,实现对显示器的片选功能。(4)P2.0P2.5依次与LED显示器的1、2、3、4、5、6一一连接,实现对显示器的为选功能。(5)P3.0P3.2依次与按键电路的秒、分、时三个按键相连接。通过按键实现对时间的调试功能。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单片机采用内部时钟方式。采用外接晶体和电容组成的并联谐振回路。其电路图如下:5、显示电路LED显示器是现在最

4、常用的显示器之一发光二极管(LED)分段式显示器由7条线段围成8字型,每一段包含一个发光二极管。外加正向电压时二极管导通,发出清晰的光。只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,采用动态显示方式显示时间,其硬件连接方式如下图所示。 6、键盘控制电路 键盘可实现对时间的校对,用三个按键来实现。按时键来调节小时的时间,按分键来调节分针的时间,按秒键来调节秒的时间。其电路连接图如下:三、软件设计1、主程序流程图主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。主程序流程图如下2

5、、按键控制流程图按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;每一次按后都有一次延迟,所有检测完后,就把时间显示出来。 NYNYNY时加1显示时间结束开始秒按键按下?秒加1分按键按下?分加1时按键按下?3、 显示电路流程图 由P2口进行位选功能,进行动态显示。时间显示是先时个位计算显示,然后是时十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是秒个位计算显示,最后是秒十位显示。每一位显示后都有一个延时秒十位计算显示结束开始时个位计算显示时十位计算显示

6、分个位计算显示分十位计算显示秒个位计算显示 4、中断电路流程图定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;如果没到,就检测1分钟是否到,1分钟如果到,分单元就加1;如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间。N等于24小时分单元清零,时单元加1NNNYY时单元清零时间显示中断返回开始一秒时间到?等于60秒等于60分秒单元加1秒单元清零,分单元加1YY四、系统测试1、测试内容(1)能否实现正常的时间显示默认为走时状态,按24小时制分别显示“时时分分秒秒”六个数字,时间会按实际时间以秒为最少单位变化。(2)能否进行正常的时间进位 当秒位为59时,下

7、一次秒位数字变化分位是否加1同时秒位变为00;当分位为59时,下一次分位数字变化时位是否加1同时分位变为00;当时位为23时,下一次时位数字变化时为是否变为00.若满足以上要求则时间进位正常。(3)能否通过按键进行时分秒的设定按秒键对秒进行调整,按一下加一秒;按分键对分进行调整,按一下加一分;按时键对时进行调整,按一下加一小时,从而达到快速设定时间的目的。若满足以上要求则符合方案要求。若按一下连续加若干位,则按键延时时间设置太短,可以通过增大延时时间进行改进。2、系统时钟误差分析电子钟的走时误差S=S1-S2,S1表示程序实际运行计算所得的秒;S2表示客观时间的标准秒。S0时表示电子钟秒单元数

8、值刷新滞后,即走时误差为“慢”;反之,S0即走时“慢”。其误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。晶体频率产生震荡,容易产生走时误差;定时器溢出的时间误差,本应这一秒溢出,但却在下一秒溢出,造成走时误差;延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。3、软件调试仿真部分采用protus 7.5 professional软件,可以很容易的实现各种系统的仿真。先进行原理图的绘制;绘制好后再选择Keil软件来生成.hex文件,选择运行,观察显示结果,根据显示的结果和课题的要求再修改程序,再运行查,直到满足要求。4、 仿真图/基于AT89C51单片机的电子钟C语言程序#

9、include#include#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/ uchar code dispcode =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF;/*定义并初始化变量*/uchar seconde=0;uchar minite=0;uchar hour=12;uchar mstcnt=0;sbit P3_0=P30; / second 调

10、整定义sbit P3_1=P31; /minite调整定义sbit P3_2=P32; /hour调整定义/*函数声明*/void delay(uchar k ); /延时子程序void time_pro( ); /时间处理子程序void display( ); /显示子程序void keyscan( ); /键盘扫描子程序void init(); /定时子程序/*/*延时子程序*/*/void delay (uchar k)uchar j; while(k-)!=0) for(j=0;j125;j+) ; /*/*时间处理子程序*/*/void time_pro( void) if(seco

11、nde=60) /秒钟设为60进制 seconde=0; minite+; if( minite=60) /分钟设为60进制 minite=0; hour+; if(hour=24) /时钟设为24进制 hour=0; /*/* 显示子程序*/*/void display(void) P2=0xfe; P0=dispcodehour/10; /显示小时的十位 delay(4); P2=0xfd; P0=(dispcode(hour%10)|0X80; /显示小时的个位 delay(4); P2=0xfb; P0=dispcodeminite/10; /显示分的十位 delay(4); P2=0

12、xf7; P0=(dispcodeminite%10)|0X80; /显示分的个位 delay(4); P2=0xef; P0=dispcodeseconde/10; /显示秒的十位 delay(4); P2=0xdf; P0=dispcodeseconde%10; /显示秒的个位 delay(4); /*/*键盘扫描子程序*/*/void keyscan (void) if(P3_0=0) /按键1秒的调整 delay(30); if(P3_0=0) seconde+; if(seconde=60) seconde=0; while(!P3_0); if(P3_1=0) /按键2分的调整 d

13、elay(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) hour+; if(hour=24) hour=0; while(!P3_2);void timer0(void) interrupt 1 using 0 /定时器0方式1,50ms中断一次 TH0=0x3c;TMOD = 0x11; mstcnt+; if(mstcnt=20) seconde+; mstcnt=0; /对计数单元清零 /*/*定时子程序*/*/void init() P3=0xff; /初始化p3口,全设为1 TMOD = 0x11; /time0为定时器,方式1 TH0=0x3c; /预置计数初值 TL0=0xb0; EA=1; ET0=1; TR0=1; /*/*主函数*/*/void main(void) init(); while (1) keyscan( ); /按键扫描 time_pro( ); /时间处理 display( ); /显示时间

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2