您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子钟课程设计报告(DS1302-LCD1602-AT89C52)
1西安邮电大学通信与信息工程学院课程设计实验报告专业班级:学生姓名:学号(班内序号):年月日——————————————————————————装订线—————————————————————————————————报告份数:1份实验总成绩:2成绩鉴定表学生姓名班级/学号进行时间成绩鉴定学习内容(20分)与教学任务计划结合程度(10分)与专业培养结合程度(6分)其它(4分)学习态度评价(20分)实践能力(10分)学习态度(6分)学习纪律(4分)报告鉴定(60分)报告内容与实践过程紧密结合(15分)报告内容与教学计划内容紧密结合(15分)报告质量(主题、结构、观点、逻辑、资料、字数30分)评阅教师姓名职称讲师成绩评语评阅教师签字年月日3一、设计任务和目的1.用单片机设计基于STC89C52,DS1302,LCD1602的电子钟,显示时间和日期2.具有时间和日期的校准,记忆功能3.搭建仿真电路,模拟要实现的功能4.焊接单片机实物5.熟练掌握相关软件的使用方法,以及各个器件的基本工作原理6.编写程序,下载并调试,实现要求的功能二、设计思路和方案电路整体上分为控制和显示部分,以单片机最小系统为核心电路,控制LCD显示,具体的显示内容和方式由软件来完成;由于有时钟和日期的调节功能需要校准电路和基本的复位电路,复位电路采用按键复位,调节键、加1键、减1键,共四键,计时功能由DS1302完成,显示功能则由LCD1602液晶完成三、基本设计原理该电子时钟是利用单片机内部的定时器\计数器来实现的,它的处理过程如下:首先设定单片机内部的一个定时器\计数器工作于定时方式,对机器周期计数形成基准时间,然后用另一个定时器\计数器或软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。然后通过LCD1602液晶4把它们的内容在相应位置显示出来即可。译码方式可分为软件译码和硬件译码,软件译码通过译码程序查得显示信息的字段码;硬件译码通过硬件译码器得到显示信息的字段码,实际中通常采用软件译码。在具体处理时,定时器计数器采用中断方式工作,对时钟的形成在中断服务程序中实现。在主程序中只需对定时器计数器初始化、调用显示子程序和控制子程序。另外,为了使用方便,设计了简单的按键,可以通过按键实现时、分和日期的调整,这样在主程序中就加入了键盘设置子程序。由于使用了时间记忆芯片DS1302故断电后下次通电时间能够保持不变,更加的合理人性化。四、设计方案原理与设计特点分析1、电子钟总的设计框图:DS1302时钟采集模块STC89C52CPU控制模块按键处理模块LCD显示模块复位电路模块52、总原理图各个模块电路原理分析:3、DS1302时钟采集模块:首先DS1302是DALLAS公司推出的涓流充电时钟芯片。内含6有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作。DS1302芯片广脚介绍:X1、X2为32.768KHz晶振管脚。GND为地。RST复位脚。I/O数据输入/输出引脚。SCLK串行时钟。Vcc1,Vcc2电源供电管脚。DS1302_SCLK接P1^1;实时时钟时钟线引脚DS1302_IO接P1^0;实时时钟数据线引脚DS1302_RST接P1^2;实时时钟复位线引脚4、按键处理模块:其中下按键为模式调节键,上按键为减1键,左按键为加1键,与单片机连线如下:加1键连接P3^1;减1键连接P3^2;模式调节键连接P3^3;75、LCD显示模块:液晶显示器是一种功耗极低的被动式显示器件,1602广脚介绍:D0—D7数据传送引脚,VSS为接地线,VDD为电源线,VEE为LCD驱动电压调节,由此可以调节显示亮度。RS为寄存器选择信号,高电平选择数据寄存器,低电平选择指令寄存器。RW为读写控制信号,高电平读,低电平写。EN使能信号,读状态下高电平有效,写状态下下降沿有效。RS连接P2^0;寄存器选择信号RW连接P2^1;读写控制信号线EN连接P2^2;使能信号线86、protues仿真结果:五、设计结果性能分析该设计电路系统较大,电路只要一出有错误就会对检测造成很大的不便,应该注意元器件的正确放置与安装及布线的合理以便于电路的检修和维护,为了减少复杂度,可以使用Protues进行仿真。设计的功能虽然比较简单单程序还是较为复杂的,中间遇到了一些问题。从性能来看,LCD能够正确的显示DS1302芯片上面的时间和日期;其次,可以通过三个按键键对电子钟进行时间和日期的调整,并且具有时间记忆功能。总之设计所要求的性能基本得到了实现。六、实习心得体会体会9通过本次单片机课程设计,使我所学的知识能够得到实际的应用,过程中也发现自身所学的知识存在许多的不足和问题,当然同时也学到了不少宝贵的知识,提高了自己的动手实践能力。在整个设计过程中从设计方案确定,到具体的电路仿真,最后到总体电路的连接构建以及程序的编写烧制,特别是程序的编写要求对LCD1602的初始化操作,指令和数据的操作都非常熟悉。通过这次对数字钟的设计设计方法。在这次实习中遇到了许多问题,但通过向老师同学请教都得到了解决。通过这次课程设计,我知道了做任何事都要有一颗平常心,不要想着走捷径,要一步一个脚印才能取得最后成功,在此过程中更要注重自主学习,发挥自己的主管能动性。总之这次课程设计试一次很好的锻炼,让我有了全方位的提高,受益匪浅,为我以后的工作学习打下了很好的基础,而且积累了丰富的经验。七、参考文献[1]张义和.例说51单片机[M].北京:人民邮电出版社,2010年[2]阎石编著数字电子技术基础(第五版)北京高等教育出版社]2006.1~55010[3]蔡明文冯先成主编单片机课程设计华中科技大学出版社2007.3[4]陈明萤编著8051单片机课程设计实训教材清华大学出版社2004[5]康华光编著模拟电子技术基础(第五版)高等教育出版社2006[6]黄智伟编著全国大学生电子设计竞赛电路(第一版)航空航天大学出版社2006.36八、程序清单#includereg52.h#defineuintunsignedint#defineucharunsignedchar#definerstRST=0;#definenrstRST=1;voidinit();voidwrite_com(uchar);voidwrite_data(uchar);voiddelay(uint);voidwrite_sfm(uchar,uchar);voidkeyscan();voidwr_byte(uchardat)ucharcount,num,s1num;charshi,fen,miao;ucharcodetable[]=2012-11-30Fri;ucharcodetable1[]=00:00:00;sbitrw=P2^5;//内部拐角的设置sbitrd=P2^6;sbitlcde=P2^7;sbits1=P2^4;sbits2=P2^3;sbits3=P2^2;voidmain(){init();while(1){keyscan();if(count==20)//中断1秒{count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(0x04,shi);//显示小时}write_sfm(0x07,fen);//显示分钟}write_sfm(0x0a,miao);//显示秒}}}voidinit()//初始化函数{rw=0;//进入写操作write_com(0x38);//显示十六位液晶write_com(0x0c);11//打开十六位液晶不显示光标write_com(0x06);//写以为下一个数右移一位写write_com(0x01);//清屏write_com(0x80);//第一行写for(num=0;num15;num++){write_data(table[num]);//第一行写数据delay(5);}write_com(0x80+0x40);for(num=0;num12;num++)//第二行写数据{write_data(table1[num]);delay(5);}TMOD=0x01;//定时器0方式1工作TH0=(65536-50000)/256;//定时器数数1到50000TL0=(65536-50000)%256;EA=1;//打开总中断ET0=1;//打开T0中断TR0=1;//启动他T0中断}voidwrite_com(ucharcom){rd=0;//写指令lcde=0;//使能端拉低delay(5);P0=com;//输入地址就是命令lcde=1;//使能端拉高工作delay(5);//这五毫秒命令输入lcde=0;//使能端拉低停止工作delay(5);}voidwrite_data(uchardate){rd=1;//写数据lcde=0;//使能端拉低delay(5);P0=date;//输入数据就是你要在液晶上显示什么lcde=1;//使能端拉高开始输入数据delay(5);//五毫秒数据输入lcde=0;//拉低使能端停止工作delay(5);}voiddelay(uintz)//延迟函数{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voidtime0()interrupt1//中断函数{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}voidwrite_sfm(ucharadd,uchardate)//时分秒的显示{ucharshi,ge;12shi=date/10;//时分秒最多只有两位分解出来ge=date%10;write_com(0x80+0x40+add);//这写的是十位的地址因为十位的数据写完光标自动到下一位刚好为个位write_data(0x30+shi);//必须先写十位个位自动跳到下一位write_data(0x30+ge);//写个位}voidkeyscan(){if(s1==0)//判断s1是否按下{delay(5);//按键消抖if(s1==0)//按键消抖后判断是否按下{s1num++;while(!s1);//按下去不变手取了变化if(s1num==1)//秒下光标{TR0=0;//关闭中断write_com(0x80+0x40+0x0b);//光标取位write_com(0x0f);//打开光标}if(s1num==2)//分下光标{write_com(0x80+0x40+0x08);//光标取位}if(s1num==3)//时取位{write_com(0x80+0x40+0x05);//光标取位}if(s1num==4){s1num=0;write_com(0x0c);//关闭光标TR0=1;//打开光标}}}if(s1num!=0)//在有光标的前提下用按键2来给时间++{if(s2==0)//2按键是否按下去{delay(5);//按键去抖if(s2==0)//去抖后是否还有按键{while(!s2);//松手后数字变化按下去不变化if(s1num==1)//秒的条件下控制秒的++{miao++;if(miao==60)miao=0;write_sfm(0x0a,miao);//写秒的数据并且取秒的位置write_com(0x80+0x40+0x0b);//每扫描一次必须把数字拉回秒的位置要不数字一直往后推移13}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(0x07,fen);write_com(0x80+0x40+0x08);}if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(0x04,shi
本文标题:电子钟课程设计报告(DS1302-LCD1602-AT89C52)
链接地址:https://www.777doc.com/doc-5035836 .html