《基于单片机的电子时钟电路设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子时钟电路设计.docx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 单片机技术课程设计说明书 基于单片机的电子时钟电路设计专业建筑电气与智能化学生姓名王文蔚班级电建131学号1310602112指导教师吴冬春完成日期2016年6月16日目录1、课题要求与内容11.1设计目的11.2设计要求12、系统方案设计12.1系统的设计方案框图12.2系统组成13、系统硬件设计13.1供电电源的设计13.1.1供电电源的设计原理13.1.2总电路33.2最小系统的设计43.2.1晶振电路53.2.2复位电路53.2.3 AT89C51单片机63.3开关电路的设计63.4拓展电路的设计73.4.1型号选择73.4.2功能作用83.5显示电路的设计83.5.1数码显示83.
2、5.2多位数码管的显示83.5.3显示模块84、系统软件的设计94.1系统总程序设计94.2模块子程序设计94.2.1中断服务子程序94.2.1开关子程序105、 仿真115.1仿真的介绍115.2仿真的过程116、结束语127、参考文献12附件1:电子时钟设计整图附件2:电子时钟设计仿真图附件3:电子时钟设计程序1、课题要求与内容1.1设计目的(1)学习输出口的使用方法;(2)学习定时/计数器的使用;(3)学习中断的使用1.2设计要求 电路的基本功能应包括数码显示时间、可以手动调节时间的功能。2、系统方案设计2.1系统的设计方案框图图2.1 总体设计方框图2.2系统组成本设计电路共由四部分组
3、成,分别为按键模块、复位电路模块、振荡电路模块、时间显示模块。振荡电路模块负责给单片机提供时钟周期。复位电路模块负责上电后自动复位。上电后,由单片机内部定时器计时,同时通过动态显示函数自动将时分秒显示到数码管上。与此同时,按键扫描函数一直扫描按键引脚状态,一旦扫描按键被按下,即进入相应的功能函数。如果检测到定时时间到,则驱动蜂鸣器发生提示。3、 系统硬件设计3.1供电电源的设计 3.1.1供电电源的设计原理图3.1.1 直流稳压电源的原理框图和波形变换图 整个系统采用的电源电压只需+5V电压,将交流电压源提供的220V电压经变压器变换为15V交流电,再用整流桥得到直流电,采用不可调的3端稳压器
4、件78L05将电源稳定在5V直流输出,输入供给上电复位电路、上拉电阻等。(1)电源变压器电源变压器的作用是将电网220V的交流电压变换成整流滤波电路所需的低电压。根据设计要求,输出最大电源为+10V/1A,因此,输出的最大功率为10W。另外,为了输出正、负电压,考虑到每个稳压集成块的压降为3V左右,所以可以选择220V/16V / 10W的变压器。为了使电路正常工作,要求输入电压应比输出电压自少高出2.5V3V,且。所以变压器的输出电压的平均值至少应为8V,因此选择双8V/8W的变压器。变比K为=27.5,则变比大约取25。(2)整流电路整流电路一般由单项导电性的二极管构成,经常采用单项半波、
5、单项全波和单向桥式整流电路。如图3.1.1.2所示的整流电路为应用广泛的桥式整流电路。电路中采用了4个二极管,组成三项桥式整流电路。整流过程中,4个整流管轮流导通,无论正半周还是负半周,流过负载的电流方向一致,形成全波整流,将变压器处的交流电压变成了脉动直流电压。整流电路的参数如下:输出电压平均值:输出电流平均值:平均整流电流:最大反向电压: 整流二极管的选择:, 图3.1.2整流电路图(3)滤波电路交流电经整流电路后可变为脉动直流电,但其中含有较大的交流分量,为使设备上用纯净的交流电,还必须用滤波电路滤除脉动电压中的交流成分。常见的滤波电路有:电容滤波电路、电感滤波电路、电感电容滤波电路以及
6、P型滤波电路。在此电路中,由于电容滤波电路电路较为简单、且能得到较好的效果,故选用此电路。在加入电容滤波电路后,由于电容是储能元件,利用其充放电特性,使输出波形平滑,减少脉动成分,以达到滤波的目的。为了使滤波效果更好,可选用大容量的电容为滤波电容。因为电容放电的时间常数越大,放电过程越慢,脉动成分越少,同时使得电压更高。滤波电容一般选几十至几千微法的电解电容, 一般选取。即,滤波电容一般选几十至几千微法电解电容。又因为输出最大电流为1A,故可估算出RL范围,取RL为18,求得C约为2200uF。故电容C选择2200u/25V的电解电容。电容C1一般取0.11uF,在此取C1=0.33uF。电容
7、C2一般取0.1uF,C0应取0.22nF。图3.1.3滤波电路图(4)稳压电路经过整流和滤波后得直流电压,会由于电网电压的波动以及负载电阻的变动而发生变化。在绝大多数情况下,这种输出电压的变化波动显得太大,仍需进一步对其稳定,这就需要采用稳压电路。目前常用的稳压电路有并联式稳压电路、串联稳压电路以及集成式稳压电路。由于集成式稳压芯片具有较完善的短路和限流保护、过热保护和调整管安全工作区保护电路,因而工作是比较稳定的,电路也相对比较简单。为了使电路正常工作,要求输入电压应比输出电压至少高出2.5V3V。电路如图3.1.1.4。电容C1可防止自击振荡,还可抑制电源的高频脉冲干扰,一般取0.11u
8、F。输出端电容C2可以改善负载的瞬态响应,消除电路的高频噪声,同时也具有消除自击振荡的作用。要求输出+5V、-5V的直流电,选择选择L7805、L7905。图3.1.4 输出正电压电路图 3.1.2总电路图3.1.2 实验电路图3.2最小系统的设计单片机最小系统或者称为最小应用系统,即用最少的元件组成的单片机可以工作的系统,对单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。图3.2最小系统电路图3.2.1晶振电路每个单片机系统里都有晶振,全称是叫晶体振荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础
9、上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。晶振其输入端为芯片引脚XTAL1,其输出端为芯片引脚XTAL2。通过这两个引脚在芯片外并接X1=12MHz晶振和两只C1=C2=30nF的电容,这样就构成一个稳定的自激振荡器。如图3.2.1所示。图3.2.1晶振电路图3.2.2复位电路为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。AT89C51的复位端是一个施密特触发输入,高电平有效
10、。RST端如果由低电平上升到高电平并持续2个机器周期,系统将实现一次复位操作。此复位电路中,上电或按一下复位开关都能在RST端出现一段时间的高电平,使系统复位。在晶振频率为11.0592MHz时,通常取R1=1K,电解电容C3=10uF。如图3.2.2所示。3.2.3 AT89C51单片机AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.255.50V的电压工作范围和024MHz工作频率,使用AT89C51单片机时无须外扩存储
11、器。本次设计中晶振电路使用了XTAL1和XTAL2。复位电路使用了RST。是片内片外程序选择控制端,接高电平,表示访问片内程序存储器。单片机的P1.0P1.3P0.0P0.7接74HC573锁存器U2,U3输入端口P2.2P2.3为接锁存使能端口P3.2P3.7接6个按键开关。总共使用了20个端口。3.3开关控制电路的设计根据系统的控制要求,控制输入部分设置了6个开关。分别为小时上调开关,小时下调开关,分钟上调开关,分钟下调开关,秒钟上调开关,秒钟下调开关。分别有E1,E2,E3,E4,E5,E6控制。图3.3开关控制电路图3.4扩展电路的设计3.4.1型号选择 74HC573锁存器。3.4.
12、2功能作用当三态允许控制端 OE 为低电平时,D0D7 为正常逻辑状态,可用74HC5573来驱动负载或总线。当 OE 为高电平时,D0D7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。D0D7为输入端 Q0Q7为输出端。本电路有两个锁存器U2和U3 作用用作拓展口 OE接地 .LE分别接51单片机的P2.2 和P2.3,D0D7连总线受51单片机P0口控制,Q0Q7分别控制数码管的段锁存和位锁存。图3.3缓冲电路图3.5显示电路的设计3.5.1数码显示数码管
13、中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。对于“共阴极”数码管,内部发光二极管的阴极接在一起,阳极成为段选线。点亮“共阴极”数码管的一段时,公共段需接低电平(即写逻辑0)、该段的段选线接高电平(即写逻辑1),该段被点亮。一般来说在一个字节中按照abcdefgdp的顺序放置字型码,一个“共阴极”数码管上要显示“1”,则b、c段需被点亮,因此在段选线中写入60H。对应规则:a-D7b-D6c-D5d-D4e-D3f-D2g-D1dp-D03.5.2多位数码管的显示在多位8段数码管显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个单片机的8位I/O口控制,形
14、成段选线的多路复用。而各位数码管的共阳极或共阴极分别由单片机独立的I/O口线控制,顺序循环地点亮每位数码管,这样的数码管驱动方式就称为“动态扫描”。在这种方式中,虽然每一时刻只选通一位数码管,但由于人眼具有一定的“视觉残留”,只要延时时间设置恰当,便会感觉到多位数码管同时被点亮了。3.5.3显示模块显示模块采用六位LED八段共阴数码管进行动态显示,由AT89C51单片机产生的段选信号从P0输出,经过1K左右的上拉排阻驱动数码管显示,位选信号从P2口输出直接送数码管显示。采用数码管动态显示方式,硬件电路简单、编程简便、显示信息清晰。显示器上显示,第一位为时钟小时的十位数字,第二位为时钟小时的个位
15、数字,第三位为固定划分符号 一条横线,第四位为时钟分钟的十位数字,第五位为时钟分钟的个位数字,第六位为固定划分符号 一条横线,第七位为时钟秒钟的十位数字,第八位为时钟秒钟的个位数字。图3.5.3显示电路图4、 系统软件的设计4.1 系统主程序设计 该系统的核心是AT89C51。他的工作过程是:当系统上电后,进入监控状态的AT89C51单片机,同时完成为每个端口的初始化。首先初始化,选择T0定时计数器,选用方式1,即(TOMD)=02H。中断模块 计时计数器T0的溢出中断位选择高电平,中断允许总控制位高电平,即IE=0x82H。开关按键控制定时功能。主程序流程图如图4-1所示:开始 初始化各端口
16、T0设为16位计数模式 N 允许T0中断 调用显示程序 按下键否功能程序 Y 图4-1 系统主程序流程图4.2 模块子程序设计4.2.1中断服务程序定时器/计数器T0用于时间计时。选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒加1,秒单元加到60则对分单元加1,同时秒单元清0;分单元加到60则对时单元加1,同时分单元清0;时单元加到24则对时单元清0,标志一天时间 计满。在对各单元计数的同时,把它们的值放到存储单元的指定位置。定时器/计数器T0中断服务程序流程图4-2-1如图所示。 图4-2-1中断服务程序流程4.2.1
17、开关子程序调试功能程序NK1用于判断按键E1,E2,E3,E4,E5,E6是否按下,来判断秒加,秒减,分加,分减,时加,时减。如下4-2-2图为E1,E2的流程图。E3,E4,E5,E6与之相同。 图4-2-2中断服务程序流程5、 仿真5.1.仿真的介绍在设计过程中,由于一些硬件电路的局限性,或为了教学的方便,可通过用软件的方式模拟硬件电路的运行,这就是电路的仿真。通过仿真,模拟硬件电路,从而更好的应用于硬件电路。此次设计通过Keil11与Proteus联机进行仿真。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路
18、的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。利用Proteus和Keil的联机,实现硬件软件的结合,形成一个单片机的应用系统。它的资源充足,而且提供一定的实例进行参考,为设计提供方便。5.2仿真的过程(1)打开Keil,新建Keil项目,选择AT89C51单片机作为CPU,新建汇编源文件,编写程序,将其导入到“SourceGroup1”中。在“OptionforTarget”对话窗口中,选中“Output”选项卡中
19、的“CreateHEXFile”选项和“Debug”选项卡中的“Use:ProteusVSMSimular”选项。编译汇编源程序,改正程序中的错误(2)在ProteusISIS中,选中AT89C51并单击鼠标左键,打开“EditComponent”对话窗口,设置单片机晶振频率为12MHZ,在此窗口中的“ProgramFile”栏中,选择先前用Keil生成的HEX文件。在ProteusISIS的菜单栏中选择“File”-“SaveDesign”选项,保存设计。在ProtreusISIS的菜单栏中,打开“Debug”下拉菜单,在菜单中选中“UseRemoteDebugMonitor”选项,以支持与
20、Keil的联合调试。(3)在Keil的菜单栏中选择“Debug”-“Start/StopDebugSession”选项,进入程序调试环境。按“F5”键,顺序运行程序。调出“ProteusISIS”界面,按“正转”和“反转”按键,观察步进电机的状态。6、结束语本设计实现了时分秒的显示,设计简单。在测试过程中,有很多小问题,通过多次的修改程序并在Proteus软件中进行仿真,最终解决可了这些问题,同时也反映出我在单片机设计和程序设计方面的不足。仿真效果达到了预期的效果。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。其次,在这次课程设计中,我们运用到了以前所学的专业
21、课知识,如:C语言,电力电子知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚。感谢这次课程设计。7、参考文献1.林
22、志琦,郎建军,李会杰,佟大鹏.基于Proteus的单片机可视化软硬件仿真M.北京:北京航空航天大学出版社 20062.李海滨,片春媛,许瑞雪.单片机技术课程设计与项目实例M.北京:中国电力出版社 20093.张鹏,王雪瑞.单片机原理与应用实例教程M.北京:海洋出版社 20084.戴佳,戴卫恒.51单片机C语言应用程序设计实例精讲M.北京:电子工业出版社 20065.兰吉昌.51单片机应用设计实例M.北京:化学工业出版社 20086.杜立,张俊亮.单片机原理及应用-基于Proteus和KeilC(第二版)M.北京:电子工业出版社 20137.周润景,张丽娜,刘映群.Proteus入门实用教程M.
23、北京:机械工业出版社 2007附件1:电子时钟设计整图附件2:电子时钟设计仿真图附件3:电子时钟设计程序#include #define uchar unsigned char#define uint unsigned intuchar frq;sbit Hjia=P32; /定义按键输入端口sbit Hjian=P33;sbit Mjia=P34;sbit Mjian=P35;sbit Sjia=P36;sbit SjiaN=P37;sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存uchar code dofly_DuanMa10=0x3f
24、,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09uchar code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码uchar TempData8; /存储显示值的全局变量uchar h,m,s;bit UpdateTimeFlag; void Delay(uchar t);/延时函数声明 void Display(uchar FirstBit,uchar Num);/数码管显示函数void Init_Timer0(void); /定时器初始
25、化void Beep_OFF(void);void Beep_ON(void);void Display_Data_Operation(void); void main (void) unsigned char num=0; Hjia=1; /按键输入端口电平置高 Hjian=1; Mjia=1; / Mjian=1; Sjia=1; / SjiaN=1; while (1) /主循环 if(!Hjia) /如果检测到低电平,说明按键按下 Delay(10); /延时去抖 if(!Hjia) /再次确认按键是否按下,没有按下则退出 while(!Hjia); if(h0) h-; if(!Mj
26、ia) Delay(10); if(!Mjia) while(!Mjia); if(m0) m-; if(!Sjia) Delay(10); if(!Sjia) while(!Sjia);/ if(s0) s-; TempData0=dofly_DuanMah/10;/分解显示信息 TempData1=dofly_DuanMah%10; TempData2=0x40; /显示一横 TempData3=dofly_DuanMam/10; TempData4=dofly_DuanMam%10; TempData5=0x40; TempData6=dofly_DuanMas/10; TempData
27、7=dofly_DuanMas%10; Display(0,8); /显示全部8位 /主循环中添加其他需要一直工作的程序 if(BeepFlag=1) BeepFlag=0; Delay(500); /延时1ms,累加频率值 frq+; /*- 延时函数-*/ void delay(uchar k) uchar j;while(k-)!=0)for(j=0;j11;j+);/*- 显示函数-*/void Display(unsigned char FirstBit,unsigned char Num) unsigned char i=0; P0=0; /清空数据,防止有交替重影 LATCH1=
28、1; /段锁存 LATCH1=0; P0=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; P0=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; i+; if(i=Num) i=0;/*- 定时器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器 EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开/*- 定时器中断子程序-*/void Timer0_isr(void) interrupt 1 uint t; TH0=(65536-50000)/256; /重新赋值 2ms TL0=(65536-50000)%256; Display(0,8); t+; if(20=t) t=0; s+; if(60=s) s=0; m+; if(60=m) m=0; h+; if(24=h) h=0; 24