基于proteus的数字电子钟的仿真设计

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

基于p r o t e u s的数字电子钟的仿真设计

文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)

课程论文题目:基于Proteus的数字电子钟的设计

与仿真课程名称:单片机系统设计与Proteus仿真

学生姓名:马珂

学生学号: 23

系别:电子工程学院

专业:通信工程

年级: 13级

任课教师:徐锋

电子工程学院

2015年5月

目录

2

4

六、4

基于Proteus的数字电子钟的设计与仿真

一、设计目的与要求

设计目的:通过课程设计,培养学生运用已学知识解决实际问题的能力、查阅资料的能力、自学能力和独立分析问题、解决问题的能力和能通过独立思考。

设计要求:设计一个时、分可调的数字电子钟、开机显示“9-58-00”。

二、设计内容与方案制定

具有校时功能,按键控制电路其中时键、分键两个键分别控制时、分时间的调整。按分键分加1;按时键时加1。

以AT89C51单片机进行实现秒、分、时上的正常显示和进位,其中显示功能由单片机控制共阴极数码管来实现,数码管进行动态显示。

三、设计步骤

1、硬件电路设计

.硬件电路组成框图

.各单元电路及工作原理

(1)晶振电路

单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。本系统中

AT89C51单片机采用内部时钟方式。采用外接晶体和电容组成的并联谐振回路。其电路图如下:

(2)键盘控制电路

键盘可实现对时间的校对,用两个按键来实现。按时键来调节小时的时间,按分键来调节分针的时间。其电路连接图如下:

(3)显示电路

LED显示器是现在最常用的显示器之一发光二极管(LED)分段式显示器由7条线段围成8字型,每一段包含一个发光二极管。外加正向电压时二极管导通,发出清晰的光。只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,采用动态显示方式显示时间,其硬件连接方式如下图所示。

.绘制原理图

其计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。整个设计图由晶振电路、复位电路、AT89C51单片机、键盘控制电路组成。显示电路将“时”、“分”、“秒”通过七段显示器显示出来,6个数码管的段选接到单片机的P0口,位选接到单片机的P2口。数码管按照数码管动态显示的工作原理工作。把定时器定时时间设为50ms,则计数溢出20次即得时钟计时最小单位秒,而20次计数可用软件方法实现,每累计60秒进1分,每累计60分钟,进1小时。时采用24进制计时器,可实现对一天24小时的累计。校时电路时用来对“时”、“分”显示数字进行校对调整,时分秒三个控制键分别接单片机的、进行控制。按一下分键秒单元就加 1 ,按一下时键分就加1。

.元件清单列表

单片机AT89C51*1

电解电容CAP-ELEC 10uF*1

瓷片电容CAP 22pF*2

电阻RES*10

晶振CRYSTAL *1

数码管7SEG-MPX8-CA-BLUE*1

三极管NPN*8

按钮BUTTON*3

上位排阻RESPACK-8*1

2.程序设计

程序程序

数字电子钟采用内部硬件定时器来进行定时,计时最小单位sec100为10ms。若sec100每计满100次时,表示已经计时1s,则sec100清零且sec加1。如果sec等于60,应将sec清零,同时min加1。如果min等于60,应将min清零,

同时hour加1。如果hour大于23时,应将hour清零。通过分析可知,程序中可分别由inc_sec()、inc_min()、inc_hour()这是三个函数负责秒、分、时的计时。Sec100的计时由Timer0()中断函数来实现。

按钮K1(INT0)和K1(INT1)为调时、调分控制按键。这两个按钮信号的输入采用外部中断方式来实现。若产生外部中断时,通过调用inc_hour()或inc_min()函数来实现调时或调分操作。编写显示函数display()时,应考虑小时数小于10时,应屏蔽时的十位数,使其不显示。

汇编程序

c语言编写的程序如下:

#include<>

#define uchar unsigned char

#define unit unsigned int

sbit k1=P3^2;

sbit k2=P3^3;

uchar tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF};

uchar dis_buff[8];

uchar sec100,sec,min,hour;

void delay(unit k)

{

unit m,n;

for(m=0;m

{

for(n=0;n<120;n++); }

}

void display(void)

{

P2=0X80;

P0=tab[dis_buff[0]];

delay(2);

P2=0x40;

P0=tab[dis_buff[1]];

delay(2);

P2=0x20;

P0=tab[dis_buff[2]];

delay(2);

P2=0x10;

P0=tab[dis_buff[3]];

delay(2);

P2=0x08;

P0=tab[dis_buff[4]];

delay(2);

P2=0x04;

相关文档
最新文档