目录1概述 (1)1.1课题研究的目的和意义 (1)2 课题方案论证 (1)2.1系统总体设计要求 (1)2.2系统模块结构论证 (2)3 系统硬件设计 (2)3.1总体设计 (2)3.2最小单片机系统如图3-2所示 (3)3.3按键电路如图3-3所示 (3)4软件设计 (3)4.1 主程序 (3)图4-1主程序流程图 (4)4.2 显示子程序 (4)4.3定时器/计数器T0中断服务程序 (4)5软硬件联调及调试结果 (5)5.1调试步骤 (5)5.2实际出现的问题及解决方法 (6)5.3仿真图如图5-2所示 (6)5.4实物图正面如图5-3-1所示,实物图背面如图5-3-2所示 (6)5.5板子运行情况如图5-5所示 (7)结束语 (7)参考文献 (8)附录 (8)附录1 原理图如图附录-1所示 (8)附录2 PCB图如图附录-2所示 (8)附录-2PCB图 (9)附录3 proteus仿真图如图附录-3所示 (9)附录-3 proteus仿真图 (9)附录4 C语言程序清单 (10)附录5 元器件清单 (10)1概述1.1课题研究的目的和意义此次设计是单片机内部的定时/计数器来实现电子时钟的方法以及借助键盘直接控制整时的调整,本设计根据STC89C52单片机系统扩展的基本原理和方法,由单片机STC89S52芯片,LED数码管和键盘为核心,辅以必要的电路,构成了一个单片机电子时钟。
一块单片机芯片就是一台计算机,由于单片机以其集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点使它应用于智能仪器仪表、机电一体化、实时程控、人类生活中。
除此之外还广泛应用办公自动化领域、商业营销领域、汽车及通信系统、计算机外部设备等各领域中,并且单片机已成为计算机发展和应用的一个重要方面。
由此可见掌握单片机的使用方法和利用单片机解决实际问题具有重要的意义。
而此次的设计刚好用到单片机相关的知识可以说这是这次设计的重要意义和目的所在。
再者,此设计的LED电子时钟主要是显时间的,是时钟用途。
在此设计的基础上人们还可根据不同的需求和不同的设计水平做出不同的设计项目。
也可以加上日期,温度的显示和闹钟的功能。
如果设计水平还更高的话还可以设计LED电子显示屏。
因此说,LED电子时钟设计是最简单和基础的。
而且电子时钟很实用,准确性也很好,也容易调节,若有毁坏更换元器件也简单,制作原理和过程也很易懂易做,成本也不高。
在此设计间也包含了很多的知识,跟我所学专业又对口,所以,做这个LED电子时钟是个很用很好很值得做的设计。
2 课题方案论证2.1系统总体设计要求本次设计中的LED数码管电子时钟电路采用24小时制记时方式。
本次设计采用STC89C52单片机的扩展芯片和2个74LS04做驱动,由八块LED数码管构成的显示系统,与传统的基于8/16位普通单片机的LED显示系统相比较,本系统在不显著地增加系统成本的情况下,可支持更多的LED数码管稳定显示。
设计采用STC89C52单片机,配备11.0592MHz晶振,复位电路为上电复位。
采用软件译码动态显示,考虑直接用单片机I/O口作为位选时可能驱动功率不够,可采用三极管作驱动共阳极数码管显示。
8位8段LED数码管作正常、调时显示,时间按时分秒排列,时钟误差:24小时误差3~5秒,并且在按键的作用下可以进行调时,调分,复位功能。
本电路采用直流5V电源供电。
同时为了限流保护电路也用了若干个阻值不等的电阻。
在本文一开始做了一些概述主要说明此设计的目的和意义,并会对这类设计项目发展情况做个简介。
这是对这次设计很重要的一个认识是前提和设计者必须明确和了解的。
然后本文对此设计做了一些简要分析,这对理清设计思想很重要。
然后还对设计中用到的元器件进行比较全面的介绍。
只有真正了解了元器件的特性和功能才能让这些元器件在设计中起到作用。
电子整个设计第一步是电路原理图,它直接关系着后续的工作。
接着当原理图完成好后就要为后面的刻板做准备了,这就是PCB印制电路板的制作。
它影响了整个设计的布局是能不能成功的条件。
紧接着就是程序了,如果只有硬件电路而没有程序,那么这个设计将一文不值,也就是说是一堆破铜烂铁。
所以这部分也是非常重要的。
最后结合整个设计总结了一些心得体会为这次的设计画上完满的句号。
也为以后更好的设计提供经验。
2.2系统模块结构论证按照系统设计功能的要求,确定系统由4个模块组成:主控制器、扫描驱动、调节电路和显示电路。
数码管电子钟电路结构框图如图2-2所示。
图2-2 电路结构图3 系统硬件设计3.1总体设计电子钟的原理框图如图3-1所示。
它由以下几个部件组成:单片机STC89C52、电源、时分秒显示部件。
时分秒显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。
时分显示模块以及显示驱动都通过STC89C52的I/O 口控制。
电源部分:整流稳压来得到+5V 电压,维持系统的正常工作。
图3-1 电子钟系统原理框图调节电路AT89C52 主控 制 器显示电路扫描驱动显示驱动显示时间(时、分、秒)电源STC89C523.2最小单片机系统如图3-2所示图3-2单片机最小系统3.3按键电路如图3-3所示图3-3按键电路4软件设计4.1 主程序主程序执行流程如图4-1所示,主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序。
P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78AT89C51图4-1主程序流程图4.2 显示子程序本系统共用8个数码管,从右到左依次显示秒个位、秒十位、横线、分个位、分十位、横线、时个位和时十位。
采用软件译码动态显示。
由于采用8段共阳LED数码管动态扫描实现数据显示,所以显示用十进制BCD码数据的对应段码存放在ROM 中。
显示时,先取内存地址中的数据,然后查得对应的显示用段码从P0口输出,P1口将对应的数码管选中供电,就能显示该地址单元的数据值。
4.3定时器/计数器T0中断服务程序定时器/计数器T0用于时间计时。
选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0;分单元加到60则对时单元加1,同时分单元清0;时单元加到24则对时单元清0,标志一天时间计满。
在对各单元计数的同时,把它们的值放到存储单元的指定位置。
定时器/计数器T0中断服务程序流程图如图4-3所示。
图4-3 中断服务程序5软硬件联调及调试结果5.1调试步骤(1)在KEIL软件中编写程序,完成后,单击“项目”下的“编译”,产生“.hex”文件。
(2)打开proteus软件,画上硬件电路图,保存。
(3)双击AT89C52芯片,在program file中加入“.hex”文件,按确定。
(4)调试运行。
5.2实际出现的问题及解决方法在proteus仿真软件调试成功后,实际却出现了一些问题,市场上没有买到排阻,所以用8个10K的电阻代替。
由于数码管无法直接点亮,需要驱动,所以用了非门74LS04作为驱动,可是代码不能再用共阳极的了,所以把代码改成共阴的,实际电路板上就能成功运行了。
5.3仿真图如图5-2所示图5-2proteus仿真图5.4实物图正面如图5-3-1所示,实物图背面如图5-3-2所示图5-3-1实物图正面5.5板子运行情况如图5-5所示图5-5板子运行情况结束语由于电路设计合理,功能电路基本能实现设计要求。
从硬件焊接反方面来说,觉得比较棘手的就是在焊数码管时,和整体器件的布局。
布局不好会影响后面工序的焊接,在这点上我自己觉得做的很不错,布线焊接模块功能区分明确。
在编程中遇到的最大困难就是延时的计算和数码管的显示程序段,在整体程序来看,我采用程序的结构化,使程序明朗,各功能程序段都以子程序的方式调用,所以在主程序中是相当的简单明朗的。
在硬件和软件的结合过程中也遇到比较大的问题,就是一开始数码管不是显示8,就是乱码之类的,进过调试,现在没有出现这样的现象了。
这也是我的一大攻关吧。
但是,对于程序我还是很不好以后在这方面要多多加强。
在整个设计过程中我学会了很多,不仅巩固了我的专业知识,提升了我的学习能力和知识能力,也使我学习到很多书上没有的,更加强了我的动手能力。
从这次的设计中我确实受益匪浅,我想也不枉陆老师对我的一路辅导与帮助。
我相信,以后有机会一定会做更多这样的设计。
大学三年,一晃就过去了,我很想靠自己的专业做个东西给自己留念。
再也就想考验一下自己三年的学习成果,不负老师三年来的教诲和付出的心血。
在做设计的同时使自己再学习、再提高。
是展示自己学习成果的时机,是对自己的一种肯定。
参考文献[1]实验指导书(陆广平编)实验12[2]李光飞,楼然苗. 单片机课程设计指导书[R]. 北京:北京航空航天大学出版社,2007[3]李广弟. 单片机基础[M]. 北京:北京航空航天大学出版社,1994附录附录1 原理图如图附录-1所示附录-1原理图附录2 PCB图如图附录-2所示附录-2PCB 图附录3 proteus 仿真图如图附录-3所示附录-3 proteus 仿真图dpg f e d c b aq1q2q3q4q5q6q7q8q 1q 2q 3q 4q 5q 6q 7q 8a b c d e f g d p XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C5112345678161514131211109RN1220R110kX1C230pF C310uFC130pF附录4 C语言程序清单#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar temp1,temp2,temp3,aa,miaoshi,miaoge,fenshi,fenge,shishi,shige;uchar code table[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xfd}; void display(uchar shishi,uchar shige,uchar fenshi,uchar fenge,uchar miaoshi,uchar miaoge);sbit S1=P1^0;sbit S2=P1^1;sbit S3=P1^2;void delay(uint z);void init();void main(){init();while(1){if(S1==0){temp3++;while(S1==0);}if(S2==0){temp2++;while(S2==0);}if(S3==0){temp1++;while(S3==0);}if(aa==20){aa=0;temp1++;if(temp1==60){temp1=0;temp2++;}if(temp2==60){temp2=0;temp3++;}if(temp3==24){temp3=0;}miaoshi=temp1/10;miaoge=temp1%10;fenshi=temp2/10;fenge=temp2%10;shishi=temp3/10;shige=temp3%10;}display(shishi,shige,fenshi,fenge,miaoshi,miaoge); }}void delay(uint z){uchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uchar shishi,uchar shige,uchar fenshi,uchar fenge,uchar miaoshi,uchar miaoge){P2=0xbf;P0=table[miaoshi];delay(5);P2=0x7f;P0=table[miaoge];delay(5);P2=0xf7;P0=table[fenshi];delay(5);P2=0xef;P0=table[fenge];delay(5);P2=0xfe;P0=table[shishi];delay(5);P2=0xfd;P0=table[shige];delay(5);P2=0xdf;P0=0xfd;delay(5);P2=0xfb;P0=0xfd;delay(5);}void init(){temp1=21;temp2=24;temp3=21;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void timer0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;}附录5 元器件清单元件名称型号数量52单片机STC89C52 1个HD74LS04 2个非门驱动电路瓷片电容30pf 2个电解电容10uf 1个4位共阳集数CAI5461BH 2个码管晶振11.0592MHz1个按键4个单片机插座40引脚1个电阻10k 8个1k 1导线若干万能板1个发光二极管1个。