1、单片机数字时钟设计 摘要单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。 基于单片机设计的数字钟精确度较高, 因为在程序的执行过程中, 任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。本设计使用12MHZ晶振与单片机AT89C52相连接,以AT89C52芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用74HC244驱动电路,实现在6个LED数码管上显示日期、时间、定时、闹铃,通过6个按键实现设置日期、进行调时、设定闹铃、倒计时等功能,在实现各
2、功能时数码管进行相应显示,闹铃或定时时间到时蜂鸣器响,按下闹铃键或定时键时,声音停止。软件部分用C语言实现,分为显示、延迟、调时、闹铃、定时、调整日期等部分。通过软硬件结合达到最终目的。关键词: 电子钟; 单片机; 动态扫描; C语言目录1 引言32 整体设计思路及其方案的选择43 主要元件的使用方法4 3.1 AT89C52单片机5 3.2 74HC244驱动器5 3.3 DS18B02液晶显示64 电路设计7 4.1整体设计7 4.2 分块设计7 42.1 输入部分7 42.2 输出部分(显示电路)8 42.3 晶振与复位电路:95 程序设计9 5.1程序思路9 5.2程序设计步骤10 5
3、.3程序的主要模块10 5.3.1延迟程序10 5.3.2 中断服务子程序11 5.3.3 主程序11 5.3.4显示程序11 5.3.5 闹铃程序126 功能仿真12 6.1 软件介绍12 6.2 仿真过程12参考文献14单片机数字时钟设计1 引言单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机具有体积小、功能多、价格低廉、使用方便、系统设计灵活等优点。因此,它应用广泛前景美好,它
4、的实用性大大地提高了我对毕业设计的兴趣。数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自
5、动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟, 也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟还可以利用单片机来实现电子钟等等。这些方法都各有特点, 其中,利用单片机实现的电子钟具有编程灵活, 便于功能扩充, 精确度高等特点。2 整体设计思路及其方案的选择整体设计思路首先由单片机的定时器P3口在一定的时间里产生一个中断,这时单片机由这个中断信号进行判断处理,然后由液晶显示进行时间的显示。按键输入部分的输入信号也通过单片机处理,然后由液晶
6、显示其需要显示的结果。及其方案的选择方案一:利用时钟芯片给单片机输入时钟信号芯片信号:PCF8583。此芯片可以对时钟、闹钟、日历进行调整,且精准度比较高,可以精准到1/100秒。方案优点:走时精度高,编程时无需考虑各部分运行时的时间干扰,方案缺点:硬件电路要稍微复杂点,软件编程时要加部分芯片的程序。方案二:直接利用单片机本身的定时器中断进行时间的走时方式0:不推荐方式1:16位计数器,常用方式2:自动重装初值的8位定时/计数器方式3:T0相当于两个独立的8位定时/计数器方案优点:不需要其它芯片就可以进行时钟的走时,并且精准度可以到1/100秒。方案缺点:精准度越高误差越大方案三:利用程序的延
7、时进行时钟的走时用for循环for(j=148;j0;j-);延时一毫秒来确定时间方案优点:简单、经济,软件稍微简单方案缺点:走时不精准,且在时间的走时过程中不确定因素太多综上信息,我选择方案二,因为方案无需在硬件上添加一块时钟芯片,软件上也无需添加一段时钟芯片的启动程序,软件、硬件的调试都要稍微简单点,虽然精准度要比方案一的差,但是我不需要那么高的精准度,所以我觉得方案二比较适合。3 主要元件的使用方法下面就本次设计中用到的主要元件的所有功能进行简单的介绍,包括AT89C52单片机、74HC244芯片、DS18B20液晶显示特性和用法3.1 AT89C52单片机单片机的结构如下:图3.1.1
8、 单片机引脚图在使用时VCC接电源电压,GND接地。P0,P1,P2,P3可作为输入或输出端口,RST是复位输入,接复位电路。XTAL1和XTAL2接复位电路。这些可以在硬件设计部分体现出来。3.2 74HC244驱动器74HC244芯片的功能 如果输入的数据可以保持比较长的时间(比如键盘),简单输入接口扩展通常使用的典型芯片为74HC244,由该芯片可构成三态数据缓冲器。74HC244芯片的引脚排列如图1所示。74HC244芯片的引脚74HC244芯片内部共有两个四位三态缓冲器,使用时可分别以1C和2G作为它们的选通工作信号。当1/OE和2/OE都为低电平时,输出端Y和输入端A状态相同;当1
9、/OE和2/OE都为高电平时,输出呈高阻态。 图13.3 DS18B02液晶显示4 电路设计4.1整体设计此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:显示电路用六个数码管分别显示小时、分钟和秒,通过动态扫描进行显示,从而避免了译码器的使用,使电路更加简单。单片机采用AT89C52系列,这种单片机应用简单,适合电子钟设计。电路的总体设计框架如下:单片机输入部分晶振和复位输出部分图4.1.1 电路模块图4.2 分块设计这部分介绍各模块电路的设计方法和成果,主要分为:输入部分、输出部分、复位和晶振电路。42.1 输入部分在电子钟的输入部分,设置相应的置数功能,通过外部设备的输
10、入,如按键,实现时间的修改。除此之外,调整闹铃、定时、日期时也需要按键进行输入。在选用输入端口时,将P3引脚与按键相连进行输入。设计的输入部分如下:图4.2.1 输入部分各按键功能在后面的部分将会介绍到。42.2 输出部分(显示电路)该部分电路图如下所示:图4.2.2 显示部分42.3 晶振与复位电路:图4.2.3 晶振与复位电路5 程序设计5.1程序思路初始化按key1显示按key3键按key4键按key6键若无按键调时调闹钟调格式显示所调时间显示闹铃时间显示时间格式调整时限到 或有其他输入图5.1.1 程序设计思路结合电路,程序的总体思路是:1、点复位键后,进行时间显示,从8时30分30秒
11、开始。2、按下按键key4时,进行调时,此时按2次key4键调整时,按1次key4键调整分。3、按key6键时进行闹铃调整,用key3键分别调时和分,时间到达闹铃所定时间时P1.1输出高电平,蜂鸣器响,按下按key5蜂鸣器停止。4、按key3键时进行格式的设定,可设定为12H或24H.5.2程序设计步骤在程序设计过程中,我遇到了很多困难,这部分也是让我学到很多东西的地方。首先,我学习了定时器的相关知识,计数器的使用是很重要的组成部分15,在这个设计中选择计数器T0。T0的工作方式有:方式0:不推荐方式1:16位计数器,常用方式2:自动重装初值的8位定时/计数器方式3:T0相当于两个独立的8位定
12、时/计数器此程序采用方式1,方式1的定时时间t为t=(216-M)*12/fosc。其中M为定时器初值,fosc为12MHz,若M为0则t=65536*12/2*106=65.536ms。因此可取50ms为计时单位,初值M应为50*10-3*106=216-M。M=15536=11110010110000=3CB0。即定时器初值为TH0=03CH,TL0=0B0H。定时器中断20次为一秒,这部分在中断程序中用到。5.3程序的主要模块5.3.1延迟程序在动态扫描时,必然用到延迟程序,这里使用延迟1ms的程序,此程序需要反复调用。void Delay1ms(unsigned int x) ucha
13、r i,j; for(i=x;i0;i-) for(j=148;j0;j-);5.3.2 中断服务子程序中断服务程序中,总体思路是:由于初值是3CB0H,所以装满定时器需要50ms的时间,从而20次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。5.3.3 主程序主程序主要对按键进行扫描,以及判断闹铃时间是否已到,若到则调用声音程序,该段程序如下:void main() unint(); LCDINIT();while(1)shezhijian();tuichujian();if(flag=1)switch(m)case 0:shijia
14、n();tek1();break;case 1:sheding();xianshi2();break;case 2:laozhong();tek(); break; elsefengmingqi();xianshi1();5.3.4显示程序液晶进行显示,分别显示1ms,这依赖的是人们视觉的惰性,该段程序如下:void display(uchar address,uchar *str) uchar i;for(i=0;i14;i+)/写显示第一行 wcomd(address+i); Delay1ms(1);wdata(stri);Delay1ms(1);void data_cl1() temp=
15、data_s*10000+data_f*100+data_m;buffer0=temp/100000+0; buffer1=temp/10000%10+0; buffer2=:;buffer3=temp/1000%10+0; buffer4=temp/100%10+0; buffer5=:;buffer6=temp/10%10+0; buffer7=temp%10+0; /显示高位buffer8= ; buffer9= ;另外,调闹铃和定时时间、进行12/24选择显示时,有各自的显示程序。5.3.5 闹铃程序这段程序分别包含了各自的显示、调整程序。程序思路是对照,走时部分的程序,进行编写,包括
16、显示程序,与显示时间的程序是相似的,闹铃的调整程序与走时调整程序相似6 功能仿真这部分工作可能遇到的困难是很多的,程序庞大很可能出现各种问题。在仿真工作中,首先要对仿真软件有足够的了解并能够正确熟练地运用6.1 软件介绍在这部分工作中用到了keilc51和Proteus两个软件,其中keilc51用来编译程序并生成hex文件,装入Proteus仿真图的芯片中,通过仿真结果一步步进行调整最后达到预期的功能。6.2 仿真过程(1)仿真图图6.2.1 仿真图(2)走时仿真:图6.2.2 走时状态下的仿真结果(3)闹钟设定的仿真:图6.2.3 闹铃仿真结果结论通过对数字时钟的设计,更加深了对单片机功能的了解以及各个模块程序的调用,编程。在实物设计时候遇到了更多的问题,比如芯片的质量问题不能得到保证。由于用万能电路板搭建,飞线数量特别多,整个实物给人的印象十分复杂,在焊接的过程中难免出现各种错误,经过等的帮助,最终实现了部分功能,在此对他们真挚的感谢参考文献1 张宏伟 李新德 单片机应用技术 北京 北京理工大学出版社2 李淑华 C语言程序设计教程 中国水利水电出版社3 浣喜明 姚为正 电力电子技术 高等教育出版社4 周华 数字电子技术 西南交通大学出版社