基于的模拟电子钟单片机课程设计样本_第1页
基于的模拟电子钟单片机课程设计样本_第2页
基于的模拟电子钟单片机课程设计样本_第3页
基于的模拟电子钟单片机课程设计样本_第4页
基于的模拟电子钟单片机课程设计样本_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

《单片机技术》课程设计阐明书基于12864模仿电子钟摘要单片机应用技术飞速发展,纵观咱们当前生活各个领域,从导弹导航装置,到飞机上各种仪表控制,从计算机网络通讯与数据传播,到工业自动化过程实时控制和数据解决,以及咱们生活中广泛使用各种智能IC卡、电子宠物等,单片机都起到了举足轻重作用。因此单片机技术也日趋成熟。单片机是集CPU,RAM,ROM,定期,计数和各种接口于一体微控制器。它体积小,成本低,功能强。而52系列单片机是各单片机中最为典型和最有代表性一种。本次单片机课程设计是通过运用52单片机来完毕对电子钟设计,且由12864液晶显示屏来显示时钟信息,并带有DS18B20输出实时温度显示。本次课程设计达到了学习、理解单片机有关指令在各方面应用,以及初步理解开发软、硬件知识。核心词:单片机;12864液晶屏;DS18B20;实时温度ABSTRACTMCUapplicationtechnologyrapiddevelopmentthroughoutallareasoflifewearenow,themissilefromthenavigationdevicetocontrolavarietyofinstrumentsontheplane,networkcommunicationsanddatatransferfromthecomputertothereal-timecontrolanddataprocessingindustrialautomationprocess,andweliveinavarietyofwidelyusedsmartICcards,electronicpets,MCUhaveplayedapivotalrole.Somicrocontrollertechnologymatures.MCUisasetofCPU,RAM,ROM,timing,counting,andmultipleinterfacesinonemicrocontroller.Itssmallsize,lowcost,highfunctionality.The52Seriessingle-chipmicrocontrollerisallthemosttypicalandmostrepresentativeone.Thecourseisdesignedbytheuseofsingle-chipmicrocontroller52tocompletetheelectronicclockdesign,andthe12864LCDscreentodisplaytheclockinformationandreal-timetemperaturedisplaywithDS18B20output.ThecurriculumdesignedtomeetthelearningandunderstandingofMCU-relatedinstructioninallaspectsoftheapplication,aswellasapreliminaryunderstandingofthedevelopmentofsoftwareandhardwareknowledge.KeywordsMCU;12864LCDscreen;DS18B20;real-timetemperature目录第一章绪论 -1-1.112864液晶显示概述 -1-1.212864特点 -1-1.312864液晶工作原理 -1-1.4基于单片机控制液晶显示系统设计任务摘要 -2-第2章总体方案论证与设计 -3-2.1方案设计 -3-2.2方案选取 -3-2.3总体硬件构成框图 -4-第3章系统硬件设计 -5-3.1主芯片模块 -5-3.2晶振电路 -6-3.3复位电路模块 -6-3.4控制按钮模块 -7-3.5DS18B20温度采集电路 -7-3.6显示电路模块 -8-第4章系统软件设计 -9-4.1主程序设计 -9-4.2文字显示 -9-第5章系统调试与测试成果分析 -10-5.1使用仪器仪表 -10-5.2系统调试 -10-5.2.1硬件调试 -10-5.2.2软件调试 -10-5.3测试成果 -10-第六章总结 -11-参照文献 -12-附录一·程序 -13-附录二·电路原理图 -28-附录三·实物电路板及程序运营图 -29-第一章绪论随着社会发展,趣来趣多地方需要应用显示功能,各种数字显示仪器中显示、广告牌、数码产品等,老式数码管显示已经远远不能满足各行各业需求。基于单片机LCD显示是一种用单片机来控制一种显示系统,它不但能显示种各数字、字母、还能显示各种字体中文以及某些简朴图象,使用起来极为以便,只要通过对单片机写入一定程序来控制LCD显示即可完毕,依照程序不同而产生不同不效果以满足各种不同需求。1.112864液晶显示概述液晶(LiquidCrystal),简称LC是一种高分子材料因其特殊物理、化学、光学特性而被广泛用于轻薄型显示技术上。液晶构成物质是一种有机化合物也就是以碳中心所构成化合物同步具备两种物质液晶是以分子间力量组合,它们特殊光学性质,又对电磁场敏感,极具实用价值。1.212864特点LCD由两块玻璃板构成,厚约1mm,其间由包具有液晶材料5μm均匀间隔隔开。由于液晶材料自身并不发光,因此在显示屏两边都设有作为光源灯管,而在液晶显示屏背面有一块背光板(或称匀光板)和反光膜,背光板是由荧光物质构成可以发射光线,其作用重要是提供均匀背景光源。背光板发出光线在穿过第一层偏振过滤层之后进入包括成千上万液晶液滴液晶层。液晶层中液滴都被包括在细小单元格构造中,一种或各种单元格构成屏幕上一种像素。在玻璃板与液晶材料之间是透明电极,电极分为行和列,在行与列交叉点上,通过变化电压而变化液晶旋光状态,液晶材料作用类似于一种个小光阀。在液晶材料周边是控制电路某些和驱动电路某些。当LCD中电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中光线进行有规则折射,然后通过第二层过滤层过滤在屏幕上显示出来。12864液晶具备功耗低、体积小、重量轻、超薄等许多其她显示屏无法比拟长处近几年来被广泛用于单片机控制只能仪器、仪表和低功耗电子产品中。1.312864液晶工作原理液晶显示屏中业态光电显示材料,运用液晶电光效应把电信号转换成数字符、图像等可见信号。如图1-1,液晶正常状况下,其分子排列很有秩序,显得清澈透明,一旦加上直流电场后,分子排列被打乱,一某些液晶变不透明,颜色加深因而能显示数字和图像。管脚一共18个。CS1左半屏片选端,CS2右半屏片选端;V0液晶显示驱动电压,通过一种电位器接到VCC;RS数据指令选取信号,H为数据,L为指令,也叫D/I;R/W读写选取信号,H为读,L为写,。E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E为H,DDRAM数据读到DB7-DB0。DB0-DB7数据传播端口。RST复位信号。-VOUT和V0为液晶显示驱动电压。12864是一种图形点阵液晶显示屏,它重要由行驱动器/列驱动器及128×64全点阵液晶显示屏构成。可完毕图形显示,也可以显示8×4个(16×16点阵)中文。图1-112864LCD液晶显示屏1.4基于单片机控制液晶显示系统设计任务摘要设计一款基于STC89C52RC单片机控制12864液晶显示图片和中文/数字系统。设计目本课题设计一方面是为了巩固对单片机课程学习加强练习并纯熟掌握proteus软件使用另一方面本课题规定将硬件和软件某些结合起来,以锻炼自己分析问题综合能力。第2章总体方案论证与设计本系统采用单片机AT89C51为LCD显示屏控制核心。下面简要简介方案选取与实现及总体硬件构成框图2.1方案设计对于此设计课题,由于规定是用128×64显示屏来显示中文,而中文及字符(如空格等)是需要显示代码。由此LCD显示时序图可知,在显示过程中还需要一定延时(不同型号,延时时间是不同)并且在显示前需将某些特定控制端置相应电平,例如说还所有输入之关需先把LCD总使能端打开,即置E端为高电平,然后应再输入指令代码,对其进行有关设立。因此还需要一种恰当延时子程序以及输入数据前准备程序。除了这些外,还应写一种初始化程序,用来对中断等某些程序所需要端口进行初始。对于开中断,应打开总中断EA以及相应低档中断EX0和EX1。再者就是两个中断程序,对于这两个中断程序比较简朴,只需对要执行有关控制所需要每件进行满足即可。最后就是主函数,它重要功能就是判断中断与否来临,来临了,然后判断是外部中断0还是外部中断1,然后依照是0还是1来执行相应程序,选取相应显示方式。2.2方案选取本方案选取STC89C52RC为核心控制元件,以128×64LCD为显示元件,设计制作了一种寻常生活中用到LCD显示系统。用STC89C52RC单片机通过写入相应程序,控制12864LCD显示屏显示出相应文字,P0.0~P0.7分别接128×64DB0~DB7数据端口P2.6接LCD读写使能端E,P2.5接LCD读写端口R/W,P2.4接数据命令选取口RS,XTAL1、XTAL2接震荡电路,外设三个按钮来控制显示时间调节,对于按钮工作方式可以是中端也可以是查询,在该方案中选取定期器0外部中断和定期器1外部中断,通过串行输入和串行输出实现控制,用单片机P2口低五位来作为LCD显示控制端,即控制LCD使能端,读写控制端,数据指令选取端及两个选屏端。RST接复位电路,EA接高电平,LCD上VO、RST接电源+5V,GND接地。本设计方案中另一种功能就是使用DS18B20对实时温度进行采集显示。用编译软件KeiluVision4编辑C源程序,通过编译连接生成十六进制文献,把生成十六进制文献下载到单片机中。2.3总体硬件构成框图单片机控制液晶显示屏系统总共可分为六个环节,分别是单片机控制系统、12864字符显示模块、控制按键电路模块、晶振电路模块、复位电路模块和DS18B20实时温度检测模块。通过这六个模块协调工作就可以完毕相应液晶屏控制和显示功能。这六个模块互相连接如图2-1:LCD12864STC89C52RC晶振电路LCD12864STC89C52RC晶振电路DS18B20DS18B20复位电路按键电路复位电路按键电路图2-1总体硬件构成框图第3章系统硬件设计本硬件电路重要由四大模块构成:主芯片模块;晶振和复位电路模块;控制接钮模块;显示电路模块。3.1主芯片模块XTAL1:接外部晶振和微调电容一端。在片内,它是振荡电路反相放大器输入端。在采用外部时钟时,该引脚输入外部时钟脉冲。XTAL2:接外部晶振和微调是容一端。要检查89C52振荡电路与否正常工作,可以用示波器查看XTAL2端与否有脉冲信号输出。RST:89C52复位信号输入引脚,高电平有效。当此输入端保持两个机器周期高电平时,就可以完毕复位操作。ALE:容许地址锁存信号端。当89C52上电正常工作后,ALE引脚不断向外输出正脉冲信号,此频率为振荡器频率1/6。CPU访问片外存储器时,ALE输出信号作为锁存低8位地址控制信号。PSEN:访问外部程序存储器选通信号,低电平有效。当89C51由片外程序存储器取指令时,每个机器周期两次PSEN有效。但在此期间内,每当访问外部数据存储器时,这两次有效PSEN信号将不浮现。EA:该引脚为低电平时,则读取外部程序代码来执行程序。P0、P1、P2、P3:8位并行输入输出口。每个端口都是8位准双向口,共占32只引脚。每一条都能独立地用作输入或输出。每个端口都涉及一种锁存器、一种输出驱器和输入缓冲器。作输出时,数据可以锁存;作输入时,数据可以缓冲。图如图3—1。图3-1STC89C52RC引脚图3.2晶振电路89C52芯片内部有一种高增益反相放大器,用于构成振荡器。如图3—2,反相放大器输入端为XTAL1,输出端为XTAL2,两个跨接石英晶体及两个电容就可以构成稳定自激振荡器。电容器普通取30pF左右,可以稳定频率并对振荡频率有微调作用XTAL1是片内振荡器反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振频率可以在1MHz-24MHz内选取。电容取30PF左右。一种晶体振荡器,接在单片机内部振荡电路上,两个电容是起振电容,频率越高,应当越小。.图3—2晶振电路3.3复位电路模块在振荡器运营时,有两个机器周期(24个振荡周期)以上高电平出当前此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0-P3口均置1引脚体现为高电平,程序计数器和特殊功能寄存器SFR所有清零。当复位脚由高电平变为低电平时,芯片为ROM00H处开始运营程序。如上图3-3所示复位电路,由于复位时高电平有效,当刚接上电源瞬间,电容C1两端相称于短路,即相称于给RESET引脚一种高电平,等充电结束时(这个时间很短暂),电容相称于断开,这时已经完毕了复位动作。普通分为手动复位和上电复位两种:一种是手动复位复位电路就是当按键按下去时候,即予以一种高电平,同样可以完毕复位动作。另一种是上电复位,可以理解成加上电源就复位了,至于其她复位固然尚有诸多,不同系统对复位精确性和可靠性规定不同样。图3-3复位电路3.4控制按钮模块本模块采用六个按钮进行控制,通过串行口输入输出连接,当S3按键按动一次后,方可进行对圆盘模仿时钟时针进行一格进位;当S2按键按动一次后,方可进行对圆盘模仿时钟分针进行一格进位;当S1按键按动一次后,方可进行对圆盘模仿时钟秒针进行一格进位;每按键一次,所连引脚浮现下降沿,此起定期器外部中断0或定期器外部中断1,当浮现定期器外部中断0或定期器外部中断1时,则产生一次加一现象,常规显示浮现,图如图3-4。图3-4按键控制电路3.5DS18B20温度采集电路DS18B20引脚功能:其中一脚GND电压地;二脚DQ单数据总线;三脚VDD电源电压。DS18B20温度检测与数字数据输出全集成于一种芯片之上,从而抗干扰力更强。其一种工作周期可分为两个某些,即温度检测和数据解决。DS18B20重要特性:全数字温度转换及输出;先进单总线数据通信;最高12位辨别率,精度可达土0.5摄氏度12位辨别率时最大工作周期为750毫秒;检测温度范畴为–55°C~+125°C(–67°F~+257°F);内置EEPROM,限温报警功能;64位光刻ROM,内置产品序列号,以便多机挂接;多样封装形式,适应不同硬件系统。图3-518B20与单片机连接3.6显示电路模块P0口提供指令和数据信号,由DB0到DB7输入,DB0到DB7为数据输入输出端和指令输入端。P2口低5位提供使能及某些控制信号。其中E为使能信号,高电平有效,当此引脚浮现高电平时,整个显示屏被使能,只有当显示屏使能时,其他此此脚才干工作。R/W为读写控制信号。当此引脚为高电平时,为读功能,为低电平时为写功能。在读时只可以读数据,而在写时既可以写数据也可以写指令。RS为数据命令选取端,当此引脚为高电平时,写入是数据,当此引脚为低电平时,写入是指令。CS1和CS2为片选信号,由于此显示屏显示屏被分为左右两块,分别由CS1和CS2来控制,当CS1为高电平,CS2为低电平时,就表达选取了左半屏,当CS1为低电平,CS2为高电平时,表达选取了右半屏。左右半屏在物理上是相近。图如3-6。图3—612864LCD液晶显示电路第4章系统软件设计4.1主程序设计LCD液晶显示屏进行初始化,由STC89C52RC控制液晶显示屏模块,写入程序,开始显示文字。其主程序流程如图4-1所示。开始开始首地址赋出首地址赋出初始化LCD初始化LCD写命令字写命令字时间通过LCD显示时间通过LCD显示调用延时调用延时回主函数回主函数结束结束图4-1主程序流程图4.2文字显示液晶显示驱动控制器12864,在液晶屏上横向8个点为1个字节数据,则每一种中文由16×16点阵字模构成。由于本次课程设计是采用带字库12864液晶屏进行制作,因此完全通过程序对中文直接进行输出显示。第5章系统调试与测试成果分析5.1使用仪器仪表万用表一块;逻辑分析仪一台;示波器一台。5.2系统调试5.2.1硬件调试电路调试过程中遇到问题和解决办法:(1).整个系统通电一秒后自动短路,检查所有线路无误。就对每一芯片逐个排查,最后发现是DS18B20在焊接时温度过高被烧毁了,导致整个电路短路。(2).液晶显示浮现问题,检查电路发现P0口没有加上拉电阻,液晶显示亮度不够,加上上拉电阻能正常显示。5.2.2软件调试显示子程序调试在调试显示子程序时,由于调用延时时间不够,液晶显示屏上显示不稳定,浮现闪烁现象,且闪烁频率不一致,通过多次调试,变化延时时间,最后数字能稳稳地显示在显示屏上。5.3测试成果本实验规定就是单片机驱动液晶显示屏显示相应中文和数字,并且可以实现时、分、秒调节,所写程序是对单片机上电屏幕随后显示“湖南工学院”字样开机画面。然后开始显示时间信息,程序对时间显示是在屏幕上分为左右两某些,屏幕左边是显示模仿圆盘时钟,时分秒针显示。右边某些上方是同步显示左边圆盘时钟所相应数字时间;而下方是显示当前DS18B20实时采集实时温度。并且可通过三个按钮完毕对时、分、秒设立,最后实验成果显示如附录成品效果图,达到了本课设规定和目,完毕良好。第六章总结STC89C52RC单片机是集CPU、RAM、ROM、定期、计数和各种接口于一体微控制器。它体积小、成本低、功能强、可以较好地实现智能控制。12864LCD是一种液晶显示屏,可以通过液晶和彩色过滤器过滤光源,在平面面板上显示简朴图像、汉子和数字等,相对于LED数码管或点阵而言,它占用空间小低功、耗低辐射、无闪烁、减少视觉疲劳、更加便于使用。这次课程设计通过对单片机及LCD结合使用。从而达到对软件及硬件电路学习、设计、开发、调试等能力。两者结合使用,大大提高了其应用广泛性及操作简朴灵性。本课程设计是以STC89C52RC单片机为控制核心,在12864LCD液晶显示屏显示时间。单片机控制液晶显示屏系统总共可分为六个环节,分别是单片机控制系统、12864字符显示模块、控制开关模块、晶振控制模块、复位电路模块和DS18B20温度采集模块。通过这六个模块协调工作就可以完毕相应液晶屏控制和显示功能。通过这次课程设计理解了12864液晶显示屏原理及构造,12864LCD带中文字库128X64是一种具备4位/8位并行、2线或3线串行各种接口方式,内部具有国标一级、二级简体中文字库点阵图形液晶显示模块,其显示辨别率为128×64,内置8192个16*16点中文,和128个16*8点ASCII字符集.运用该模块灵活接口方式和简朴、以便操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵中文。也可完毕图形显示。低电压低功耗是其又一明显特点。通过这一次课程设计,在这过程中我虽然走了些弯路,但是通过努力,最后完毕了任务。从中我学到了诸多,要认真仔细才干有成果。任何大问题,在一步一步细化之后,解决起来就轻松得多了。我相信只要付出了就会有收获。无论什么事情,只有当你专心去做了之后你才会发现它真实意义所在。我觉得这一次实习是非常故意义,不但提高了专业素养,还培养了咱们合伙精神。我要把握每一次学习机会,认真对待,为后来就业及更深层次发展添砖加瓦。参照文献[1]胡乾李.光斌.李玲.喻红.单片微型计算机原理与应用[M].华中科技大学出版社.1996.[2]焦丽鹃.李春旭.郭学良.液晶显示屏在人机交互系统中应用[J].信息技术,11期.[3]刘树中.孙书鹰.春平.单片机和液晶显示驱动器串行接口实现[J].微计算机信息.第1-2期LCD显示机理.[4]刘勇.数字电路[M].电子工业出版社,.[5]沈红卫.单片机应用系统设计实例与分析[M].北京:北京航空航天大学出版社.[6]李光飞.单片机课程设计实例指引,北京:北京航空航天大学出版社.[7]楼然苗,李光飞.51系列单片机设计实例[M].北京航空航天大学出版社,.[8]朱定华,戴汝平.单片微机原理与应用[M].清华大学出版社,.[9]胡汉才.单片机原理与接口技术[M].清华大学出版社,.[10]李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,.[11]侯玉宝等.基于protues51系列单片机设计与仿真[M].北京:电子工业出版社,.[12]朱清慧等.Protues教程——电子线路设计、制版与仿真[M].北京:清华大学出版社,.附录一·程序#include<reg51.h>#include<intrins.h>#include<stdlib.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedint#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};#definepi3.1415926/*************12864LCD引脚定义*************/#defineLCD_dataP0//数据口sbitLCD_RS=P2^4;//寄存器选取输入sbitLCD_RW=P2^5;//液晶读/写控制sbitLCD_EN=P2^6;//液晶使能控制sbitLCD_PSB=P2^1;//串/并方式控制sbitLCD_RST=P2^3;//液晶复位端口sbitk1=P1^0; //按键sbitk2=P1^1;sbitk3=P1^2;sbitk4=P1^3;sbitDQ=P2^7;//数据口defineinterfaceuchara,b,c,count,num;ucharflag=0; //24小时显示标志uinttemp;uchartabbjsj[]="北京时间";uchartabsswd[]="实时温度";uchartab[]="01:00:00";ucharcodetable[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x07,0x00,0x01,0xEF,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x07,0x80,0x01,0xEF,0x01,0x80,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x07,0x80,0x01,0xEF,0x01,0xC0,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x07,0x80,0x01,0xEF,0x03,0xC0,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x07,0x80,0x01,0xCF,0x07,0xC0,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x31,0xE0,0x00,0x07,0x00,0x01,0xCF,0x87,0x80,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x63,0xE0,0x00,0x07,0x70,0x01,0x87,0xCF,0x80,0x01,0xF8,0x00,0x00,0xC0,0x00,0x0D,0xE7,0xE0,0x00,0x06,0xF0,0x01,0x87,0xDF,0x80,0x01,0xF8,0x00,0x01,0xFC,0x00,0x0F,0xF6,0xE0,0x01,0xCF,0xF8,0x61,0x8F,0xDF,0x80,0x01,0xF0,0x00,0x01,0xFE,0x00,0x0F,0xFD,0xC0,0x07,0xCF,0xF8,0x70,0x0F,0xFB,0x00,0x01,0xF3,0x80,0x01,0xFF,0x00,0x07,0xB9,0x80,0x3F,0xC7,0xF8,0x70,0x0F,0xFB,0x00,0x01,0xF7,0x80,0x01,0xFF,0x00,0x07,0xFB,0x80,0x3F,0xC6,0xF0,0x70,0x0F,0xB7,0x00,0x03,0xEF,0x80,0x01,0xFF,0x00,0x07,0xFB,0x00,0x3F,0x9E,0xE0,0x78,0x0F,0x07,0x00,0x03,0xDF,0xC0,0x00,0xFE,0x00,0x03,0xF7,0x00,0x3F,0xFD,0xC0,0x78,0x1E,0x07,0x00,0x07,0xDB,0xC0,0x00,0x1E,0x00,0x1B,0xFF,0x00,0x3B,0xF9,0xC0,0x38,0x3E,0x07,0x00,0x0F,0xB3,0xC0,0x00,0x1C,0x00,0x1B,0xFE,0x00,0x13,0x73,0x80,0x1C,0x7C,0x07,0x00,0x3F,0xB3,0x80,0x00,0x1C,0x00,0x1F,0xFE,0x00,0x03,0x63,0x00,0x0C,0xFC,0x07,0x00,0x7F,0x63,0x80,0x00,0x18,0x00,0x1E,0xCC,0x00,0x07,0x6E,0x00,0x05,0xFC,0x3F,0x00,0x7F,0xE3,0x80,0x00,0x38,0x00,0x1E,0x0F,0x80,0x06,0x7C,0x00,0x01,0xFC,0x7F,0x00,0x7F,0xD3,0x80,0x00,0x30,0x00,0x1E,0x3F,0x80,0x06,0xFE,0x00,0x01,0xD8,0x7F,0x00,0x3B,0xBB,0x80,0x00,0x30,0x00,0x1C,0x7F,0x00,0x06,0xFF,0x80,0x00,0x18,0x7F,0x00,0x03,0xFB,0x80,0x00,0x30,0x00,0x18,0xEE,0x00,0x0E,0xCF,0x80,0x00,0x1E,0xF6,0x00,0x07,0xF3,0x80,0x00,0x70,0xC0,0x03,0xDC,0x00,0x0C,0x0F,0x00,0x00,0x1E,0xF6,0x00,0x07,0xF3,0x80,0x00,0x67,0xE0,0x07,0xB8,0x00,0x0C,0x1F,0x00,0x0C,0x3F,0xF6,0x00,0x0F,0x63,0x00,0x00,0x7F,0xE0,0x07,0x30,0x00,0x0C,0x3F,0x00,0x0C,0x3F,0xF6,0x00,0x1E,0xC3,0x00,0x00,0x7F,0xE0,0x00,0x30,0x00,0x0C,0x7E,0x00,0x0D,0xBB,0xF6,0x00,0x1E,0xC3,0x00,0x01,0xFF,0x80,0x00,0x60,0x00,0x1C,0x7E,0x00,0x0D,0xBF,0xFE,0x00,0x1E,0xC3,0x00,0x1F,0xF0,0x00,0x00,0x7F,0x00,0x1C,0x2F,0x00,0x0D,0xBF,0xFE,0x00,0xC1,0x83,0x00,0x7F,0xC0,0x00,0x00,0xFF,0x80,0x18,0x0F,0x00,0x0F,0x36,0xF6,0x00,0xE3,0x83,0x01,0xFF,0x80,0x00,0x03,0xFF,0x80,0x18,0x1F,0x00,0x0F,0x7E,0xC6,0x00,0x63,0x83,0x03,0xFE,0x00,0x00,0x0F,0xE7,0x80,0x18,0x3F,0x00,0x0F,0x7E,0xC6,0x00,0x63,0x03,0x03,0xFC,0x00,0x00,0x3F,0xE0,0x00,0x1A,0x37,0x00,0x1F,0x0E,0xC6,0x00,0x6F,0x83,0x01,0xF0,0x00,0x00,0x7E,0x60,0x00,0x1E,0x77,0x00,0x1F,0x0E,0xC6,0x00,0x6F,0xC7,0x01,0xE0,0x00,0x00,0xFC,0x60,0x00,0x3E,0x67,0x30,0x1F,0x0D,0xC6,0x00,0x77,0xC7,0x01,0xC0,0x00,0x00,0xF8,0x60,0x00,0x3C,0xC6,0x38,0x1F,0x01,0x86,0x00,0x77,0x87,0x00,0x00,0x00,0x00,0x70,0x60,0x00,0x3D,0xC6,0x18,0x1F,0x01,0xB6,0x00,0x77,0x87,0x00,0x00,0x00,0x00,0x20,0x70,0x00,0x3F,0x86,0x1C,0x1F,0x01,0xBE,0x00,0x77,0xB7,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x3B,0x06,0x1C,0x1F,0x01,0x9F,0x00,0x77,0xBF,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x38,0x06,0x1C,0x1E,0x01,0x8F,0x00,0x73,0x8F,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x18,0x07,0xFC,0x1E,0x01,0x8F,0x00,0x03,0x07,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x07,0xFC,0x1E,0x03,0x86,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x07,0xF0,0x1C,0x03,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0x80,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*******************************************************************//*延时函数*//*******************************************************************/voiddelay(intms){ while(ms--) { uchari; for(i=0;i<150;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }}/*******************************************************************//*精准延时函数,延时1秒,软件算得*//*******************************************************************/voidDelay_S(void)//延时1s误差0us{unsignedchara,b,c;for(c=167;c>0;c--)for(b=171;b>0;b--)for(a=16;a>0;a--);_nop_();//ifKeil,requireuseintrins.h} /*******************************************************************//*检查LCD忙状态*//*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。*//*******************************************************************/bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0x80);LCD_EN=0;return(result);}/*******************************************************************//*写指令数据到LCD*//*RS=L,RW=L,E=高脉冲,D0-D7=指令码。*//*******************************************************************/voidlcd_wcmd(ucharcmd){ while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();LCD_data=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/*******************************************************************//*写显示数据到LCD*//*RS=H,RW=L,E=高脉冲,D0-D7=数据。*//*******************************************************************/voidlcd_wdat(uchardat){while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;LCD_data=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/*******************************************************************//*从lcd读取数据到data*//*RS=H,RW=L,E=高脉冲,D0-D7=数据。*//*******************************************************************/ucharlcd_rdat(){ uchardat; while(lcd_busy()); LCD_data=0XFF;LCD_RS=1;LCD_RW=1;LCD_EN=0;LCD_EN=1; dat=LCD_data;LCD_EN=0; return(dat);}/*******************************************************************//*LCD初始化设定*//*******************************************************************/voidlcd_init(){LCD_PSB=1;//并口方式 LCD_RST=0; //液晶复位delay(3);LCD_RST=1;delay(3);lcd_wcmd(0x34);//扩充指令操作delay(5);lcd_wcmd(0x30);//基本指令操作delay(5);lcd_wcmd(0x0C);//显示开,关光标delay(5);lcd_wcmd(0x01);//清除LCD显示内容delay(5);}/***********************************************************函数名:DrawPoint函数阐明:画点传入参数:打点位置(x0,y0);color=1,点亮;color=0,擦除传出参数:无返回值:无**********************************************************/voidDrawPoint(unsignedcharx,unsignedchary,unsignedcharcolor){ unsignedcharrow,collum,cbite; unsignedchartempH,tempL; lcd_wcmd(0x34);//打开扩充指令集 lcd_wcmd(0x36);//打开图形显示 collum=x>>4; //取x坐标第几块地址 cbite=x&0x0f; //区域第几种点 if(y<32) row=y; else { row=y-32; collum+=8; } lcd_wcmd(0x80+row);//先写Y坐标 lcd_wcmd(0x80+collum);//再写X坐标 lcd_rdat(); //读取区域内16个点状态 tempH=lcd_rdat();//先读出高字节 tempL=lcd_rdat();//再读出低字节 lcd_wcmd(0x80+row);//先写Y坐标 lcd_wcmd(0x80+collum);//再写X坐标 if(color) { if(cbite<8) { tempH|=(1<<(7-cbite)); } else { tempL|=(1<<(15-cbite)); } } else { if(cbite<8) { tempH&=~(1<<(7-cbite)); } else { tempL&=~(1<<(15-cbite)); } } lcd_wdat(tempH); lcd_wdat(tempL); lcd_wcmd(0x30);}/***********************************************************函数名:line函数阐明:画直线传入参数:直线起始位置(x0,y0);终点(x1,y1)传出参数:无返回值:无**********************************************************/voidline(unsignedcharx0,unsignedchary0,unsignedcharx1,unsignedchary1,unsignedcharcolor){intdx;/*直线x轴差值变量*/intdy;/*直线y轴差值变量*/chardx_sym;/*x轴增长方向,为-1时减值方向,为1时增值方向*/chardy_sym;/*y轴增长方向,为-1时减值方向,为1时增值方向*/intdx_x2;/*dx*2值变量,用于加快运算速度*/intdy_x2;/*dy*2值变量,用于加快运算速度*/intdi;/*决策变量*/if(x0==x1)/*画垂直线*/{if(y0>y1){dx=y0;y0=y1;y1=dx;}for(dx=y0;dx<y1+1;dx++){DrawPoint(x0,dx,color);}}if(y0==y1)/*画水平线*/{if(x0>x1){dy=x0;x0=x1;x1=dy;}for(dy=x0;dy<x1+1;dy++){DrawPoint(dy,y0,color);}} /****************************画斜线******************************/dx=x1-x0;/*求取两点之间差值*/dy=y1-y0;if(dx>0)/*判断x轴方向*/{dx_sym=1;/*dx>0,设立dx_sym=1*/}else{if(dx<0){dx_sym=-1;/*dx<0,设立dx_sym=-1*/}}if(dy>0)/*判断y轴方向*/{dy_sym=1;/*dy>0,设立dy_sym=1*/}else{if(dy<0){dy_sym=-1;/*dy<0,设立dy_sym=-1*/}}dx=dx_sym*dx;/*将dx、dy取绝对值*/dy=dy_sym*dy;dx_x2=dx*2;/*计算2倍dx及dy值*/dy_x2=dy*2;/*使用Bresenham法进行画直线*/if(dx>=dy)/*对于dx>=dy,则使用x轴为基准*/{di=dy_x2-dx;while(x0!=x1){DrawPoint(x0,y0,color);x0+=dx_sym;if(di<0){di+=dy_x2;/*计算出下一步决策值*/}else{di+=dy_x2-dx_x2;y0+=dy_sym;}}DrawPoint(x0,y0,color);/*显示最后一点*/}else/*对于dx<dy,则使用y轴为基准*/{di=dx_x2-dy;while(y0!=y1){DrawPoint(x0,y0,color);y0+=dy_sym;if(di<0){di+=dx_x2;}else{di+=dx_x2-dy_x2;x0+=dx_sym;}}DrawPoint(x0,y0,color);/*显示最后一点*/}}/***********************************************************函数名:circle函数阐明:画圆传入参数:圆心坐标(x1,y1),半径r传出参数:无返回值:无**********************************************************/voidcircle(intx1,inty1,unsignedintr){intx,y,d;x=0;y=r;d=1-r;/*计算初始值*/ //用Bresenham算法先画1/8个圆,在运用对称行画出别的某些while(x<=y){/*绘制点(x,y)及其在八分圆中此外7个对称点*/DrawPoint(x1+x,y1+y,1);DrawPoint(x1+y,y1+x,1);DrawPoint(x1-y,y1+x,1);DrawPoint(x1-x,y1+y,1);DrawPoint(x1-x,y1-y,1);DrawPoint(x1-y,y1-x,1);DrawPoint(x1+y,y1-x,1);DrawPoint(x1+x,y1-y,1);if(d<0){d+=2*x+3;/*依照误差项d判断,决定非最大位移方向上是走还是不走*/}else{d+=2*(x-y)+5;y--;}x++;}}/*******************************************函数名称:voidDrawHand(charx0,chary0,chara,charb,charc,charcolor)功能:画时钟指针参数:(x0,y0)表盘圆心坐标, R指针长度 Time指针所指刻度(秒、分60进制,时12进制) step指针步长(秒、分为6,时为30) color指针颜色返回值:无********************************************/voidDrawHand(charx0,chary0,charR,charTime,charstep,charcolor){ charx,y; x=R*cos(Time*step*pi/180-pi/2)+x0; y=R*sin(Time*step*pi/180-pi/2)+y0; line(x0,y0,x,y,color);}/*******************************************函数名称:clr_screen(void)功能:清除液晶GDRAM内部随机数据参数:无返回值:无********************************************/voidclr_screen(void){ uchari,j; for(j=0;j<64;j++) { for(i=0;i<128;i++) { DrawPoint(i,j,0); } }}/********************************************************************************描述:**12864原则字库液晶演示数据p0,控制p2*********************************************************************************/#definex031 #definey031//表盘圆心坐标/***********************************************************函数名:DISP_BP函数阐明:画表盘传出参数:无返回值:无**********************************************************/voidDISP_BP(void){ circle(x0,y0,30);//画圆 line(31,1,31,3,1);//12点 line(30,1,30,3,1); line(32,1,32,3,1); line(31,61,31,59,1);//6点 line(30,61,30,59,1); line(32,61,32,59,1); line(61,31,59,31,1);//3点 line(61,30,59,30,1); line(61,32,59,32,1); line(1,31,3,31,1);//9点 line(1,30,3,30,1); line(1,32,3,32,1); line(109,51,111,51,1);//℃符号 line(109,50,111,50,1); line(109,49,111,49,1); line(110,50,110,50,0); circle(8,8,8); //耳朵左 line(16,7,16,11,0); line(7,16,12,16,0); line(15,12,11,15,0); line(15,11,12,17,0); line(12,15,12,15,0); circle(54,8,8); //耳朵右 line(46,7,46,11,0); line(55,16,50,16,0); line(47,12,51,16,0); line(47,11,47,11,0); line(51,15,51,15,0); line(6,46,7,46,1); line(6,47,7,47,1); line(14,55,15,55,1); line(14,56,15,56,1); line(46,55,47,55,1); line(46,56,47,56,1); line(56,46,57,46,1); line(56,47,57,47,1);}/*****************显示时分秒*****************/voidsfm(ucharadd,ucharsfm){ ucharsfm1,sfm2; sfm1=sfm/10; sfm2=sfm%10; lcd_wcmd(0x90+add); lcd_wdat(0x30+sfm1); lcd_wdat(0x30+sfm2);}voidsfmfen(){ ucharfen1,fen2; fen1=b/10; fen2=b%10; lcd_wcmd(0x90+5); lcd_wdat(0x3a); lcd_wdat(0x30+fen1); lcd_wdat(0x30+fen2);}//按键扫描函数voidkeyscan(){// uchari,j,k; if(k1==0) delay(5);if(k1==0) { while(!k1); DrawHand(x0,y0,25,a,6,0); //消除秒针位置 DrawHand(x0,y0,20,b,6,1); //显示新分针位置 DrawHand(x0,y0,15,c,6,1);//显示新时针位置 a++; if(a==60) a=0; sfm(7,a); DrawHand(x0,y0,25,a,6,1); //显示秒针位置 }if(k2==0) delay(5); if(k2==0) { while(!k2); DrawHand(x0,y0,20,b,6,0); //消除本来分针位置 DrawHand(x0,y0,15,c,6,1);//显示新时针位置 DrawHand(x0,y0,25,a,6,1); //显示秒针位置 b++; if(b==60) b=0; sfmfen(); DrawHand(x0,y0,20,b,6,1); //显示新分针位置 } if(k3==0) delay(5); if(k3==0) { while(!k3); DrawHand(x0,y0,15,c,6,0);//消除本来时针位置 DrawHand(x0,y0,25,a,6,1); //显示秒针位置 DrawHand(x0,y0,20,b,6,1); //显示新分针位置 c++; flag++; if(c==60) c=0; if(flag==120) flag=0; sfm(4,flag/5); DrawHand(x0,y0,15,c,6,1);//显示新时针位置 } } /*******************画开机画面********************/voidGUI_CLEAR(constuchar*pic){ uchari,j,k; lcd_wcmd(0X34); lcd_wcmd(0X34); for(i=0;i<2;i++) { for(j=0;j<32;j++) { lcd_wcmd(0X80+j); //delay(2); if(i==0) { lcd_wcmd(0X80); //delay(2); } else { lcd_wcmd(0X88); //delay(2); } for(k=0;k<16;k++) { lcd_wdat(*(pic++)); //LCD_WRITE_DATA(0X00); //delay(2); } } } lcd_wcmd(0X36); lcd_wcmd(0X30);}/********************DS18B20***********************************/voiddelay18b20(unsignedchari){ while(--i);}voidInit_Ds18b20(void)//DS18B20初始化sendresetandinitializationcommand{ DQ=1;//DQ复位,不要也可行。 delay18b20(1);//稍做延时 DQ=0;//单片机拉低总线 delay18b20(250);//精准延时,维持至少480us DQ=1;//释放总线,即拉高了总线 delay18b20(100);//此处延时有足够,保证能让DS18B20发出存在脉冲。}ucharRead_One_Byte()//读取一种字节

温馨提示

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

评论

0/150

提交评论