版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z摘要本论文设计一个基于单片机的集电子钟、流水灯多种功能于一体的多功能电子钟。单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一局部。本文的主要内容是用AT89C52单片机为核心控制元件,设计一个电子钟。以单片机作为主控核心,与键盘、开关、扬声器等模块组成核心主控制模块,在主控模块上设有3个按键,四个开关,数码管关键词:AT89C52单片机电子钟流水灯目 录1.引言22.总体设计32.1根本原理32.2系统总体框图及设计思路43.详细设计53.1硬件设计53.2软件设计.10程序设计思路113.2.2程序流程图123.2.3程序代码134.系统调试及分析265.心得体会29参考文献301引言单片微型计算机是大规模集成电路技术开展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。1957年,Ventura创造了世界上第一个电子表,从而奠定了电子时钟的根底,电子时钟开场迅速开展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进展满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而到达计时的功能,是人民日常生活补课缺少的工具。现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进展时和分的校对,片选的灵活性好。2总体设计2.1根本原理数字时钟是本设计的最主要的局部。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压缺乏或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压缺乏或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;假设秒值到达60,则将其清零,并将相应的分字节值加1;假设分值到达60,则清零分字节,并将时字节值加1;假设时值到达24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示*一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。2.2系统总体框图及设计思路3详细设计3.1硬件设计电源局部 图3-2如图3-2所示,从外部引入5.0V的直流电,为单片机、复位电路提供电源。复位电路图3-3如图3-3所示,复位电路主要由型号为1N4148的二极管,型号为10UF/16V的电解电容,型号为104的瓷片电容,10K的电阻以及按键S1构成,S1接芯片的相应引脚RST,当开关按下时引脚RST为高电平1,断开时引脚为低电平0。位选局部图3-5图3-5为位选电路,三极管的集电极接数码管的公共端,当P2口对应的引脚输出高电平时三极管导通,对应的数码管显示数据。这样,在同一时刻,6位LED中只有选通的那1位显示出字符,而其他5位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他个位的位选线处于关闭状态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多位同时亮的假象,到达同时显示的效果。数码管的连接电路-.z图3-6图3-6为数码管的引脚图,每位的段码线〔a,b,c,d,e,f,g,dp〕分别与1个8位的锁存器输出相连,由AT89S51控制组合0-9十个数据,如令其显示1则b,c引脚〔即2,3引脚〕送高电平,此时数码管显示1。由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是一样的。AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4Kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。AT89S51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32I/O口线,看门狗〔WDT〕,两个数据指针,两个16位定时/计数器,一个5向量两级中断构造,一个全双工串行通信口,片内振荡器及时钟电路。如图3-7所示,AT89S51有40引脚,双列直插〔DIP〕封装,所用引脚功能如下:VCC——运行时加+4.5VGND——接地*TAL1——振荡器反相放大器及内部时钟发生器的输入端*TAL2——振荡器反相放大器的输出端RST——复位输入,高电平有效,在晶振工作时,在RST引脚上作用2个机器周期以上的高电平,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFTAU*R的DISRTO位〔地址8EH〕可翻开或关闭该功能。DISRTO位缺省为RESET输出高电平翻开状态。EA/VPP——片外程序存储器允许信号。欲使CPU仅外部程序存储器〔地址为0000H-FFFFH〕,EA端必须保持低电平〔接地〕,如果EA端为高电平〔接Vcc端〕,CPU则执行内部程序存储器中的指令。P1口,P2口——P1,P2是一组带内部上拉电阻的8位双向I/O口。运行时通过P1口控制驱动电路的工作,将数据送到数码管,显示相应的段码,为了到达减少功耗或满足端口对最大电流的限制,应加上一限流电阻。P2.0——P2.5口控制数码管的位选,使六个数码管轮流显示数据,等于1时位选三极管导通,等于0时位选三极管截止。无自锁开关——〔S2-P3.7〕开关接相应引脚P3.7,当开关按下时,相应引脚为低电平0,断开时引脚为高电平1。PCB图:流水灯硬件原理图3.2软件设计.程序设计思路流水灯局部为由八个灯分时点亮,并由一个开关控制其变换方式。从硬件原理图中可以看出,如果要让接在P1.0口的LED1亮起来,则只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水〞效果了。单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进展工作,即编写程序控制单片机管脚电平的上下变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成局部,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。在主程序的开场定义了一组固定单元用来存储计数的分、秒、时的存储单元。在主程序中,对不同的按键进展扫描,实现秒表,时间调整。系统总体流程图如图3所示。程序流程图程序代码1、预定义局部 *include<reg52.h>*definecharunsignedcharcodechartmpled[90]={0*01,0*02,0*04,0*08,0*10,0*20,0*40,0*80,0*81,0*82, 0*84,0*88,0*90,0*A0,0*C0,0*C1,0*C2,0*C4,0*C8,0*D0, 0*E0,0*E1,0*E2,0*E4,0*E8,0*F0,0*F1,0*F2,0*F4,0*F8, 0*F9,0*FA,0*FC,0*FD,0*FE,0*FF,0*FF,0*00,0*FF,0*00,0*00,0*FF,0*FF,0*00,0*00,0*80,0*40,0*20,0*10,0*08,0*04, 0*02,0*01,0*81,0*41,0*21,0*11,0*09,0*05,0*03,0*83,0*43,0*23,0*13, 0*0B,0*07,0*87,0*47,0*27,0*17,0*0F,0*8F,0*4F,0*2F,0*1F,0*9F,0*5F,0*3F, 0*BF,0*7F,0*FF,0*FF,0*00,0*FF,0*00 }; //定义数组常量,表示流水灯的变换方式,前面加"code"表示常量在程序代码中存放,不占用RAM。该数组为发光二极管的输出数据Codecharli[33]={0*81,0*42,0*24,0*18,0*99,0*5A,0*3C,0*BD,0*7E,0*FF,0*FF,0*E7,0*C3,0*81,0*00,0*18,0*00,0*18,0*24,0*42,0*81,0*99,0*A5,0*C3,0*DB,0*E7,0*FF,0*FF,0*00,0*FF,0*00};//此数组表示流水灯的另一种变换方式charcodedis_7[11]={0*C0,0*F9,0*A4,0*B0,0*99,0*92,0*82,0*F8,0*80,0*90,0*ff};charcodescan_con[8]={0*fe,0*fd,0*fb,0*f7,0*ef,0*df,0*bf,0*7f};chardatatimedata[6]={0*00,0*00,0*00,0*00,0*00,0*00};chardatadis[8]={0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*00};chardataconls=0*00,con04s=0*00,con=0*00;sbitkey0=P1^0;sbitkey1=P1^1;sbitkey2=P1^2;sbitbeen=P1^3;sbitkey3=P1^4;sbitkey4=P1^5;sbitkey5=P1^6;2、功能控制通过开关控制闹铃局部voidwen(void){if(timedata[0]>=5&&timedata[1]<=4&&timedata[2]==0&&timedata[3]==0&&timedata[4]==0&&timedata[5]==0&&key3==0)been=~been; else been=1;3、数码管显示局部本段采用的是共阴极LED数码管:scan(){chark;for(k=0;k<6;k++){ if(key5==0){P0=dis_7[dis[k]];P2=scan_con[k];delay1ms(1);P2=0*ff;} else {P0=0*ff; break; }}}4、按键局部:、利用3个按键调节时钟keyscan(){EA=0;if(key0==0){delay1ms(10);while(key0==0);if(dis[con]==10){dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];}con++;TR0=0;ET0=0;TR1=1;ET1=1;if(con>=6){con=0;TR1=0;ET1=0;TR0=1;ET0=1;}}if(con!=0){if(key1==0){delay1ms(10);while(key1==0);timedata[con]++;if(timedata[con]>=10){timedata[con]=0;}dis[con]=timedata[con];dis[6]=0*0a;}}if(con!=0){if(key2==0){delay1ms(10);while(key2==0);if(timedata[con]==0){timedata[con]=0*09;}else{timedata[con]--;}dis[con]=timedata[con];dis[6]=0*0a;}}EA=1;}5、产生时钟局部:对晶振周期计数,记满一秒产生中断,计数显示秒位加一voidtime_intt0(void)interrupt1{ET0=0;TR0=0;TH0=0*3C;TL0=0*B0;TR0=1;conls++;if(conls==20){conls=0*00;timedata[0]++;if(timedata[0]>=10){timedata[0]=0;timedata[1]++;if(timedata[1]>=6){timedata[1]=0;timedata[2]++;if(timedata[2]>=10){timedata[2]=0;timedata[3]++;if(timedata[3]>=6){timedata[3]=0;timedata[4]++;if(timedata[4]>=10){timedata[4]=0;timedata[5]++;}if(timedata[5]==2){if(timedata[4]==4){timedata[4]=0;timedata[5]=0;}}}}}}dis[0]=timedata[0];dis[1]=timedata[1];dis[2]=timedata[2];dis[3]=timedata[3];dis[4]=timedata[4];dis[5]=timedata[5];}ET0=1;}voidtime_intt1(void)interrupt3{EA=0;TR1=0;TH1=0*3C;TL1=0*B0;TR1=1;con04s++;if(con04s==8){con04s=0*00;dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];}EA=1;}6、流水灯控制局部:共两个开关,一个切换数码管与流水灯的亮灭,一个用来切换流水灯自身的点亮方式voidlsd(void){ charn; chari;iii:for(n=0;n<100;n++) {if(key5==1) //循环输出40个数据 {if(key4==1) {P3=~tmpled[n]; //"~"这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出 delay1ms(110); //调用延时子函数,改变参数大小,调整变化速度 } else {P3=0*FF; delay1ms(30); goto; } } else {P3=0*ff; break;} }:for(i=0;i<40;i++) { if(key5==1) {if(key4==0) {P3=~li[i]; //"~"这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出 delay1ms(200); //调用延时子函数,改变参数大小,调整变化速度 } else {P3=0*FF; delay1ms(30); gotoiii; } } else {P3=0*FF; break; } } }整体程序局部:*include<reg52.h>*definecharunsignedcharcodechartmpled[90]={0*01,0*02,0*04,0*08,0*10,0*20,0*40,0*80,0*81,0*82, 0*84,0*88,0*90,0*A0,0*C0,0*C1,0*C2,0*C4,0*C8,0*D0, 0*E0,0*E1,0*E2,0*E4,0*E8,0*F0,0*F1,0*F2,0*F4,0*F8, 0*F9,0*FA,0*FC,0*FD,0*FE,0*FF,0*FF,0*00,0*FF,0*00,0*00,0*FF,0*FF,0*00,0*00,0*80,0*40,0*20,0*10,0*08,0*04, 0*02,0*01,0*81,0*41,0*21,0*11,0*09,0*05,0*03,0*83,0*43,0*23,0*13, 0*0B,0*07,0*87,0*47,0*27,0*17,0*0F,0*8F,0*4F,0*2F,0*1F,0*9F,0*5F,0*3F, 0*BF,0*7F,0*FF,0*FF,0*00,0*FF,0*00 }; //定义数组常量,前面加"code"表示常量在程序代码中存放, //不占用RAM。该数组为发光二极管的输出数据Codecharli[33]={0*81,0*42,0*24,0*18,0*99,0*5A,0*3C,0*BD,0*7E,0*FF,0*FF,0*E7,0*C3,0*81,0*00,0*18,0*00,0*18,0*24,0*42,0*81,0*99,0*A5,0*C3,0*DB,0*E7,0*FF,0*FF,0*00,0*FF,0*00};charcodedis_7[11]={0*C0,0*F9,0*A4,0*B0,0*99,0*92,0*82,0*F8,0*80,0*90,0*ff};charcodescan_con[8]={0*fe,0*fd,0*fb,0*f7,0*ef,0*df,0*bf,0*7f};chardatatimedata[6]={0*00,0*00,0*00,0*00,0*00,0*00};chardatadis[8]={0*00,0*00,0*00,0*00,0*00,0*00,0*00,0*00};chardataconls=0*00,con04s=0*00,con=0*00;sbitkey0=P1^0;sbitkey1=P1^1;sbitkey2=P1^2;sbitbeen=P1^3;sbitkey3=P1^4;sbitkey4=P1^5;sbitkey5=P1^6;voidwen(void){if(timedata[0]>=5&&timedata[1]<=4&&timedata[2]==0&&timedata[3]==0&&timedata[4]==0&&timedata[5]==0&&key3==0)been=~been; else been=1;}delay1ms(intt) {inti,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}keyscan(){EA=0;if(key0==0){delay1ms(10);while(key0==0);if(dis[con]==10){dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];}con++;TR0=0;ET0=0;TR1=1;ET1=1;if(con>=6){con=0;TR1=0;ET1=0;TR0=1;ET0=1;}}if(con!=0){if(key1==0){delay1ms(10);while(key1==0);timedata[con]++;if(timedata[con]>=10){timedata[con]=0;}dis[con]=timedata[con];dis[6]=0*0a;}}if(con!=0){if(key2==0){delay1ms(10);while(key2==0);if(timedata[con]==0){timedata[con]=0*09;}else{timedata[con]--;}dis[con]=timedata[con];dis[6]=0*0a;}}EA=1;}scan(){chark;for(k=0;k<6;k++){ if(key5==0){P0=dis_7[dis[k]];P2=scan_con[k];delay1ms(1);P2=0*ff;} else {P0=0*ff; break; }}}clearmen(){inti;for(i=0;i<6;i++){dis[i]=timedata[i];}TH0=0*3C;TL0=0*B0;TH1=0*3C;TL1=0*B0;TMOD=0*11;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;}voidlsd(void){ charn; chari;iii:for(n=0;n<100;n++) {if(key5==1) //循环输出40个数据 {if(key4==1) {P3=~tmpled[n]; //"~"这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出 delay1ms(110); //调用延时子函数,改变参数大小,调整变化速度 } else {P3=0*FF; delay1ms(30); goto; } } else {P3=0*ff; break;} }:for(i=0;i<40;i++) { if(key5==1) {if(key4==0) {P3=~li[i]; //"~"这个符号是取反,因发光二极管采用共阳极,所以将数据取反再输出 delay1ms(200); //调用延时子函数,改变参数大小,调整变化速度 } else {P3=0*FF; delay1ms(30); gotoiii; } } else {P3=0*FF; break; } } }main(){ clearmen();while(1){scan();keyscan(); wen(); lsd();}}voidtime_intt0(void)interrupt1{ET0=0;TR0=0;TH0=0*3C;TL0=0*B0;TR0=1;conls++;if(conls==20){conls=0*00;timedata[0]++;if(timedata[0]>=10){timedata[0]=0;timedata[1]++;if(timedata[1]>=6){timedata[1]=0;timedata[2]++;if(timedata[2]>=10){timedata[2]=0;timedata[3]++;if(timedata[3]>=6){timedata[3]=0;timedata[4]++;if(timedata[4]>=10){timedata[4]=0;timedata[5]++;}if(timedata[5]==2){if(timedata[4]==4){timedata[4]=0;timedata[5]=0;}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年聚芳砜PAS行业发展行业新材料创新报告及未来五至十年行业发展趋势分析报告
- 2024年湖南衡阳雁峰职业学院高职单招职业技能考试题库附答案详解(B卷)
- 2026年游戏行业虚拟现实技术应用报告
- 人工智能与证券市场风险管理的融合
- 2026禁毒办员面试题目及答案
- 2026北师大二下互动核心素养课件
- 2026人工智能技术应用行业发展现状与竞争格局探索
- 2026人工智能行业市场现状分析规划研究报告投资评估发展前景趋势
- 2026中国涡流泵行业技术秘密保护与知识产权战略报告
- 2026青海食品饮料加工领域市场供需变化分析及商业化发展规划文件
- 2026广西正远监理咨询有限公司第二批项目制用工招聘47人笔试模拟试题及答案详解
- 2027届高三启航学生动员大会上校长讲话:把极限刻在 2027 的坐标上
- 2026年湖北省综合评标评审专家库专家考试在线题库及答案
- 2025年芜湖市繁昌区区属国有企业招聘考试试卷真题
- 设备购买意向性合同
- 《中华人民共和国生态环境法典》深度培训
- 正确刷牙方法指导
- 设计图纸审批制度
- 铁路信号工考试题库(附答案)
- 博睿测控 B系列智能型电动执行器安装使用手册D21A-211213
- 2025年青海省格尔木市检察官、法官入员额考试真题(附答案)
评论
0/150
提交评论