编号单片机课程设计(2013级)题目:基于52单片机电子时钟的设计学院:物理与机电工程学院专业:电子信息科学与技术作者姓名:陈✘✘党✘✘杜✘✘指导教师:张✘✘职称:教授完成日期:2016年7月2日二〇一六年七月1基于52单片机电子时钟的设计摘要本次设计的多功能时钟系统采用STC89C52单片机为核心器件,利用其定时器/计数器定时和记数的原理,结合液晶显示电路、时钟芯片DS1302电路、电源电路以及按键电路来设计计时器。将软硬件有机地结合起来,使得系统能够实现液晶显示,显示有年、月、日、时、分、秒以及星期,还可以设置闹钟和整点报时。其中软件系统采用单片机汇编语言编写程序,包括显示程序、闹钟程序、中断、延时程序,按键消抖程序等,并在keil中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。关键词:STC89C52芯片;时钟芯片DS1302;单片机汇编语言;液晶显示电路21设计任务及要求分析1.1设计任务:基于单片机的电子时钟设计1.2要求:1.2.1用LCD液晶作为显示设备1.2.2可以分别设定小时、分钟和秒,复位后时间为0000001.2.3能实现日期的设置年、月、日1.3扩展要求:如闹钟功能、显示星期、整点音乐报时等2系统方案2.1系统整体方案的论证电路原理设计是基于小系统板包括电源电路、复位电路、按键电路、DS1302时钟电路、液晶显示驱动电路、输出控制电路。电源部分是用电池来提供的3v-5v,晶体振荡器采用的是12MHz的石英晶体振荡器。整个系统用单片机为中央控制器,由单片机执行采集时钟芯片的时间信号并通过显示模块来输出信号及相关的控制功能。时钟芯片产生时钟信号,利用单片机的I/O口传给单片机;并通过I/O口实现LCD的显示。系统设有4个独立式按键可以对时间年、月、日和星期进行调整,还可以设置闹钟。具体如图2.1所示:图2.1系统整体框图STC89C52单片机芯片电源复位电路按键电路时钟振荡电路液晶显示DS1302时钟芯片电路输出控制电路33硬件设计与实现3.1单片机最小系统STC89C52是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器。一个6向量2级中断结构,全双工串行口及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。3.2振荡电路的工作原理STC89C52单片机内部有一个高增益反相放大器,用于构成振荡器,但要形成时钟,外部还需附加电路。XTAL1引脚为反相放大器和时钟发生电路的输入端,XTAL2引脚为反相放大器的输出端。振荡电路如图3.1所示:图3.1振荡电路图43.2时钟电路的工作原理片内时钟发生器实质是个2分频的触发其输入来自振荡器的fosc,输出为2相时钟信号,即节拍信号P1、P2,器频率为fosc\2。2个节拍为1个状态时钟S。状态时钟再3分频后为ALE信号,其频率为fosc\6,状态时钟6分频后为机器周期信号,器频率为fosc\12。特殊功能寄存器PCON的PD位可以控制振荡器的工作,当PD=0时,振荡器停止工作,单片机进入低功耗工作状态,复位后,PD=0,振荡器正常工作。时钟电路如图3.2所示:图3.2时钟电路图3.3单片机最小系统电路图图3.3单片机最小系统电路图53.4时钟芯片(1)DS1302是一种可编程的实时时钟芯片,具有计算2100年前的时间的能力,包括时钟/日历寄存器和31字节(8位)的数据暂存寄存器,数据通信权通过一条串行输出口。时钟/日历提供包括秒、分、时、日期、月份和年份信息。闰年可自行调整,以串行方式向单片机传送单字节或多字节的秒、分、时、日、月、年等实时时间数据;只通过三根线进行数据的控制和传递:RST、I/O、SCLK;其在电路的功能是还具有在出现主电源断电时备用电源可继续保持时钟的连续运行。时钟引脚图如图3.4所示:图3.4时钟引脚图(2)DS1302芯片内部寄存器读写地址及位定义格式如表3-1:寄存器名读写地址取值范围位定义写操作读操作D7D6D5D4D3D2D1D0秒寄存器80H81H00-59CH秒十位秒个位分寄存器82H83H00-590分时位分个位时寄存器84H85H01-12或00-2312/240AM/PM十位小时个位日期寄存器86H87H01-28-3100十位日个位星期寄存器8AH8BH01-070000星期位月寄存器88H89H01-12000十位月个位年寄存器8CH8DH00-99年十位年个位控制寄存器控制寄存器8EH8EH8FH8FHWPWP00000000表3-1DS1302芯片内部寄存器读写地址及位定义如果单片机要对DS1302内部寄存器进行读写操作,必须先将与寄存器对应6的位操作地址传送给DS1302,然后再进行读写数据的操作。控制寄存器是用来决定能否对DS1302进行读写操作,当控制字的最高位WP=0时,允许进行读写操作;当WP=1时,禁止读写操作。所以单片机对DS1302进行读写操作时,必须先将控制字00H写入到DS1302的控制寄存器中。3.5液晶显示电路LCD显示器能显示数码管不能显示的其他字符、文字和图形,是十分重要的显示终端,LCD1602是字符点阵液晶显示模块。利用LCD1602,所用的时间年、月、日、星期可同时可见,一目了然,采用双行显示,让电子钟能够更直观的显示。其实图如图3.5、显示电路图如图3.6、引脚功能如表3-2所示:图3.5液晶显示器实图图3.6液晶显示电路图引脚号引脚名称引脚功能含义1Vss地管脚(GND)2Vdd+5V电源引脚(Vcc)3Vo液晶显示驱动电源(0~5V),可接电位器4RS数据和指令选择控制端,RS=0:命令/状态RS=1:数据75R/W读写控制线,R/W=0:写操作,R/W=1:读操作6E数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据转换7~14DB0~DB7数据线,可以用8位连接,也可以用高四位连接,节约资源15A背光控制正电源16K背光控制地表3-2LCD液晶显示器引脚功能3.6输出控制电路在P2.0端口接一个蜂鸣器,用于整点报时和响闹铃。具体如图3.7所示:图3.7输出控制电路图3.7按键电路本次设计采用按键电平复位,按键电平复位相当于按复位键后,复位端通过电阻与Vcc电源接通,按键电路图如图3.8所示:图3.8按键电路图84软件设计与实现4.1软件总体设计方案4.1.1软件设计目标软件部分总体上是模块化的设计思想,通过子程序调用设计方式,将所有的模块综合到一起,使程序可读性较高。4.1.2总体架构说明该时钟程序设计思路如下:(1)在程序头将设计中的一些固定空间进行分配并注释。(2)初始化程序,如设定时钟初始显示“2016年6月30日,星期四,00:00”以便一开始就能进入整点报时状态,显示该功能;设定使用定时器1;将一些未到时钟设计功能的功能端口关闭等。(3)开始主程序进行程序扫描,先扫描拆字子程序,将分配好的时分秒等高地位的数字调入到显示子程序中。→显示子程序通过分配的空间对应口将拆字子程序的内容在液晶显示器上显示相应的时分秒,再调用走时程序使时钟进行读秒等工作。→进入按键扫描,判断按键是否有变动,若有就根据设计程序对相应的按键按入次数而进行实现相应的功能。如进入时间调整、闹钟设置、闹钟开启与否等。→进入闹钟的判断,在时分上与设置的闹铃时间吻合的话就做相对应的判断,再依据是否有开启闹钟而进行响铃与否,如果有响铃则设置其一直响铃知道有人为按取消按键取消闹铃。→进入整点报时扫描,判断是否在时分上都进入了整点,如果是就报时,然后就退出整点报时,等到下一个整点的到来。→最后返回主程序头重新依次扫描。显示过程设有消隐,按键设有去抖。(4)子程序部分。在主程序的调用下依据不同的子程序工能而编写子程序,有多级嵌套。这些子程序包括拆字子程序、延时子程序、走时间子程序、整点报时子程序、按键处理子程序、调时间子程序、闹钟设置子程序、闹钟子程序、闹钟开启子程序。主流程图如图4.1所示:9YNNYNYNY图4.1主程序流程图子程序详解表如表4-1所示:开始读时间各模块初始化是否处于设置拆字闹钟是否开启比较时钟时间与当前时间按键模块按键功能是否开启判断整时是否执行报时执行报时结束10子程序名称功能改变Sub1闹钟PfSub2报时一声Pf、th1、jiepaizhengshi判断当前时间是否是整时shengshu、cxbsbaoshi执行报时功能Shengshu、cxbsbijiao判断是否到闹钟时间TR0opr00设置当前时间状态IsSheZhi、r1、KeyCodeopr01进入设置闹钟时间状态IsSheZhi、r1、KeyCodeopr02把所设置的时间作为当前时间KeyCode、sec、min、hour、day、month、IsSheZhiopr03把所设置的时间作为闹钟时间KeyCode、IsSheZhiwriteDS18b20写DQ、r4、r7readDS18b20读DQ、r0、r4、r5、r7set1302ds1302初始化Rst、Sclk、r0、r1、r6get1302读出秒,分,时,日,月,星期,年读出秒,分,时,日,月,星期,年Rst、Sclk、r0、r1、r6clockrdds1302读子程序Sclk、r7Ds1302Rds1302写数据子程序Sclk、r7chaizi时钟拆字DspBuf、b、r0Initdisplay初始状态显示DptrdispGD固定字符显示word字‘年’,‘月’,‘日’‘°c’LcdDspBuf写入显示数字R0、R2LcdWrDat写入数据LCDRS、LCDRW、LcdELcdWrCmd写入命令LCDRS、LCDRW、LcdElcd_initLCD初始化delay延时r6、r7anjian1执行按键1的功能KeyCode、IsSheZhianjian2执行按键2的功能KeyCode、IsSheZhianjian3执行按键3的功能KeyCode、QHanjian4执行按键4的功能KeyCode、bs口,从89s52芯片p1.0、p1.1、p1.2、p1.3四个引脚接入进行控制。当没有按键按下时,均为高电平,有按键按下时相应I/O口为低电平,但并没有立即执行相应的程序,延时5ms后若再为低电平,等I/O口恢复高电平,即按键松开时,才执行相应的程序,此时按键才起作用。这样该按键模块具有去抖动,且按键按下一次仅作用一次,起到精确判断的作用。4.2.1按键1的说明按键1有四种功能,分别为下面4个子程序:(1)子程序0的功能为:进入设置当前时间状态,且令keycode=2;(2)子程序1的功能为:进入设置闹钟时间状态,且令keycode=3;(3)子程序2的功能为:把所设置的时间作为当前时间,且令keyco