您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 51单片机时钟显示+温度显示
湘南学院物电系学院:电气工程学院题目:单片机LCD时钟显示和温度测量学生姓名:专业班级:指导老师:教研室主任:2012年6月29日一、概述:本次设计的LCD时钟显示和温度测量系统是由中央控制器、温度检测器、时钟系统、显示器及键盘部分组成。控制器采用单片机STC89C51RC,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶1602作为显示器,用蜂鸣器构成闹铃模块。单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器1602显示;键盘是用来调整时间的。二、方案设计及方案论证1.时钟显示和温度测量的总体设计思路按照系统的设计功能要求,本时钟显示和温度测量系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的调整及显示。获得时钟显示和温度测量数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。2.时钟显示和温度测量系统方案论证2.1时钟系统方案选择方案1:通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;方案2:用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。虽然用软件实现时钟硬件线路简单,但是程序运行的每一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。用专用时钟芯片硬件成本相对较高,但它的精度很高,软件编程很简单。综上所述,选择方案2。本次设计采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。它采用主电源和备用电源双电源供电。它的工作电压范围2.0~5.5V,在2.2V时,小于300nA。它内部含有31个字节的静态RAM,可提供用户访问。DS1302可以对年、月、日、周日、时、分、秒进行计时,可以达到我们设计的基本的要求。内部的寄存器为我们调时,闹钟定时提供了寄存空间。备用用电源也实现了当系统断电后,时钟仍然可以保持。而且它是串行接口,与单片机通信所需要的接口少。2.2显示系统的方案比较方案1:用数码管或LED显示。方案2:用液晶1602显示。方案3:用液晶12864显示。时钟和温度的显示可以用数码管或LED,而且价格便宜。但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用12864显示略想复杂,用1602液晶显示可以完全满足本次设计的数据显示要求。2.3温度系统方案选择方案1:用热敏电阻等测温元件测出电压,再转换成对应的温度。需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。方案2:用DS18B20直接测温。DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。经比较,我们选择方案2。温度实现只能通过外部的温度传感器来实现。经上网查阅,DS18b20体积小,只有3只脚,电路接法简单。精度为0.5°C,也符合我们设计的要求。DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。2.4键盘控制方案选择方案1:购买集成键盘,采用矩阵形式连接。方案2:购买单个复位开关做成键盘。虽然集成键盘美观,与单片机的接口少,但是它的成本比较高。单片机的IO口对于我们的设计绰绰有余。通常我们选用价格便宜单个复位开关做成键盘。3.时钟显示和温度测量系统总体设计初步确定设计系统由单片机主控模块、时钟模块、测温模块、闹铃模块、显示模块、键盘接口模块共6个模块组成,电路系统框图如下图所示。图1:电路系统框图三、硬件电路单元设计1、单片机最小系统设计1.1复位电路:复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。如下图所示:图2:复位电路1.2晶振电路晶振电路选取条件:晶振12M,电容20pF到30pF,本电路选取20pF。晶振电路原理如下图:主控器件STC89C51DS18B20温度采集系统DS1320时间采集系统1602显示系统蜂鸣器闹铃系统键盘控制系统图3:晶振电路2、时钟系统设计DS1302时钟电路晶振选用3.2678KHZ,原理图如下:图4:基于ds1302时钟系统设计电路3、温度系统设计DS18B20温度传感DQ端接单片机P1.3口,电路原理图如下:图5:基于DS18b20温度系统设计电路4、液晶显示系统设计1602液晶显示电路由1K电阻和10K的精密电阻组成,控制端接P1.0、P1.1、P1.2口,数据端接P2口,电路图如下:图6:液晶1602显示电路5、蜂鸣器系统设计蜂鸣器闹铃电路由蜂鸣器跟1K限流电阻组成,电路图如下:图7:蜂鸣器电路6、电源模块本系统采用USB供电,用发光二极管显示通电状况,电源电源电路如下:图8:电源电路7、时间调节模块本系统采用3个按键调节时间。S1是菜单键,选择要调节的位;S2按一下表示加一;S3按一下表示减一。电路如下:图9:时钟调节电路四、软件调试1、程序流程图如下:图10:程序流程图2、程序见附录五、硬件调试1、原理图如下:图11:总原理图2、PCB图如下:图12:PCB图其中红色部分为跳线;3、实物测试板子制作完成后上电测试发现电源灯没有显示,用万用表测量之后发现精密电阻接线错误,导致VCC与GND直接连通。修正之后发现电源指示灯还是没有亮,测量USB两端电压为-4.88V,卸掉USB口,插上排针用杜邦线连接单片机的VCC和GND之后,电源灯能够点亮,液晶能够驱动,但是亮度不够。测量液晶两端的电压发现只有2.5V,用导线将液晶背光的VCC直接接上电源VCC后,液晶亮度正常。将程序下载之后经过几次调试和修改,最终实现了想要达到的效果。六、总结与体会在开始本次课程设计前花费了十多天的时间认真学习了单片机,通过书本和视频的学习,对单片机有了进一步的掌握并学会C51编程的一些方法。这对于完成本次课程设计提供了很大的帮助。从这次的课程设计中,我真真正正的意识到,在写程序时,逻辑思维要清晰,要有耐心。同时要巧妙的利用C语言的可移植性,这对写程序有很大的帮助。参考文献:1.郭天祥单片机学习板配套资料2.《51单片机C语言教程》郭天祥主编电子工业出版社3.《C语言程序设计》尹业安,白燕主编国防科技大学出版社4.《单片机原理与应用及C51程序设计》谢维成杨加国主编清华大学出版社程序如下:#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint#defineLCDIOP2sbitDQ=P1^3;//ds18b20与单片机连接口sbitrs=P1^2;sbitrd=P1^1;sbitlcden=P1^0;sbitacc0=ACC^0;//移位时的第0位sbitacc7=ACC^7;//移位时用的第7位ucharsecond,minute,hour,day,month,year,week,count=0;ucharReadValue,num,time;uinttvalue;//温度值uchartflag;ucharcodetable[]={2012-06-29FIR};ucharcodetable1[]={08:45:00000.0C};ucharcodetable2[]=FRISATSUNMONTUEWESTUR;uchardatadisdata[5];sbitDATA=P0^1;//时钟数据接口sbitRST=P0^2;sbitSCLK=P0^0;sbitmenu=P3^5;//菜单sbitadd=P3^6;//加一sbitdec=P3^7;//减一voiddelay(uintz){uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voiddelay1(uintz){for(;z0;z--);}voidwrite_com(ucharcom)//lcd写命令指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲{rs=0;rd=0;lcden=0;P2=com;delay(5);lcden=1;delay(5);lcden=0;}voidwrite_date(uchardate)//lcd写数据指令:RS=H,RW=L,D0~D7=数据,E=高脉冲{rs=1;rd=0;lcden=0;P2=date;delay(5);lcden=1;delay(5);lcden=0;}voidinit(){ucharnum;lcden=0;write_com(0x38);//显示模式设置,默认为0x38,不用变。write_com(0x0c);//显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪write_com(0x06);//设置光标状态默认0x06,为读一个字符光标加1.write_com(0x01);//显示清屏,将上次的内容清除,默认为0x01.write_com(0x80);//设置初始化数据指针,是在读指令的操作里进行的delay(5);write_com(0x80);//初始化显示时间(tabletable1中的内容)for(num=0;num15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num15;num++){write_date(table1[num]);delay(5);}}voidWrite1302(uchardat)//写8bit数据{uchari;SCLK=0;//拉低SCLK,为脉冲上升沿写入数据做好准备delay1(2);//稍微等待,使硬件做好准备for(i=0;i8;i++)//连续写8个二进制位数据{DATA=dat&0x01;//取出dat的第0位数据写入1302delay(2);//稍微等待,使硬件做好准备SCLK=1;//上升沿写入数据delay1(2);//稍微等待,使硬件做好准备SCLK=0;//重新拉低SCLK,形成脉冲dat=1;//将dat的各数据位右移1位,准备写入下一个数据位}}voidWriteSet1302(ucharCmd,uchardat)//向cmd相应地址中写入一个字节的数据{RST=0;//禁止数据传递SCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输delay1(2);//稍微等待,使硬件做好准备Write1302(Cmd);//写入命令字Write1302(dat);//写数据SCLK=1;//将时钟电平置于已知状态RST=0;//禁止数据传递}ucharRead1302(void)//读8bit数据{uchari,dat;delay(2);//稍微等待,使硬件做好准备for(i=0;i8;i++)//连续读8个二进制位数据{dat=1;//将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA==1)//如果读出的数据是1dat|=0x80;//将1取出,写在dat的最高位SCLK=1;//将SCLK置于高电平,为下降沿读出delay1(2);//稍微等待SCLK=0;//拉低SCLK,形成脉冲下降沿delay1(2);//稍微等待}returndat;//将读出的数据返回}ucharReadSet1302(ucharCmd)//从cmd相应地址中读一个字节的数据{uchardat;RST=0;//拉低RSTSCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输Write1302(Cmd);//写入命令字dat=Read1302();
本文标题:51单片机时钟显示+温度显示
链接地址:https://www.777doc.com/doc-5017339 .html