资源描述
目 录
摘 要 1
1绪论 2
2整体设计方案 2
2.1单片机简介 2
2.2单片机的特点 2
2.3 AT89C51单片机介绍 3
3 数字钟的硬件设计 4
3.1电子钟系统硬件组成 4
3.2电子时钟系统设计流程图 4
3.3单片机的基本结构 5
3.4 Protel DXP电路图设计 9
3.5 Proteus 电路图设计 9
4 数字钟的软件设计 10
4.1系统软件设计流程图 10
4.2设计主程序 15
4.3 KeilC51进行程序调试 19
5系统仿真 20
5.1 Proteus中Hex 文件选择 20
5.2 Proteus进行电子钟系统仿真 21
5.3结束语 22
参考文献 23
致 谢 24
基于单片机的电子时钟设计
摘 要:现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。数码管显示的时间简单明了而且读数快、时间准确显示到秒。而机械式的依赖于晶体震荡器,可能会导致误差。
数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。数字钟的精度、稳定度远远超过老式机械钟。在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。
关键字:数字电子钟;单片机
1绪论
本文的电子钟系统是以单片机(AT89C51)为核心,时钟芯片DS1302、数码管显示驱动芯片MAX7219等元器件组成。具体介绍应用Proteus的ISIS软件进行单片机系统的电子钟设计与仿真的实现方法。该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。
然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的电子设备外,开发过程也较繁琐。来自英国Labcenter Electronics公司的Proteus软件很好地诠释了利用现代EDA工具方便快捷开发单片机系统的优势。它包括PROTEUS VSM(Virtual System Modelling)、PROTEUS PCB DESIGN两大组成部分,在PC机上就能实现原理图电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证以及形成PCB文件的完整嵌入式系统设计与研发过程。
2整体设计方案
2.1单片机简介
单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
2.2单片机的特点
1.单片机的存储器ROM和RAM时严格区分的。ROM称为程序存储器,只存放程序,固定常数,及数据表格。RAM则为数据存储器,用作工作区及存放用户数据。
2.采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。
3.单片机的I/O口通常时多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能,可由指令来设置或由机器状态来区分。
4.单片机的外部扩展能力很强。在内部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带来了很大的方便。
2.3 AT89C51单片机介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51单片机如下图(1)所示:
图(1) AT89C51单片机
3 数字钟的硬件设计
3.1电子钟系统硬件组成
电子钟系统硬件主要由AT89C51单片机、时钟芯片DS1302、数码管显示驱动芯片MAX7219等元器件组成。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时。
MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片。
电子钟系统硬件系统如下图(2):
图(2)电子钟系统硬件电路组成框图
3.2电子时钟系统设计流程图
图(3) 电子时钟系统设计流程图
3.3单片机的基本结构
MCS-52单片机内部结构
8052单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM)
8052内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
下图为单片机内部结构:
图(4)单片机8052的内部结构
程序存储器(ROM):
8052共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
定时/计数器(ROM):
8052有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:
8052共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。
全双工串行口:
8052内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
8052具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
8052内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8052单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-52系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
下图是MCS-52系列单片机的内部结构示意图:
图(5)MCS-52系列单片机的内部结构
MCS-52的引脚说明:
MCS-52系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:
MCS-51的引脚说明:
MCS-52系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明,如下图:
图(6)单片机的引脚图
Pin9:RESET/Vpd复位信号复用脚,当8052通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8052的初始态。
8051的复位方式可以是自动复位,也可以是手动复位,见下图(7)。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
图(7)上电自动和手动复位电路图
图(8) 内部和外部时钟方式图
Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。
如果单片机是EPROM,在编程其间,将用于输入编程脉冲。
Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。
Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。
3.4 Protel DXP电路图设计
Protel DXP设计的电子钟电路原理图如下图(9):
图(9)Protel DXP设计的电子钟电路原理图
主要元器件功能介绍:
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时。具有调时功能。时钟操作可通过AM\PM指示决定采用24或12小时格式。
MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片。采用三线制串行接口技术进行数据传送,可直接与单片机连接,用户能方便地修改内部参数实现多位LED数码管显示。内含有硬件动态扫描显示控制,每块芯片可驱动8个LED数码管。
3.5 Proteus 电路图设计
运行Proteus的ISIS 后出现程序主窗口界面,鼠标左键单击窗口左侧的元器件工具栏的component.按钮, 接着再点击窗口左侧的元器件选择区的Pick Divices.按钮,弹出如图1所示的Pick Devices窗口,再在Categ栏里点击MicroprocessorICs项后,在Results栏里会出现各种类型的CPU器件,找到 AT89C51后双击,AT89C51就被添加到当前窗口左侧的元器件列表区了。
用同样的方法依次把 DS130、MAX7219、数码管、晶振以及多个电阻、电容也添加到器件列表区里。
然后再依次点击列表区里的器件,单击左键把他们放到绘图区,右键选中元件,并编辑其属性,合理布局后,进行连线。连线时当鼠标的指针靠近一个对象的引脚时,跟着鼠标的指针r ICs就会出现一个“×”提示符号,点击鼠标左键即可画线了,需要拐弯时点击一下即可,在终点再点击确认一下就画出了一段导线,所有导线画完后,点击工具栏的 Inter-sheeTerminal.按钮,添加上电源和接地符号,原理图的绘制就完成了。如下图(10):
图(10) Proteus中设计的电子时钟系统原理图
4 数字钟的软件设计
4.1系统软件设计流程图
(图11)系统软件设计流程图
按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;如果没有按下,就把时间显示出来。
N
Y
N
Y
N
Y
时加1
显示时间
结束
开始
秒按键按下?
秒加1
分按键按下?
分加1
时按键按下?
图(12) 按键处理流程图
定时器中断时是先检测1秒是否到,1秒如果到,秒单元就加1;如果没到,就检测1分钟是否到,1分钟如果到,分单元就加1;如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间。
N
24小时到?
分单元清零,时单元加1
N
N
N
Y
Y
时单元清零
时间显示
中断返回
开始
一秒时间到?
60秒时间到?
60分钟到?
秒单元加1
秒单元清零,分单元加1
Y
Y
图(13)定时器中断流程图
时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。
时十位计算显示
结束
开始
秒个位计算显示
秒十位计算显示
分个位计算显示
分十位计算显示
时个位计算显示
图(14)时间显示流程图
4.2设计主程序
中断技术在单片系统中有着十分重要的作用,它不仅可以提高单片机CPU的效率,也可以对突发事件处理。所谓中断就是当CPU正在执行程序A时,发生了另一个急需处理的事件B,这是CPU暂停当前执行的程序A,立即转去执行处理事件B的程序,处理完事件B后,再返回到程序A继续执行,这个过程被叫做中断。关于中断的概念有下列几个名词:(1)程序A称为主程序,(2)处理事件B的程序称为中断服务程序,(3)主程序中转向中断服务程序的地方称为断点,(4)引起中断的原因即事件B称为中断源,(5)转去执行中断服务程序称为中断响应。关于中断的概念可以打个如下的比喻。领导(CPU)在自己的房间办公(执行主程序),下属(外设)有问题打电话来请示(中断源),领导停下正在进行的工作,通过电话给下属做指示(执行中断服务程序),指示完后,领导挂断电话,继续做自己的工作(返回主程序继续执行)。
中断是一个过程,当中央处理器CPU在处理某件事情时,外部又发生了另一紧急事件,请求CPU暂停当前的工作而去迅速处理该紧急事件。处理结束后,再回到原来被中断的地方,继续原来的工作。引起中断的原因或发出中断请求的来源,称为中断源。
单片机一般允许有多个中断源,当几个中断源同时向CPU请求中断时,就存在CPU优先响应哪一个中断请求源的问题(优先级问题),一般根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求,于是便规定每一个中断源都有一个中断优先级别,并且CPU总是响应级别最高的中断请求。
当CPU正在处理一个中断源请求的时候,又发生了另一个优先级比它高的中断源请求,如果CPU能够暂时中止对原来中断处理程序的执行,转而去处理优先级更高的中断源请求,待处理完以后,再继续执行原来的低级中断处理程序,这样的过程称为中断嵌套。
以下为部分源程序:
#include "AT89X51.H"
#include "delay.h"
#include "max7219.c"
#include "music.c"
#define uchar unsigned char
#define uint unsigned int idata
sbit ADD=P1^1;
sbit SUB=P1^0;
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
void showDay(void);//显示时间
void showData(void);//显示日期
void showDishi(void);//显示定时
void int_0(void);//中断0
void int_1(void);//中断1
void flash_max7219(unsigned char n);//闪一个位max7219
/*********************************************************************/
/* 实时时钟模块 时钟芯片型号:DS1302 */
/*/
/*********************************************************************/
sbit T_CLK = P2^3; /*实时时钟时钟线引脚 */
sbit T_IO = P2^4; /*实时时钟数据线引脚 */
sbit T_RST = P2^5; /*实时时钟复位线引脚 */
/********************************************************************/
void v_RTInputByte(uchar ucDa); //往DS1302写入1Byte数据
uchar uc_RTOutputByte(void);// 从DS1302读取1Byte数据
void v_W1302(uchar ucAddr, uchar ucDa);//往DS1302写入数据
uchar uc_R1302(uchar ucAddr);//读取DS1302某地址的数据
//void v_BurstW1302T(uchar *pSecDa);//往DS1302写入时钟数据(多字节方式)
//void v_BurstR1302T(uchar *pSecDa);//读取DS1302时钟数据
//void v_BurstW1302R(uchar *pReDa);//往DS1302寄存器数写入数据(多字节方式)
//void v_BurstR1302R(uchar *pReDa);//读取DS1302寄存器数据
void v_Set1302(uchar *pSecDa) ;//设置初始时间,,输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
void v_Get1302(uchar ucCurtime[]) ;//读取DS1302当前时间
uchar showTime[8]={0,0,10,0,0,10,0,0};//显示的时间**********************************************全局变量
uchar setTime[2]={0,0};//定时的设定
uchar time[7]={0,0x59,0x19,0x24,0x7,0x01,0x08};//秒 分 时 日 月 星期 年
uchar Tmod=7;//此时的调节模式
void main()
{
delay_ms(200);
//sound();
initMAX7219();//初始化max7219
cls();//清屏max7219
//v_Get1302(& time);
//v_Set1302(& time);
EX0=1;
EX1=1;
IT1=1;//下降沿触发
IT0=1;
EA=1;//开中断
v_Get1302(& time);
showDay();
//int_1();
//int_0();
while(1)
{
v_Get1302(& time);
showDay();
if ((setTime[0]==time[2])&&(setTime[1]==time[1]))sound();
}
}
//************************************************显示时间
void showDay(void)
{
//将数据转化为显示格式
showTime[7]=time[0] & 0x0f;//个位
showTime[6]=time[0]>>4;//十位
showTime[4]=time[1] & 0x0f;
showTime[3]=time[1]>>4;
showTime[1]=time[2] & 0x0f;
showTime[0]=time[2]>>4;
showTime[2]=showTime[5]=10;
disp_88(& showTime);
}
//*************************************************显示日期
void showData(void)
{
showTime[7]=time[3] & 0x0f;
showTime[6]=time[3]>>4;
showTime[4]=time[4] & 0x0f;
showTime[3]=time[4]>>4;
showTime[1]=time[6] & 0x0f;
showTime[0]=time[6]>>4;
showTime[2]=showTime[5]=10;
disp_88(& showTime);
}
//*************************************************显示定时
void showDishi(void)
{
showTime[1]=setTime[0] & 0x0f;
showTime[0]=setTime[0]>>4;
showTime[4]=setTime[1] & 0x0f;
showTime[3]=setTime[1]>>4;
showTime[6]=12;
showTime[7]=13;
showTime[2]=showTime[5]=10;
disp_88(& showTime);
}
4.3 KeilC51进行程序调试
图(15)KeilC51程序调试图
5系统仿真
5.1 Proteus中Hex 文件选择
系统仿真分析电路原理图在ISIS里设计完成,并将系统软件编译成.Hex文件,再进行电子时钟的系统虚拟仿真 。
(1)在ISIS的原理图中,右键单击AT89C51将其选中,然后单击左键打开AT89C51的Edit Component 对话框,如下图所示。
图(16)生成.DSN文件图
(2)选择相应的.Hex文件,再在Proteus ISIS 编辑窗口的File菜单中选择Save Design 选项,保存设计,生成.DSN文件。
5.2 Proteus进行电子钟系统仿真
在Proteus ISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如下图所示。
图(17)Proteus系统仿真结果
实现功能:
当进入调整功能时,按第一个键K1进行减运算,按第二个键K2进行加运算。
按下第三个键K3,实现日期\时间调整及\定时功能,等数字闪烁后,按一二键进行加减,从而可以进行具体日期时间调整。
当定时设定后,到预定时间后,系统通过C51音乐程序演唱歌曲-八月桂花。
按下第四个键K4,可以进行时间\日期切换,8位LED数码管将显示时间或日期,采用24小时制。
时间显示格式为:时-分-秒;日期显示格式为:日-月-年。
具有实时显示当前计算机系统时间和日期的功能。
5.3结束语
本文的电子钟系统是以单片机(AT89C51)为核心,时钟芯片DS1302、数码管显示驱动芯片MAX7219等元器件组成。具体介绍应用Protel DXP进行电路原理图设计,Keil C51软件调试程序以及Proteus的ISIS软件进行单片机系统的电子钟设计与仿真。实现了硬件软化的目的。
我在这一次数字电子钟的设计过程中,很是受益匪浅。通过对自己在大学三年时间里所学的知识的回顾,并充分发挥对所学知识的理解和对毕业设计的思考及书面表达能力,最终完成了。这为自己今后进一步深化学习,积累了一定宝贵的经验。撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。培养了我运用所学知识解决实际问题的能力。
通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。这个实验十分有意义 我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。
我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。
参考文献
[1] 代启化.基于Proteus的电路设计与仿真[J].现代电子技术.2006,第19期.
[2] 曹洪奎;马莹莹 基于Proteus单片机系统设计与仿真[J]. 辽宁工学院学报07年04期
[3] 侯玉宝 基于Proteus的51系列单片机设计与仿真[M]电子工业出版社,2008.270~288
[4] 蔡希彪,曹洪奎; 单片机电子时钟系统的设计与仿真 [J];中国科技信息; 2007年04期
[5] 方怡冰.单片机课程的教学与实验改革[J].电气电子教学学报.2006,第3期.
[6] 刘文秀.单片机应用系统仿真的研究[J].现代电子技术.2005, 第286 期
[7] 张友德.单片微型机原理、应用与实验[M].上海:复旦大学出版社,2003.225~256.
[8] 李光飞.单片机设计实例指导[M].北京:北京航空航天大学出版社,2004.5,96~100.
[9] 胡汉才 单片机原理及其接口技术[M]. 北京: 清华大学出版社 , 1996.89~110.
[10] 杨立民.单片机技术及应用[M].西安:西安电子科技大学出版社.1997.90~120.
[11] 李军.51系列单片机高级实例开发指南 北京航空航天大学出版社
致 谢
首先衷心地感谢我的指导老师。本文从选题到完成,从理论上的探讨到实际问题的解决,无处不饱含着老师的心血。陈老师的悉心指导和建议给了我极大的帮助和支持,使我受益匪浅,在此论文完成之际,谨向老师致以深深的谢意和崇高的敬意。
24
展开阅读全文