电子时钟说明书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机原理及系统课程设计

评语:

考勤10分守纪10分过程30分设计报告30分答辩20分总成绩100分

专业:电气工程及自动化

班级:电气1101

姓名:卢永春

学号:201109154

指导教师:李军丽

兰州交通大学自动化与电气工程学院

2014 年 1 月 13 日

基于单片机数字电子时钟设计

1.引言

数码电子时钟的电路由显示电路、复位电路、校时电路等构成,以AT89C51作为主控芯片,使用12MHz 的晶振,用八位七段共阳数码管显示输出信息。可通过键盘对其进行调整。系统具有以下功能:时、分、秒时间显示;复位;时、分、秒时间调整。

2.设计方案及原理

2.1设计方案简述

本次设计时钟电路,使用了AT89C51单片机芯片控制电路,并用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。

本设计采用动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速。按钮1实现时钟复位,按钮2实现调整时、分、秒的模式选择,按钮3实现时、分、秒的加1调整,按钮4实现时、分、秒的减1调整。

2.2设计原理框图

总体硬件设计原理框图如图1所示。

复位电路

校时电路

晶振电路LED 显示

AT89C51

图1 总体硬件设计原理框图

3.硬件设计

本设计利用单片机内部的定时器/计数器来实现电子钟的正常走时功能,以单片机AT89C51、LED数码管为核心,辅以必要的电路,具体由复位电路、键盘电路、时钟电路、显示电路等构成了一个单片机电子时钟。复位电路采用按键复位方式,键盘电路采用独立式键盘,时钟电路用12MHz的晶振。利用七段共阳极数码管,通常接高电平,低电平有效,要构成八位LED显示时,除了需要段选线外,还需要位选线,以确定段选码对应的显示位。它的计时周期为24小时,显示满刻度为23小时59分59秒,另外具有用按键实现复位,校时功能等特点。如按钮1实现时钟复位,按钮2实现调整时、分、秒的模式选择,按钮3实现时、分、秒的加1调整,按钮4实现时、分、秒的减1调整。

此电路由1个AT89C51单片机,1个7个电阻的排阻,1个12MHz的晶振,1个八位七段共阳数码管,4个按钮开关,2个10pF电容,1个10μF电容等组成。

其在Proteus软件上仿真电路图如图2所示。

图2 Proteus软件仿真电路图

4.软件设计

利用AT89C51单片机的可编程定时/计数器、中断系统来实现时钟计数。

(1) 计数初值计算。

使用定时器T0,以工作方式1进行1ms的定时,fosc=12MHz,则

TH0=FCH TL0=18H

(2) 采用定时方式进行次数累计,计满1000次即得到秒计时。

(3) 从秒到分和从分到时的计时是通过累加和数值比较实现。

主程序流程图如图3所示。

开始

初始化

启动定时器T0分加1

秒到60

分到60

时加1

时到24

显示

有功能键按键

进入功能程序

结束否

是否

是是

图3 主程序流程图

5.系统仿真及实际调试

仿真结果图4所示。

图4 数字电子时钟仿真截屏图

6.总结

这次课设最大的收获是学会使用Keil uVision4和Proteus软件。使用Keil uVision4时,由于上学期一直是生成.asm文件,思维定式把C语言编写的程序也那样子生成了,结果无法创建,仔细检查后发现应该是.c文件。初次使用Proteus 感到很新奇,但在真正绘制电路图时才发现自己平时积累太少,根本无法找到所需要电子元气件,在网上搜到电子元器件的中英文对照表后才得以顺利进行。原本以为这样子就可以实现仿真了,结果装入后秒针出现异常走法,经检查是定时初值设置错了。自己所交文档初稿出现的很多错误,还好在老师的细心检查下得以改正,设计思路等遇到的问题也是在老师帮助下解决的,谢谢我的指导老师。自己动手确实比书本教学收获更大。

参考文献

[1]王思明.单片机原理及应用系统设计[M].科学出版社,2012.

[2]王毓银.数字电路逻辑设计[M].高等教育出版社,2004.

附录

源程序

#include

#define uint unsigned int

#define uchar unsigned char

uchar code segcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; uchar code dispbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchar buffer[]={0,0,0,0,0,0,0,0};

uint hour,min,sec;

uint status;

void delayMS(uint t) ;

void keyprocess(unsigned char key);

void display();

void timer0();

main()

{

bit keyrelease;

uchar buf;

uchar keyinput;

keyrelease=1;

buf=0xff;

TMOD=0x01;

TH0=0xFC;

TL0=0x18;

TR0=1;

IE=0x82;

status=0;

while(1)

{

keyinput=P1&0xf0;

if(keyinput!=0xf0)

{

delayMS(10);

if(keyinput!=0xf0)

{

buf=keyinput;

P1=0xff;

while(P1!=0xff)

P1=0xff;

keyprocess(buf);

buf=0xff;

相关文档
最新文档