




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..目录TOC\o"1-3"\h\u第一部分设计任务1.1设计题目及要求11.2.1方案一11.2.2方案二1第二部分系统硬件平台的设计2.1总体设计方案说明22.2单片机最小系统22.2.1STC89C52单片机介绍22.2.2时钟电路42.2.3复位电路42.31602液晶模块52.4时钟芯片DS13026第三部分系统软件的设计与实现3.1主程序8Protues仿真软件介绍8仿真电路图9第四部分安装调试4.1系统软、硬件调试104.1.1调试步骤104.1.2故障及处理10课程设计总结12参考文献12..第一部分设计任务1.1设计题目及要求设计一个基于单片机的简易万年历。〔1可以在LCD液晶上显示秒、分、时、星期、日、月、年;〔2能够判断平年、润年;〔3秒、分、时、星期、日、月、年可调;〔4具有单片机断电记忆功能,在单片机掉电后无需重新设置。1.2备选方案设计与比较1.2.1方案一直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数,并用程序判断平年和闰年,用数码管显示时、分、秒、年、月、日、星期。由于需要显示的数字比较多,则需要的数码管个数比较多,采用数码管显示显得太浪费,并且多的数码管焊接时也比较复杂,此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,最主要的问题是些方法在单片机主电源断电后,计时将恢复初始值。所以不采用此种方法作为显示。1.2.2方案二采用DS1302时钟芯片实现时钟,用1602LCD液晶显示屏显示时、分、秒、年、月、日、星期。DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,不需要在程序中采用定时,而且精度高,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA,此芯片最主要的特点是具有备用电源引脚,在单片机主电源掉电后,备用电源供电,使得DS1302继续工作,时钟继续运行,即具备掉电记忆功能,符合课程设计要求,液晶显示屏的显示功能强大,可显示大量数字和英文字母,以及一些特殊字符,并且显示多样,清晰可见,且价格适中,固采用此方案。第二部分系统硬件平台的设计2.1总体设计方案说明本电路以STC89C52单片机系统为控制核心,时钟电路由高精度低功耗的DS1302提供,采用三线接口与CPU进行同步通信,输入部分采用四个独立式按键S1、S2、S3、S4,即单片机的P2.1、P2.2、P2.3、P2.4。1602液晶显示部分,D0-D7口与单片机P1口相连,系统原理图如图2-1所示。图1系统原理图当第一次按下S1时,1602液晶显示器上光标在秒地址上闪烁,液晶显示器是时间停止,表示秒可调;当第二次按下S1时,1602液晶显示器上光标在分地址上闪烁,表示分可调;当第三次按下S1时,1602液晶显示器上光标在时地址上闪烁,表示时可调;依次类推,当第八次按下S1时,液晶显示器是时间启动,光标不出现。当按一下S2时,可对时、分、秒、年、月、日、星期加一。当按一下S3时,可对时、分、秒、年、月、日、星期减一。当按一下S4时,1602液晶显示初始化时间。2.2单片机最小系统2.2.1STC89C52单片机介绍STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。图2STC89C52接口电路P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写"1"时,引脚用作高阻抗输入。P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入〔P1.0/T2和时器/计数器2的触发输入〔P1.1/T2EX,具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能P1.0T2〔定时器/计数器T2的外部计数输入,时钟输出P1.1T2EX〔定时器/计数器T2的捕捉/重载触发信号和方向控制P1.5MOSI〔在线系统编程用P1.6MISO〔在线系统编程用P1.7SCK〔在线系统编程用P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。在访问外部程序存储器或用16位地址读取外部数据存储器〔例如执行MOVXDPTR时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址〔如MOVXRI访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流〔IIL。P3口亦作为STC89C52特殊功能〔第二功能使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。端口引脚第二功能P3.0RXD<串行输入口>P3.1TXD<串行输出口>P3.2INTO<外中断0>P3.3INT1<外中断1>P3.4TO<定时/计数器0>P3.5T1<定时/计数器1>P3.6WR<外部数据存储器写选通>P3.7RD<外部数据存储器读选通>此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。2.2.2时钟电路单片机引脚18和引脚19外接晶振及电容,STC89C52芯片的工作频率可在2~33MHz范围之间选,单片机工作频率取决于晶振XT的频率,通常选用11.0592MHz晶振。两个小电容通常取值30pF,以保证振荡器电路的稳定性及快速性。图3单片机时钟电路2.2.3复位电路一般若在引脚RST上保持24个工作主频周期的高电平,单片机就可以完成复位,但为了保证系统可靠地复位,复位电路应使引脚RST保持10ms以上的高电平。如图复位电路带有上电自动复位功能,当电路上电时,由于C3电容两端电压值不能突变,电源+5V会通过电容向RST提供充电电流,因此在RST引脚上产生一高电平,使单片机进入复位状态。随着电容C3充电,它两端电压上升使得RST电位下降,最终使单片机退出复位状态。正常运行时,可按复位按钮对单片机复位。图4单片机复位电路2.31602液晶模块1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高〔对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平<1>时进行读操作,低电平<0>时进行写操作。第6脚:E<或EN>端为使能<enable>端。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。主要参数及RAM地址映射图如图5和图6所示。显示内容16×2个字符芯片工作电压4.5~5.5工作电流2.0MA〔5.0V模块最佳工作电压5.0V字符尺寸2.95×4.35〔WXHmm图5控制器内部带有80*8〔80字节的RAM缓冲区。图62.4时钟芯片DS1302DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端<双向>,SCLK始终是输入端。图7时钟芯片DS1302的引脚图其中:X1、X2:32.768KHz晶振接入引脚。GND:地。RST:复位引脚,低电平有效,操作时高电平。I/O:数据输入/输出引脚,具有三态功能。SCLK:串行时钟输入引脚。Vcc1:工作电源引脚。Vcc2:备用电源引脚。图8时钟芯片DS1302的内部结构DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置"0",接着把RST端置"1",最后才给予SCLK脉冲;DS1302中与时间、日期有关的寄存器共有12个,其中7个存放数据的格式为BCD码格式。第三部分系统软件的设计与实现3.1主程序主程序负责系统的初始化,数据由液晶显示器输出显示,同时检测按键是否按下,没有按键按下就进入DS1302中的时间来日期。主程序的流程图如图9所示:图9主程序流程图程序进入主函数,就对LCD1602进行初始化,显示初始化时间,然后进入WHILE循环,判断是否有按键按下,若有则进入调节模式,时间停止运行,可以通过按键对时间进行效对,若没有键按下,那么时间继续运行,时刻对DS1302的有关时间的寄存器进行读操作,将时间显示在LCD上。3.2简易万年历电路仿真3.2.1Protues仿真软件介绍Proteus是一种功能强大的电子设计自动化软件,提供智能原理图设计系统、SPICE模拟电路、数字电路及MCU器件混合仿真系统和PCB设计系统功能。其不仅可以仿真传统的电路分析实验、模拟电子线路实验、数字电路实验等,而且可以仿真嵌入式系统的实验,其最大的特色在于可以提供嵌入式系统〔单片机应用系统、ARM应用系统的仿真实验,这也是其它任何仿真软件无力所及的。例如,其支持单片机和周边设备,可以仿真51系列、8086、AVR、PIC、Motorola的68系列等常用的MCU,并提供周边设备的仿真,例如373、led、示波器等。Proteus提供了大量的元件库,有RAM、ROM、键盘、马达、LED、LCD、AD/DA、部分SPI器件、部分IIC器件等。在编译方面,它也支持Keil和MPLAB等多种编译器。3.2.2仿真电路图单片机模拟的简易万年历仿真图如下:图10系统仿真电路图在LCD液晶上显示秒、分、时、星期、日、月、年如图10单片机的P1.0~P1.7对应于液晶显示器的D0~D7;四个按键对应于单片机的P2.1~P2.4的作用分别是:从秒开始,P2.1对应的按键每按下一次,光标就移动一次;P2.2对应的按键每按下一次,则光标所在的数值加一;P2.3对应的按键每按下一次,光标所在的数值减一;P2.4对应的按键按下,液晶显示器上的时间恢复程序中设定的初值。第四部分安装调试4.1系统软、硬件调试判断单片机芯片及时钟系统是否正常工作有一个简单的办法,就是用万用表测量单片机晶振引脚〔18、19脚的对地电压,以正常工作的单片机用数字万用表测量为例:18脚对地约2.24V,19脚对地约2.09V。对于怀疑是复位电路故障而不能正常工作的单片机也可以采用模拟复位的方法来判断,单片机正常工作时第9脚对地电压为零,可以用导线短时间和+5V连接一下,模拟一下上电复位,如果单片机能正常工作了,说明这个复位电路有问题。把焊接好的LCD液晶显示器的显示电路,用线引出接口连接至单片机的I/O口。实物连接如图11、图12所示。图11图124.1.1调试步骤1、按图连接好线路,为了确保液晶显示器能够对应显示,实验时,对P1口的接线做了调整。P1口接液晶显示器的D0~D7,P2.1~P2.4接四个按键,还有一个按键接单片机的复位键RST。2、从主函数单元开始连续运行,观察液晶显示器的显示情况,如果有偏差,则单步运行或断点运行,进行调试,直至满足设计要求。3、调试完显示后,从主函数开始连续运行,观察液晶显示器显示的是否正常,如果不正常,则运用单步运行或断点运行进行分析和调试,直至满足要求。4、整体运行,观察时间显示是否都符合要求,如果不符合,则再调试。直至满足要求。5、时间显示满足要求后,通过调节四个按键来设定时间;通过调节万能板上的可变电阻器来调节液晶显示器的亮度;4.1.2故障及处理〔1液晶显示器1602出现乱码处理方法:在时钟芯片1302的I/0上加一个10K的电阻。〔2液晶显示器上显示的时间不清楚处理方法:调节变阻器。〔3按键不灵处理方法:消抖,在程序的按键子程序处加延时程序。课程设计总结通过近一个月的课程设计,我感触颇深,对抽象的理论有了更深刻的认识。使我加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。功能上基本达标:时钟的显示,调时功能。时钟显示功能,精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷。硬件设施基本合乎要求,软件设计可以配合硬件实现其功能。这次课程设计还使我认识到了,电路设计需要耐心,需要一种整体的思维,而且遇到点问题是很正常的,关键是要学会分析问题,解决问题,不断积累经验。技术在不断进步,机械式时钟已经被淘汰,取而代之的是具有高度准确性和直观性且无机械装置,具有更长的使用寿命等优点的电子时钟。电子时钟更具人性化,更能提高人们的生活质量,更受人们欢迎。机械时代已经远去,电子时代已经到来。做为新时代的我们,更应该提高自身能力,适应新时代的发展。知识来自实践,多从生活中探寻所需要的。从这次的论文设计中,我真正的体会到,知识的重要性,特别是要理论联系实际,把我们所学的理论知识运用到实际生活当中,要用知识改变一切。参考文献[1]张迎新.单片机初级教程——单片机基础[M].北京:北京航空航天大学出版社,2006,08.[2]周兴华.手把手教你学单片机C语言程序设计[M].北京:北京航空航天大学出版社,2007,10.[3]张毅刚,彭喜元,董继承.单片机原理及应用[M].北京:高等教育出版社,2009,11.[4]余锡存,曹国华.单片机原理及接口技术[M].XX:XX电子科技大学出版社,2000,7.[5]王晖,薛永存.基于MCS-51单片机的复位电路抗干扰分析与设计[J].现代电子技术,2006,<08>.[6]侯坤,徐志永.MCS—51控制的LED显示系统[J].科技情报开发与经济,2006,<14>.[7]黎晖,魏光辉,汤小慷.单片机复位电路的可靠性与抗干扰分析[J].兵工自动化,2007,<02>.[8]史艳琼,杨国诗.常见的几种单片机复位电路分析[J].XX师范学院学报,2004,<03>.[9]皇祯平.微机控制系统的抗干扰技术应用[J].电脑与信息技术,2000,<05>.[10]库志强,张锡兵,杨扬.基于单片机的温湿度控制系统[J].机电信息,2006,<12>.[11]包国彬,张建民,刘嬴.单片机复位电路的设计与分析[J].光电技术应用,2005,<03>.原程序#include<reg51.h> #defineucharunsignedchar #defineuintunsignedint sbitlcden=P3^6; sbitlcdrs=P3^5; sbitanj1=P2^1; sbitanj2=P2^2; sbitanj3=P2^3;uintcount,anxia,xq,ri,yue,nian,nian1,nian2,i,a,miao,shi,fen;ucharcodetable[]="2011-02-011"; //初始化液晶显示ucharcodetable1[]="00:00:00";ucharcodeyue1[]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年月的天数ucharcodeyue2[]={31,29,31,30,31,30,31,31,30,31,30,31}; //润年月的天数 voiddelay<uintz> //延时函数 { uintx,y; for<x=0;x<z;x++> { for<y=0;y<121;y++> {;}; }; } voidwrite_com<uintcom> //写命令函数 { lcdrs=0; P1=com; delay<5>; lcden=1; delay<5>; lcden=0; } voidwrite_data<uintdate>//写数据函数 { lcdrs=1; P1=date; delay<5>; lcden=1; delay<5>; lcden=0; } voidinit<> //初始化 { lcden=0; write_com<0x38>; //8位数据转移双行显示 write_com<0x0c>; //显示屏开光标不出现不闪 write_com<0x06>; //光标右移一格,AC加1,字符全部不动 write_com<0x01>; //清屏 for<a=0;a<16;a++>//显示数组table { write_data<table[a]>; delay<1>; }; write_com<0x80+0x40>;//写地址液晶第2行首位 for<a=0;a<11;a++> //显示数组table1 { write_data<table1[a]>; delay<1>; }; TMOD=0x01; //工作方式1 选择定时器 TH0=<65536-50000>/256; //设置计数初值 TL0=<65536-50000>%256; EA=1; //CPU开中断 ET0=1; //T/C0开中断 TR0=1; //T/C0 启动 } voidwrite_sfm<uintadd,uintdate> //写时分秒 { uintshi,ge; shi=date/10; ge=date%10; write_com<0x80+0x40+add>; write_data<0x30+shi>; write_data<0x30+ge>; } voidwrite_xq<uintxqj> //写星期 { ucharxxqj; xxqj=xqj%10; write_com<0x80+13>; write_data<0x30+xxqj>; } voidwrite_yri<uintadd,uintdate> //写月日 { uintshi,ge; shi=date/10; ge=date%10; write_com<0x80+add>; write_data<0x30+shi>; write_data<0x30+ge>; } voidwrite_nian<uintadd,uintdate> //写年 { uintqian,bai,shi,ge;qian=date/1000; bai=<date/100>%10; shi=<date/10>%10; ge=date%10; write_com<0x80+add>; write_data<0x30+qian>; write_data<0x30+bai>; write_data<0x30+shi>; write_data<0x30+ge>; } voidanjian<> //按键判断{ if<anj1==0> { delay<100>;if<anj1==0>{anxia++; if<anxia==1>{ while<!anj1>; TR0=0; //停止计数 write_com<0x0f>;//显示开光标现并闪 write_com<0x80+0x40+10>;//光标位置秒钟 } if<anxia==2>{ while<!anj1>; write_com<0x80+0x40+7>;//光标位置 } if<anxia==3>{ while<!anj1>; write_com<0x80+0x40+4>;//光标位置 } if<anxia==4> { while<!anj1> write_com<0x80+13>; } if<anxia==5> { while<!anj1>; write_com<0x80+10>; } if<anxia==6> { while<!anj1>; write_com<0x80+7>; } if<anxia==7> { while<!anj1>; write_com<0x80+4>; } if<anxia==8> { while<!anj1>; write_com<0x80+2>; } if<anxia==9> { while<!anj1>; anxia=0; TR0=1; //启动计数 write_com<0x0c>; } } } if<anxia!=0> { if<anj2==0> { delay<100>; if<anj2==0> { while<!anj2>; if<anxia==1> {miao++;if<miao==60>miao=0;write_sfm<9,miao>;write_com<0x80+0x40+10>;} if<anxia==2> {fen++;if<fen==60>fen=0;write_sfm<6,fen>;write_com<0x80+0x40+7>;} if<anxia==3> {shi++;if<shi==24>shi=0;write_sfm<3,shi>;write_com<0x80+0x40+4>;} if<anxia==4> {xq++;if<xq==8>xq=1;write_xq<xq>;write_com<0x80+13>;} if<anxia==5> {ri++;if<ri==32>ri=1;write_yri<9,ri>;write_com<0x80+10>;} if<anxia==6> {yue++;if<yue==13>yue=1;write_yri<6,yue>;write_com<0x80+7>;} if<anxia==7> {nian1++;if<nian1==100>nian1=0;write_yri<3,nian1>;write_com<0x80+4>;} if<anxia==8> {nian2++;if<nian2==100>nian2=0;write_yri<1,nian2>;write_com<0x80+2>;} } } } if<anxia!=0> { if<anj3==0> { delay<100>; if<anj3==0> {while<!anj3>; if<anxia==1> {if<miao==0>miao=60;miao--;write_sfm<9,miao>;write_com<0x80+0x40+10>;} if<anxia==2> {if<fen==0>fen=60;fen--;write_sfm<6,fen>;write_com<0x80+0x40+7>;} if<anxia==3> {if<shi==0>shi=24;shi--;write_sfm<3,shi>;write_com<0x80+0x40+4>;} if<anxia==4> {if<xq==0>xq=8;xq--;write_xq<xq>;write_com<0x80+13>;} if<anxia==5> {;if<ri==0>ri=31;ri--;write_yri<9,ri>;write_com<0x80+10>;} if<anxia==6> {if<yue==0>yue=12;yue--;write_yri<6,yue>;write_com<0x80+7>;} if<anxia==7> {if<nian1==0>nian1=100;nian1--;write_yri<3,nian1>;write_com<0x80+4>;} if<anx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 花艺作品的市场定位技巧试题及答案
- 研究心得2024年项目管理专业人士资格考试试题及答案
- 2024年微生物检验师各科目试题及答案
- 2024年微生物安全监管问题试题及答案
- 项目管理数据信息试题及答案
- 2024年花艺师考试的临场应变能力试题及答案
- 2025年投资组合管理试题及答案
- 2024年行政管理师考试经验积累的试题及答案
- 2025年企业财务报告分析试题及答案
- 2025年国际金融理财师考试应对策略试题及答案
- GB/T 19413-2024数据中心和通信机房用空气调节机组
- 工业自动化设备维护保养操作手册
- 与信仰对话 课件-2024年入团积极分子培训
- 2024年保安员业务知识考试复习题库及答案(共1000题)
- 公路水泥混凝土路面施工技术规范(JTGF30-2024)
- 2024《整治形式主义为基层减负若干规定》全文课件
- 海关大数据云平台项目规划设计方案
- 10S505 柔性接口给水管道支墩
- 最完整上海初中数学知识点
- 网课智慧树知道《老年医学概论(浙江大学)》章节测试答案
- 餐饮管理风险分析及对策建议
评论
0/150
提交评论