8051单片机电子时钟设计_第1页
8051单片机电子时钟设计_第2页
8051单片机电子时钟设计_第3页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GuangDongPolytechnicNorrnalUnrversit单片机原理及应用综合实训报告题目:电子时钟的设计院另U:自动化学院专业:电气工程及其自动化1姓名:笑嘻嘻学号:2009104143036指导教师:祁伟答辩日期:2011年9月19日电子时钟制作摘要本实训借用实验板的MCS-51单片机定时、中断功能完成电子时钟的定时工作,应用8051对单片机I/O口驱动发光二极管、LED进行电子时钟时、分、秒显示。应用8051P3口、8255B口完成时间的设定工作。利用P1口加入华彩设计,如发光二极管按键指示、时钟报时等。再根据电子时钟实际应用完成系统总体设计。,根据系统总体设计完成编程设计

2、工作,最后通电、软件调试、运行。关键词:电子时钟;8051;8051P3;8255B目录1电子时钟的概述12电子时钟的硬件电路设计12.1选用单片机12.2发光二极管8字数码管的显示22.3单片机I/O口扩展42.4独立式按键43电子时钟软件设计部分53.1程序流程图63.2定时中断服务程序流程图73.3扩展功能程序流程84电子时钟实用说明84心得体会95附录10程序代码101电子时钟的概述电子时钟功用,能利用MCS-51单片机定时、中断功能完成时间的定时工作。整个系统具有参数设定、时间运行、报时、查询当前年、月、日等功能。开机可显示HELLO-按某个特定的按键后,时钟还可以开始计时,还可以通

3、过另一些键功能,完成分,时、日、月、年参数设定。参数设定完后,也可以通过一些键继续计时。电子时钟常显示的是当前的时问,年、月、日还可以通过按几个特定的键切换、查询,6位LED显示查询的内容,如现在的年月日。注意事项:时钟计时时可进行时间查询,但不能更改参数,若要更改参数,必须先停止时钟运行。2电子时钟的硕件电路设计2.1选用单片机MCS-51系统选用8051单片机,如图1所示。8051单片机内有4KROM256字节RAM程序存放在4KROM8051单片机最小系统组成有:1) 时钟电路:工作时钟;2) 复位电路,如图2所示;3) RAM数据存储4) ROM程序存储5)I/O接口:与外界交互晶振电

4、路如图3所示Pl12Pl23Pl34Pl.15Pl.56Plh7Pl78P3.3P以12gP3.515P3.I11EAJIXI19X218RST9RD17口WRPloT10POOP11P01P12P02T13P03P14P04P15P05F16POfiF17POTINT1Pit)LN'IOP21P22TlP23TOP24P25XIX2NESEIHXDTXDALEPWRPSENU1图1翳PO137PQ.236P0335Pl134PO5J3PQ631P0.721Pi.O22P21P2224P2325P2.126P2.527P26P2.710RXD11TXDJOVLE*PSENPOOJ9图2

5、2.2发光二极管8字数码管的显示LED显示有静态显示和动态显示两种方式。动态显示接口电路简图如图4所示。将各位数码管的段并联接在一起,由P1口控制(字型口),每一个数码管的共阴极(共阳极)接到P2.0、P2.1作为位选信号。虽说要显示的字型码通过P1口同时送到了每一个数码管,但它们不会同时显示同一个字符,只有控制共阴极(共阳极)的位选信号有效时,对应的数码管才会显示相应字符。这种由字型口控制要显示字符的字形码,依此循环选通每位数码管的位选信号就得到了动态显示效果。它主要是利用人眼的视觉暂留特性及数码管得余光特性,看上去似乎是多位数码管同时显示。是当显示位数较多时,节省硬件,接口电路简单,但显示

6、占用CPLM问。静态显示占用CPU时间短,显示简单、稳定,但当显示位数较多时,占用接口资源多。动态显示接口电路较简单,但占用CPU时间,显小是度较静态显示差,一般说,显示位数较多时,采用动态或申并转换;显示位数较少时,采用静态显示方式静态显示接口电路如图5所示选用共阴极LER将共阴极点连接在一起接地,每一位的段选线与一个8位并行口相连,只要将要显示的字符的字型码送至并行口锁存,LED显示器上便立即显示出该字符,直到CPlg来一个新的字型码为止,由于静态显示每位数码管均有独立的段选码,耗电量大,硬件多。如要外接6个数码管,则需要6个8位并行口。2.3单片机I/O口扩展当单片机构成系统时,常常I/

7、O口不够用,此时可利用MCS51的扩展能力,根据需要扩展相应接口,如可编程接口芯片8255与MCS51单片机连接可扩展I/O;利用MCS-5仰片机的申行口扩展并行I/O接口。实验板原理图的显示部分就是利用申入/并出技术实现2位数码管的显示。2.4独立式按键键盘是一组按钮式开关的集合,常采用软件来识别。键盘的操作步骤: 识键。判断是否有键按下(键入),若有,则需进一步译键。 译键。在有键入的情况下,进一步识别是哪一个键,以便作进一步处理。 键义分析。根据识别的结果,明确相应的键义。如果是数字键,应得出输出的数值;如果是功能键,则应知道具体的操作要求。键盘构成: 独立联接式非编码键盘。特点:每个键

8、相互独立,各自接通一条输入数据线。键未按下时,相应的数据线处于高电平,即为“1”态。当某键按下时,该键所连之数据线接地,即为“0”态。 独立联接式编码键盘。特点:在键数较多时,可采用独立式编码键盘,由4线-16线编码电路进行编码。 矩阵联接式非编码。特点:先使一行线接地,然后检查列线。如果某条列线也是低电位,则可判别两线相交处的某号键已按下。假如在扫描时没有发现有列线为地电位,则说明此行中无键按下。那么可将下一行线接地,如此逐一扫描列线,直到查完最后一行为止。实验板中键盘电路设计可根据需要组合成独立联接式非编码键盘及矩阵联6码图一"编见所I厂11:1:|4O可1t1.11一L产3电子

9、时钟软件设计部分3.1程序流程图编写程序之前先绘制程序流程图,理活思路,使之能简明、直观指示程序流向,且很容易由此编写出具体的源程序。将程序以模块方式分割成具有相应功能的子程序。根据系统功能,合理安排主程序任务,中断服务程序任务。程序设计有两个分支:参数设定及时钟运行。静态参数设定时,定时器关闭,只完成参数“加一键”的设定工作。时钟运行时,启动定时器开始计时。编写程序时,首先理活思路,即通过流程图确定算法。时钟运行参数设定日查询显示月查询显示年查询显示开始各功能的初始显示HELLO-P3.2键吗?K12键吗?K13键吗?K14键吗?K15键吗?图样7主程序框图主程序框图如图7所小在主程序中,分

10、别初始化了定时器0和外部中断0。定时器0的中断服务程序用丁实现时钟运行时的秒加1及进位功能。外部中断0的中断服务程序使r=1。因此,当开始运行程序时,r=0,数码管显示HELLO-当P3.2按下时,进入外部中断0中断服务程序,使r=1,退出中断服务程序后,时钟开始运行;在时钟运行过程中,如果分别按下K13K14K15可设置时间,查询年、月、日3.2定时中断服务程序流程图定时中断服务程序流程图如图8所示。图1-7中断敝芬程序框图3.3扩展功能程序流程扩展功能程序流程如图9所示。图94电子时钟实用说明1、开机时,显示HELLO-2、按下K16键,电子时钟开始运行,数码管显示时、分、秒。3、按下K1

11、3键,进入时间参数设置,此时可再次通过K13键进行年、月日、时分的切换,并通过K12、K14可分别对年、月、日、时、分'加1、减1,由此完成时间的设定。4、当数码管显示时分秒,可通过K14K15查询年、月、日。4心得体会在本次实验中重新复习了单片机实验的内容,更加深了对程序和项目的训练。虽然开始的时候感觉比较,后来经过多天的努力和温习,终于可以把以前半懂不懂的知识比较完整的拼凑在一起。这次实验程序的编写和调试所花时间比较多,写报告的用的时间比较少。对于这次实验的不足之处还是需要更深刻的检讨,希望以后更加努力。5附录程序代码/*/程序名shizhong.C/功能描述:电子时钟/硬件电路参

12、看实验板/*/#include<reg51.h>#include<ABSACC.H>#defineucharunsignedchar#defineuintunsignedint#defineCOM8255XBYTE0xffff#definePA8255XBYTE0Xfffc#definePB8255XBYTE0Xfffd#definePC8255XBYTE0Xfffe#defineOSC_FREQ12000000/12Mhz#defineC1ms(65536-OSC_FREQ/(12000000/980)/1ms定时sbitP1_4=P1A4;sbitP1_5=P1A5

13、;sbitP1_6=P1A6;sbitP1_7=P1A7;sbitP2_0=P2A0;sbitP2_1=P2A1;sbitP2_2=P2A2;sbitP2_3=P2A3;sbitP2_4=P2A4;sbitP2_5=P2A5;sbitP2_6=P2A6;sbitP2_7=P2A7;/位选控制/数码管段码控制a/数码管段码控制dpsbitP3_2=P3A2;/中断、返回计时sbites=P2A4;/更新静态显示sbitP1_2=P1A2;sbitpi_i=piai;sbitP1_0=P1A0;/8255/8255/8255片选片选片选P12=0P1_1=1P10=0ucharcodehello=

14、(0x89,0x86,0xc7,0xc7,0xfc,0x02;/HELLO-ucharcodenumber1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/动态显示0-9ucharcodenumber2=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6;/静态显示0-9ucharcodenumber3=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/动态显示0-9dp点亮uintyear=2011,month=9,day=3,hour=

15、15,minute=35,second=25;uintx,y,m,n,i=0,j=0,k=0,r=0;voidTimer_1ms(uint_1ms);voidSet_Init_Timer0();voidSet_Init_Xint0();voidSet_Init_8255();voiddis_hello();voiddis_year();voiddis_month();voiddis_day();voiddis_hour();voiddis_minute();voiddis_second();voidundis_second();voidset_timer();voiddis_year2();v

16、oiddis_day2();/延时1ms/定时器0初始化函数/外部中断0初始化函数/8255初始化程序/开机显示HELLO-/显示年/不显示秒/设置时间/在查询状态下显示年/在查询状态下显示日期voidmain()(Set_Init_Xint0();Set_Init_8255();Set_Init_Timer0();do(if(r=0)(dis_hello();elseEX0=0;/外部中断0关中断dis_hour();dis_minute();dis_second();Set_Init_8255();switch(PB8255)(case0xDF:set_timer();break;/PB=

17、0xDF,K13键按下切换到设置时间程序case0xBF:dis_day2();break;/PB=0xBF,K14键按下切换到显示日期程序case0x7F:dis_year2();break;/PB=0x7F,K15键按下切换到显示年的程序while(1);voidTimer_1ms(uint_1ms)/延时函数(TMOD=0x11;TR1=1;while(_1ms-)(TH1=C1ms/256;TL1=C1ms%256;while(!TF1);TF1=0;TR1=0;voidSet_Init_Timer0()(TMOD=0x11;TH0=0x3C;TL0=0xAF;ET0=1;TR0=1;

18、EA=1;/定时器0初始化函数/定时器0,方式一/装入初值15535设成50ms定时器voidSet_Init_Xint0()(/外部中断0初始化函数IT0=1;EX0=1;/外部中断0,边沿触发方式/外部中断0开中断EX1=1;/打开总中断/显示HELLO-/位选/数码管显示Hvoiddis_hello()(P1=0x70;P2=hello0;Timer_1ms(5);P1=0xb0;P2=hello1;Timer_1ms(5);P1=0xd0;P2=hello2;Timer_1ms(5);P1=0xe0;P2=hello3;Timer_1ms(5);SCON=0x00;es=0;SBUF=

19、hello4;while(!TI)(TI=0;静态显示更新SBUF=hello5;while(!TI)(TI=0;es=1;/对year变量通过除法、取余运算得到各位的数值,并送到对应的数码管上voiddis_year()(x=year/100;y=x%10;x=x/10;m=year%100;n=m%10;m=m/10;P1=0x70;P2=number1x;Timer_1ms(5);P1=0xb0;P2=number1y;Timer_1ms(5);P1=0xd0;/百位/千位/个位/十位P2=number1m;Timer_1ms(5);P1=0xe0;P2=number1n;Timer_1

20、ms(5);undis_second();/对month变量通过除法、取余运算得到十位、个位的数值,并送到对应的数码管上voiddis_month()x=month/10;y=month%10;P1=0x70;P2=number1x;Timer_1ms(5);P1=0xb0;P2=number1y;Timer_1ms(5);/对day变量通过除法、取余运算得到十位、个位的数值,并送到对应的数码管上voiddis_day()x=day/10;y=day%10;P1=0xd0;P2=number1x;Timer_1ms(5);P1=0xe0;P2=number1y;Timer_1ms(5);und

21、is_second();/对hour变量通过除法、取余运算得到十位、个位的数值,并送到对应的数码管上voiddis_hour()x=hour/10;y=hour%10;P1=0x70;P2=number1x;Timer_1ms(5);P1=0xb0;P2=number3y;/Timer_1ms(5);对minute变量通过除法、取余运算得到十位、个位的数值,并送到对应的数码管上voiddis_minute()(uintx,y;x=minute/10;y=minute%10;P1=0xd0;P2=number1x;Timer_1ms(5);P1=0xe0;P2=number1y;Timer_1m

22、s(5);/对second变量通过除法、取余运算得到十位、个位的数值,并送到对应的数码管上voiddis_second()(x=second/10;y=second%10;SCON=0x00;es=0;SBUF=number2x;while(!TI)TI=0;SBUF=number2y;while(!TI)TI=0;es=1;/将0x00送到显示秒的数码管上,让这两个数码管不显示voidundis_second()SCON=0x00;es=0;SBUF=0x00;while(!TI)TI=0;SBUF=0x00;while(!TI)TI=0;es=1;/时间设置函数,K12对变量加1K13实现

23、变量切换(使用goto语句)K14对变量减1voidset_timer()TR0=0;/关闭定时器0dofor(i=0;i<=5;i+)(dis_year();undis_second();Timer_1ms(5);Set_Init_8255();switch(PB8255)(case0xEF:year+;break;/PB=0xEF,K12键按下year加1case0xBF:year-;break;/PB=0xEF,K14键按下year减1case0xDF:gotomonth;break;/PB=0xDF,K13键按下切换到设置月程序while(1);month:do(if(month

24、=13)/判断进位(month=1;for(i=0;i<=5;i+)(dis_month();dis_day();undis_second();Set_Init_8255();switch(PB8255)(case0xEF:month+;break;/PB=0xEF,K12键按下month加1case0xBF:month-;break;/PB=0xEF,K14键按下month减1case0xDF:gotoday;break;/PB=0xDF,K13键按下切换到设置日程序while(1);day:do(if(day=31)/判断进位(day=1;for(i=0;i<=5;i+)(di

25、s_month();dis_day();undis_second();Set_Init_8255();switch(PB8255)(case0xEF:day+;break;/PB=0xEF,K12键按下day加1case0xBF:day-;break;/PB=0xEF,K14键按下day减1case0xDF:gotohour;break;/PB=0xDF,K13键按下,切换到设置时程序while(1);hour:do(if(hour=24)/判断进位(hour=0;for(i=0;i<=5;i+)(dis_hour();dis_minute();dis_second();Set_Init_8255();switch(PB8255)(case0xEF:hour+;break;/PB=0xEF,K12键按下hour加1case0xBF:hour-;break;/PB=0xEF,K14键按下hour减1case0xDF:gotominute;break;/PB=0xDF,K13键按下切换到设置分程序while(1);minute:do(minute=0;for(i=0;i<=5;i+)(di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论