多功能电子钟设计 (2).doc

上传人:豆**** 文档编号:17542205 上传时间:2022-05-24 格式:DOC 页数:17 大小:205.50KB
返回 下载 相关 举报
多功能电子钟设计 (2).doc_第1页
第1页 / 共17页
多功能电子钟设计 (2).doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《多功能电子钟设计 (2).doc》由会员分享,可在线阅读,更多相关《多功能电子钟设计 (2).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流多功能电子钟设计 (2).精品文档.摘 要本论文设计一个基于单片机的集电子钟、流水灯多种功能于一体的多功能电子钟。单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89C52单片机为核心控制元件,设计一个电子钟。以单片机作为主控核心,与键盘、开关、扬声器等模块组成核心主控制模块,在主控模块上设有3个按键,四个开关,数码管和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。关键词:AT89C52单片机 电子钟 流水

2、灯 目录1.引 言22. 总体设计32.1基本原理32.2系统总体框图及设计思路43.详细设计53.1 硬件设计53.2软件设计.103.2.1程序设计思路113.2.2 程序流程图123.2.3 程序代码134. 系统调试及分析265.心得体会29参考文献301 引 言单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟

3、开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。2 总体设计2.1基本原理数字时钟是本设

4、计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器

5、与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。2.1.1数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得

6、较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。2.2系统总体框图及设计思路3 详细设计3.1 硬件设计3.1.1电源部分图3-2如图3-2所示,从外部引入5.0V的直流电,为单片机、复

7、位电路提供电源。3.1.2复位电路图3-3如图3-3所示,复位电路主要由型号为1N4148的二极管,型号为10UF/16V的电解电容,型号为104的瓷片电容,10K的电阻以及按键S1构成,S1接芯片的相应引脚RST,当开关按下时引脚RST为高电平1,断开时引脚为低电平0。3.1.3位选部分图3-5图3-5为位选电路,三极管的集电极接数码管的公共端,当P2口对应的引脚输出高电平时三极管导通,对应的数码管显示数据。这样,在同一时刻,6位LED中只有选通的那1位显示出字符,而其他5位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他个位的位选线处于关闭状态,在段码线上输出将要显示字

8、符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多位同时亮的假象,达到同时显示的效果。3.1.4数码管的连接电路图3-6图3-6为数码管的引脚图,每位的段码线(a,b,c,d,e,f,g,dp)分别与1个8位的锁存器输出相连,由AT89S51控制组合09十个数据,如令其显示1则b,c引脚(即2,3引脚)送高电平,此时数码管显示1。由于各位的段码线并联,8位I/O口输出段码对各个

9、显示位来说都是相同的。AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4K bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。AT89S51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。如图3-7所示,AT89S51有40引脚,双列直插(DIP)封装,所用引脚功能如下:1. VCC 运行时加4.5V2. GND 接

10、地3. XTAL1 振荡器反相放大器及内部时钟发生器的输入端4. XTAL2 振荡器反相放大器的输出端5. RST 复位输入,高电平有效,在晶振工作时,在RST引脚上作用2个机器周期以上的高电平,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFT AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISRTO位缺省为RESET输出高电平打开状态。6. EA/VPP 片外程序存储器访问允许信号。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地),如果EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。7. P1口,P2口P1

11、,P2是一组带内部上拉电阻的8位双向I/O口。运行时通过P1口控制驱动电路的工作,将数据送到数码管,显示相应的段码,为了达到减少功耗或满足端口对最大电流的限制,应加上一限流电阻。P2.0P2.5口控制数码管的位选,使六个数码管轮流显示数据,等于1时位选三极管导通,等于0 时位选三极管截止。8. 无自锁开关(S2P3.7)开关接相应引脚P3.7,当开关按下时,相应引脚为低电平0,断开时引脚为高电平1。9. PCB图:流水灯硬件原理图32软件设计. 3.2.1程序设计思路流水灯部分为由八个灯分时点亮,并由一个开关控制其变换方式。从硬件原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只

12、要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编

13、写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。在主程序的开始定义了一组固定单元用来存储计数的分、秒、时的存储单元。在主程序中,对不同的按键进行扫描,实现秒表,时间调整。系统总体流程图如图3所示。3.2.2 程序流程图3.2.3 程序代码1、预定义部分 #include#define char unsigned char code char tmpled90=0X01,0X02,0X04,0X08,0X1

14、0,0X20,0X40,0X80,0X81,0X82,0X84,0X88,0X90,0XA0,0XC0,0XC1,0XC2,0XC4,0XC8,0XD0,0XE0,0XE1,0XE2,0XE4,0XE8,0XF0,0XF1,0XF2,0XF4,0XF8,0XF9,0XFA,0XFC,0XFD,0XFE,0XFF,0XFF,0X00,0XFF,0X00,0X00,0XFF,0XFF,0X00,0X00,0X80,0X40,0X20,0X10,0X08,0X04,0X02,0X01,0X81,0X41,0X21,0X11,0X09,0X05,0X03,0X83,0X43,0X23,0X13,0X0

15、B,0X07,0X87,0X47,0X27,0X17,0X0F,0X8F,0X4F,0X2F,0X1F,0X9F,0X5F,0X3F,0XBF,0X7F,0XFF,0XFF,0X00,0XFF,0X00;/定义数组常量,表示流水灯的变换方式,前面加code表示常量在程序代码中存放,不占用RAM。该数组为发光二极管的输出数据Code char li33=0X81,0X42,0X24,0X18,0X99,0X5A,0X3C,0XBD,0X7E,0XFF,0XFF,0XE7,0XC3,0X81,0X00, 0X18,0X00,0X18,0X24,0X42,0X81, 0X99,0XA5,0XC3,0

16、XDB,0XE7,0XFF,0XFF,0X00,0XFF,0X00;/此数组表示流水灯的另一种变换方式 char code dis_711=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff; char code scan_con8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; char data timedata6=0x00,0x00,0x00,0x00,0x00,0x00; char data dis8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; char d

17、ata conls=0x00,con04s=0x00,con=0X00; sbit key0=P10; sbit key1=P11; sbit key2=P12; sbit been=P13; sbit key3=P14; sbit key4=P15; sbit key5=P16;2、功能控制通过开关控制闹铃部分void wen(void) if (timedata0=5&timedata1=4&timedata2=0&timedata3=0&timedata4=0&timedata5=0&key3=0) been=been; else been=1; 3、数码管显示部分本段采用的是共阴极LE

18、D数码管:scan() char k; for(k=0;k=6) con=0;TR1=0;ET1=0;TR0=1;ET0=1; if(con!=0) if(key1=0) delay1ms(10); while(key1=0); timedatacon+; if(timedatacon=10) timedatacon=0; discon=timedatacon;dis6=0x0a; if(con!=0) if(key2=0) delay1ms(10); while(key2=0); if(timedatacon=0) timedatacon=0x09; elsetimedatacon-; di

19、scon=timedatacon;dis6=0x0a; EA=1;5、产生时钟部分: 对晶振周期计数,记满一秒产生中断,计数显示秒位加一void time_intt0(void) interrupt 1 ET0=0;TR0=0;TH0=0x3C;TL0=0XB0;TR0=1; conls+; if(conls=20) conls=0x00; timedata0+ ; if(timedata0=10) timedata0=0;timedata1+; if(timedata1=6) timedata1=0;timedata2+; if(timedata2=10) timedata2=0;timed

20、ata3+; if(timedata3=6) timedata3=0;timedata4+; if(timedata4=10) timedata4=0;timedata5+; if(timedata5=2) if(timedata4=4) timedata4=0;timedata5=0; dis0=timedata0;dis1=timedata1;dis2=timedata2; dis3=timedata3;dis4=timedata4;dis5=timedata5; ET0=1; void time_intt1(void) interrupt 3 EA=0;TR1=0;TH1=0x3C;TL

21、1=0xB0;TR1=1; con04s+; if(con04s=8) con04s=0x00; dis7=discon;discon=dis6;dis6=dis7; EA=1;6、流水灯控制部分:共两个开关,一个切换数码管与流水灯的亮灭,一个用来切换流水灯自身的点亮方式void lsd(void) char n; char i; iii: for(n=0;n100;n+) if(key5=1)/循环输出40个数据 if(key4=1) P3=tmpledn;/这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出 delay1ms(110);/调用延时子函数,改变参数大小,调整变化速度

22、else P3=0XFF; delay1ms(30); goto www; else P3=0xff; break; www: for(i=0;i40;i+) if(key5=1) if(key4=0) P3=lii;/这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出 delay1ms(200);/调用延时子函数,改变参数大小,调整变化速度 else P3=0XFF; delay1ms(30); goto iii; else P3=0XFF; break;整体程序部分: #include#define char unsigned char code char tmpled90=0X

23、01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0X81,0X82,0X84,0X88,0X90,0XA0,0XC0,0XC1,0XC2,0XC4,0XC8,0XD0,0XE0,0XE1,0XE2,0XE4,0XE8,0XF0,0XF1,0XF2,0XF4,0XF8,0XF9,0XFA,0XFC,0XFD,0XFE,0XFF,0XFF,0X00,0XFF,0X00,0X00,0XFF,0XFF,0X00,0X00,0X80,0X40,0X20,0X10,0X08,0X04,0X02,0X01,0X81,0X41,0X21,0X11,0X09,0X05,0X03,0X

24、83,0X43,0X23,0X13,0X0B,0X07,0X87,0X47,0X27,0X17,0X0F,0X8F,0X4F,0X2F,0X1F,0X9F,0X5F,0X3F,0XBF,0X7F,0XFF,0XFF,0X00,0XFF,0X00;/定义数组常量,前面加code表示常量在程序代码中存放, /不占用RAM。该数组为发光二极管的输出数据Code char li33=0X81,0X42,0X24,0X18,0X99,0X5A,0X3C,0XBD,0X7E,0XFF,0XFF,0XE7,0XC3,0X81,0X00, 0X18,0X00,0X18,0X24,0X42,0X81, 0X99

25、,0XA5,0XC3,0XDB,0XE7,0XFF,0XFF,0X00,0XFF,0X00;char code dis_711=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff; char code scan_con8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; char data timedata6=0x00,0x00,0x00,0x00,0x00,0x00; char data dis8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; char data co

26、nls=0x00,con04s=0x00,con=0X00; sbit key0=P10; sbit key1=P11; sbit key2=P12; sbit been=P13; sbit key3=P14; sbit key4=P15; sbit key5=P16; void wen(void) if (timedata0=5&timedata1=4&timedata2=0&timedata3=0&timedata4=0&timedata5=0&key3=0) been=been; else been=1; delay1ms(int t) int i,j; for(i=0;it;i+) f

27、or(j=0;j=6) con=0;TR1=0;ET1=0;TR0=1;ET0=1; if(con!=0) if(key1=0) delay1ms(10); while(key1=0); timedatacon+; if(timedatacon=10) timedatacon=0; discon=timedatacon;dis6=0x0a; if(con!=0) if(key2=0) delay1ms(10); while(key2=0); if(timedatacon=0) timedatacon=0x09; elsetimedatacon-; discon=timedatacon;dis6

28、=0x0a; EA=1; scan() char k; for(k=0;k6;k+) if(key5=0) P0=dis_7disk;P2=scan_conk;delay1ms(1);P2=0xff;elseP0=0xff;break; clearmen() int i; for(i=0;i6;i+) disi=timedatai; TH0=0x3C;TL0=0xB0; TH1=0x3C;TL1=0xB0; TMOD=0X11;ET0=1;ET1=1;TR1=0;TR0=1;EA=1; void lsd(void) char n; char i; iii: for(n=0;n100;n+) i

29、f(key5=1)/循环输出40个数据 if(key4=1) P3=tmpledn;/这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出 delay1ms(110);/调用延时子函数,改变参数大小,调整变化速度else P3=0XFF; delay1ms(30); goto www; else P3=0xff; break; www: for(i=0;i=10) timedata0=0;timedata1+; if(timedata1=6) timedata1=0;timedata2+; if(timedata2=10) timedata2=0;timedata3+; if(time

30、data3=6) timedata3=0;timedata4+; if(timedata4=10) timedata4=0;timedata5+; if(timedata5=2) if(timedata4=4) timedata4=0;timedata5=0; dis0=timedata0;dis1=timedata1;dis2=timedata2; dis3=timedata3;dis4=timedata4;dis5=timedata5; ET0=1; void time_intt1(void) interrupt 3 EA=0;TR1=0;TH1=0x3C;TL1=0xB0;TR1=1;

31、con04s+; if(con04s=8) con04s=0x00; dis7=discon;discon=dis6;dis6=dis7; EA=1;4 系统调试及分析1、用keil编写程序编译运行通过后,用Proteus仿真结果如下。2、实物连接图如下通过下载口把play.hex文件下载到单片机中,与仿真结果一样,可实现以上所诉的各个功能。本实验板均采用活动接口,可反复利用,除上述功能外还可以实现串口控制,红外驱动等多项实验。这也是本实验板的优点之一。5 心得体会通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,

32、不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。损耗了过多的内存资源。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。当遇到问题时及时向老师或同学讨论解决,而且逐渐培养将整体分成模块

33、的思维习惯,本次课设中,我们将电子钟部分跟流水灯部分分开设计,编程,然后再结合起来,起到了事半功倍的效果。在以后的设计中,我会吸取此次课设的经验,不断努力,以取得更好的成绩。 不足之处有:1.没有实现定时功能,只能在一定范围内满足用户需要。而且报警时间不可控; 2.流水灯跟数码管虽然能同时进行,但不能同时显示,故用了一个开关控制其切换。参考文献1 于海生微型计算机控制技术M 清华大学出版社1999-62 孙涵芳MCS-51系列单片机原理及应用M 北京航空航天大学出版社1996-43 黄正谨综合电子设计与实践M 东南大学出版社2002-34 杨欣等电子设计从零开始M 清华大学出版社2005-105 谢嘉奎电子线路M 高等教育出版社2003-26 夏路易,石宗义电路原理图与电路设计教程Protel 99SEM 北京希望电子出版社20027 王毓银数字电路逻辑设计M 高等教育出版社2004-28 邱关源电路M 高等教育出版社

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁