单片机做液晶LCD时钟_第1页
单片机做液晶LCD时钟_第2页
单片机做液晶LCD时钟_第3页
单片机做液晶LCD时钟_第4页
单片机做液晶LCD时钟_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、用单片机做液晶LCD时钟一、任务设计制作基于LCD液晶显示屏的,可以调整的时钟系统。二、要求1.基本要求(1)采用1602液晶屏显示显示当前日期、时间和实时温度,温度精度为1度。(2)日期可以显示为:年月日;时间可以显示为:时分秒。(3)日期和时钟可以通过按键进行调节校正。2.发挥部分(1)选用12864液晶屏显示日期和时钟。(2)温度精度达到0.5度。(3)当系统断电后,时钟仍然可以保持。(4)可以设置至少两个闹铃;设置温度上下限,超限可以报警。三、说明(1)手工焊接或者自己制作PCB板,不得采购市场上成品(包括PCB和设计实物)用单片机做液晶LCD时钟 摘 要我们设计的LCD时钟温度系统是

2、由中央控制器、温度检测器、时钟系统、报警系统,显示器及键盘部分组成。控制器采用单片机AT89S52,温度检测部分采用DS18B20温度传感器,时钟系统用时钟芯片DS1302,用LCD液晶12864F作为显示器,用蜂鸣器及发光二极管构成声光报警器。单片机通过时钟芯片DS1302获取时间数据,对数据处理后显示时间;温度传感器DS18B20采集温度信号送该给单片机处理;单片机再把时间数据和温度数据送液晶显示器12864F显示,12864F还可以显示汉字;键盘是用来调时和温度查询的。关键字:单片机 LCD液晶 DS18B20 DS1302 128641 引言随着人们生活水平的不断提高,单片机控制无疑是

3、人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计是数据采集及处理,键盘控制,显示系统及报警系统与单片机有效结合,本设计是通过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系

4、统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。一 方案设计及方案论证1.时钟温度的总体设计思路按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的调整及显示。获得时钟温度数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。2.时钟温度系统方案论证2.1时钟系统方案选择方案1:通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;方案2:用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。虽然用软件实现时钟硬件线路简单,但是程序运行的每

5、一步都需要时间,多一步或少一步程序都会影响记时的准确度,对定时器定时也不是十分准确,时钟精度很低,对于我们实现所需要的功能造成软件编程非常复杂。用专用时钟芯片硬件成本相对较高,但它的精度很高,软件编程很简单。综上所述,选择方案2。2.2单片机的选择对于单片机的选择,如果用8031系列,由于它没有内部RAM,系统又需要大量内存存储数据,因而不可用;51系列单片机的ROM为4K,对于我们设计的系统可能有点小;52系列单片机与51系列的结构一样,而ROM扩大为8K,对我们设计系统提供充足的空间进行功能的扩展。再有51系列单片机与52系列的单片机价格差不多。因此,我们选择52系列的单片机。 2.3 显

6、示系统的方案比较 方案1:用数码管或LED显示。 方案2:用液晶1602显示。方案3:用液晶12864显示。 时钟和温度的显示可以用数码管或LED,而且价格便宜。但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用1602液晶显示数据有限,显示数据的可读性不好,用可以显示汉字的12864液晶显示器还可以增加显示信息的可读性,让人看起来会很方便。另外它们在价格上差距很大,考虑成本我们首选1602。但是我们有12864.因此我们选择方案三。2.4 报警系统的方案比较 方案1:用长鸣的蜂鸣器实现闹钟铃声及温度超

7、限报警。 方案2:用喇叭加语音芯片实现闹钟铃声及温度超限报警。 用喇叭加语音芯片成本很高,但声音还不错,再有喇叭体积庞大。用蜂鸣器,成本低,电路结构简单,而且体积小。限于设计所需要的功能,用蜂鸣器是最佳选择。所以我们采用方案1.2.5 温度系统方案选择方案1:用热敏电阻等测温元件测出电压,再转换成对应的温度。需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。方案2:用DS18B20直接测温。DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。经比较,我们选择方案2。

8、温度实现只能通过外部的温度传感器来实现。经上网查阅及市场考察,DS18b20体积小,只有3只脚,电路接法简单。内部含有寄存器为我们设计实现上下限报警功能提供保障。精度为0.5°C,也符合我们设计的要求。DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。2.6 键盘控制方案选择方案1:购买集成键盘,采用矩阵形式连接。方案2:购买单个复位开关做成键盘。虽然集成键盘美观,与单片机的接口少,但是它的成本比较高。单片机的IO口对于我们的设计绰绰有余。通常我们选用价格便宜单个复位开关做成键盘。3.时钟温度系统总体设计初步确定设计系统由单片机主控模块、时钟模块、测温模块、报警模

9、块、显示模块、键盘接口模块共6个模块组成,电路系统框图如图(1)所示。 主控器件AT89S52DB1820 温度采集系统DS1320时间采集系统12864/1602显示系统蜂鸣器LED报警系统键盘控制系统二硬件设计部分1 单片机最小系统电路设计1.1 单片机芯片选择单片机采用52系列单片机。由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得AT89S52为众多嵌入式控

10、制应用系统提供高灵活、有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。A

11、T89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。其芯片外观及引脚图如下: 图1.1_1 图1.1_21.2 单片机管脚说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIAS

12、H编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于

13、外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,如下表所示:管脚备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3

14、.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的

15、是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储

16、器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。1.3 单片机最小系统 单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。1) 复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。如下图所示: 2) 晶振电路晶振电路原理图如3-2:3-2晶振模块原理图 选取原则:电容选取30pF,晶振为12MHz。3) 电源AT89S52单片机的供电电源是5V的直流电。4) EA非/Vpp 脚我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。2 时钟系

17、统电路设计2.1 时钟芯片选择我们采用具有涓细电流充电能力的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能。它采用主电源和备用电源双电源供电。它的工作电压范围2.05.5V,在2.2V时,小于300nA。它内部含有31个字节的静态RAM,可提供用户访问。   DS1302可以对年、月、日、周日、时、分、秒进行计时,可以达到我们设计的基本的要求。内部的寄存器为我们调时,闹钟定时提供了寄存空间。备用用电源也实现了当系统断电后,时钟仍然可以保持。而且它是串行接口,与单片机通信所需要的接口少。不像DS12887等芯片并行通信需

18、要很多IO口。2.2 DS1302管脚及寄存器说明(1)DS1302的引脚排列Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。因此,我们vcc1用3V的纽扣电池作为备用电源,vcc2用系统电源作为主电源。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移

19、位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。        (2)DS1302的寄存器说明DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302

20、还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 2.3 DS1302时钟电路DS1302时钟电路如下图所示:DS1302与单片机的连接仅需3条线:时钟线SCLK、数据线I/O和复位线RST。时钟线SCLK与P2.4相连

21、,数据线I/O与P2.5相连,复位线RST与P2.6相连。由于DS1302是靠涓细电流充电来实现串行输入输出的,因此,在SCLK 、I/O、 RST线上要加上拉电阻,其中,它们的电流应该在500u1mA之间,若电源为5V,则R约为5k,因此,我们的电阻R=4.7K。 在单电源与电池供电系统中,vcc1提供低电源并提供低功率的备用电源。Vcc2提供高电源作为芯片供电的主电源。因此,这里vcc1用3V纽扣电池,vcc2用5V的系统电源。晶振为32.768KHz接入X1、X2引脚。3 温度系统电路 3.1 温度芯片的选择温度实现只能通过外部的温度传感器来实现。经上网查阅资料及市场考察,DS18b20

22、体积小,只有3只脚,电路接法简单。它能够直接读出被测温度。内部含有寄存器为我们设计实现上下限报警功能提供保障。用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;精度为0.5°C,也符合我们设计的要求。DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。3.2 DS18B20内部结构描述DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8个字节的存储器,结构如图4.1所示。头两个字节包含测得的温度信息,第三和第四字节是TH和TL的拷贝,是易失的,每次上电

23、复位时被刷新。第五个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如图4.2所示。低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。温度 LSB温度 MSBTH 用户字节1TL 用户字节2配置寄存器保留保留保留 CRC图 4.1高速暂存RAM结构图1字节2字节 3字节 4字节 5字节6字节 7字节 8字节9字节EEROMTH 用户字节1TL 用户字节2TMR1R011111图 4.2 配置寄存器3.3 DS18b20温度系统电路 DS18B20系统电路如下:DS18B

24、20有两种接法:一是单线接法即只接QT。这种方法应用它内部的寄生电源,因此在QT上要用一个MOSFET把I/O线只接拉到电源上。二是从vdd脚加上电源。方法一适合于远距离温度监控,不需要本地电源。而我们只是设计测温系统,选择方法二就行了,还有MOSFET极容易烧,我们不用它。Vdd接5V电源,vss接地,QT与P2.7相连。因为DS18B20的工作电流约为1MA,因此Qt端还要加上拉电阻为其提供电流。若用5V电源,则R=5/1MA=5k。R取4.7K。4 键盘控制系统设计按键需要4个,分别实现为时间调整、时间的加、时间的减、退出四个功能。用单片机的4个I/O口接收控制信号,其电路图如下:4个按

25、键的一端与地相连,另一端分别与P1.0、P1.1、 P1.2、P1.3相连。这时当按键按下就输入低电平。5 报警电路系统设计报警电路由蜂鸣器、三极管、电阻 、LED等构成电路图如下:它们与单片机的接口分别是P2.0,P1.4,P1.5。6 液晶显示系统设计6.1 12864F简介 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形

26、界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。6.2 12864F引脚说明管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”,

27、DB7DB0的数据被写到IR或DR6E(SCLK)H/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式(见注释1)16NC-空脚17/RESETH/L复位端,低电平有效(见注释2)18VOUT-LCD驱动电压输出端19AVDD背光源正端(+5V)(见注释3)20KVSS背光源负端(见注释3)*注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“

28、VCC”用焊锡短接。*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。  *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。四.模块主要硬件构成说明6.3 12864F液晶显示电路 设计中采用 LCD12864液晶显示。它一般串口、并口两种方式显示,而我们一般采用并口显示。12864的4、5、6、15、17脚分别与单片机的P3.0P3.4相连。714脚与单片机的P0口相连。1、20号脚接地,2号脚接电源,19号脚背光灯正端串一个电阻与电源相连,电阻起限流的作用,我们取R=10K。3号脚是对比度(亮度)调整,这里要用一个滑动变阻

29、器来调整亮度,这里我们取电位器大小为10K。 LCD12864显示电路如下图所示:7 总体硬件系统设计1. 由于时间经费有限,我们不采用PCB印刷板制作硬件电路,我们用通用的电路板焊接而成。经市场考察和以往的经验,我们选用型号为ADA5的电路板,它大小合适,而且它上面的孔都是三孔相连的,方便我们的设计。并且这是市场最便宜的。2. 各电气元件的连接,我们采用单排针和杜邦线相连。这样为我们避免各元件的跨接,对我们对线路的排错提供方便。3. 上述六个模块可以按原理图整齐的焊接在电路板。最后效果,板子正面连线错横复杂,板子反面横整齐。三软件设计部分 本系统的软件系统主要分为主程序、液晶程序、时钟程序、

30、温度程序、键盘控制程序、液晶显示程序。 3.1 主程序系统主程序首先对系统进行初始化,包括设置定时器、液晶、DS1302、DS18B20和端口的初始化;由于单片机没有命令指令,所以可以设计系统程序不断地循环执行液晶显示时间程序即show_time()程序。如果单片机接收命令指令,就执行相应的程序及闹钟是否到,温度上下限是否到的判断,执行相应的报警及铃声程序。简单流程图如下: 开始初始化时钟、温度芯片显示键盘设置闹钟时间是否到闹钟铃声温度上下限是否到报警系统YY3.2 液晶程序 LCD12864的程序主要是对内部控制指令进行指定如液晶初始化,显示空白,读,写,判断液晶是否忙及指定字符的位置等函数

31、构成。了解LCD12864的内部结构及控制指令和网上大部分程序模块大致相同。3.3 Ds1302时钟数据处理程序 DS1302数据处理要对始终内部的数据进行处理获得液晶显示的字符和键盘系统对DS1302内部数据进行处理。它主要包括ds1302的初始化,读一个字节,写一个字节,读写,数据处理等函数组成。我们对DS1302读写数据命令、DS1302RAM读写命令和寄存器标志内容的的了解,实现闹钟,调时程序很容易。在程序尽量用位移,位或,位与来实现乘除法,这样可节约单片机处理的时间。最后将时分秒年月日分解为字符送给液晶显示。部分流程图如图3.2.3.4 DS18B20温度数据处理程序 DS18B20

32、数据处理对芯片内部数据处理获得液晶的显示字符。它主要包括DS18B20的初始化,读写一个字节,读取DS18B20中的数据和对数据的转换液晶显示的字符。对DS18B20的精度进行不同定义可得到不同精度。部分流程如图3.1 。3.5 键盘控制程序键盘的控制是本系统的核心,也是本系统的最复杂的部分。通过按键设置,改变芯片内数据达到调时的效果,设置闹钟,设置温度上下限等功能。我们设置4个按键分别是设置(set),上(up),下(down),退出(out)。我们首先按set就进入功能选择界面,通过上下键选择功能,再按set进入功能设置界面,按set改变设置项目及退出,按上下键改变所设置的值。按out键退

33、出到时钟显示界面。3.6 液晶显示程序液晶显示程序是对单片机内数据视化,让用户更直观方便观察结果及对功能的设置。在程序中加入闪烁,使显示更加直观。 YESYESNONO初始化调用显示子程序读出温度值温度计算处理显示数据刷新发温度转换开始命令1秒到?初次上电?图3.1 DS18B20温度计主程序流程图 图3. 2 3.8 其他程序 其他程序包括延时程序,闹铃程序,警报程序,闪烁程序。其中闹铃程序,警报程序用延时函数来实现。闪烁程序用定时器的中断来完成的。3.9 程序中的注意点1. 按键处理防抖动应加延时函数。2. 程序用调用函数,最好在头文件申明函数,主函数一般最后写。3. 为了使程序更加容易写

34、,我们要分模块来完成程序。四软硬件调试部分 1) 软件调试 软件调试,我是在keil软件平台和单片机学习板上来完成的。当我写部分程序在keil软件经过调试,开始出现很多错误和警告。通过逐个错误排错及修改。得出下列经验,(1)调用函数最好在头文件中进行申明,主函数写在最后;(2)特别注意一些字母的大小写,一般要用英语文字写,不要用中文汉写,这是最不容易检查的,如我在检查液晶显示程序时,时钟没检查到错误,最后我删掉此行重新写,错误排除了,据我分析可能是中英文变换时出现问题。 经过一系列排错,最后文件没有错误但还有警告。由于c语言中有警告是没关系的,我将HEX文件下在到单片机竟显示一些乱码。我有回到

35、文件,经过对警告的分析及上网查阅。将程序稍微修改警告慢慢被排除,最后没有错误和警告了,下载到单片机,发现乱码竟然还出现,还有多个界面叠加显示,里面还有一些乱码。经过分析,叠屏现象是没有对液晶清平所致。于是我又在不同界面程序前加入调用填充空格函数(void clrram_lcd ()),然后又下载,结果与前面一样,崩溃啊!经过几个小时后,无意间我去掉 调用函数前void。结果叠屏现象解决。但是显示还是乱码。谢天谢地啊!有进步! 又经过几天,排错,上网查阅与参考程序对照。最后在void R1302()函数中DS1302InputByte(ucAddr|0x01);掉了|0x01,加上生成HEX文件

36、,下载到单片机中。能够正常显示了。界面的闪烁不能闪烁。呵呵!又进一步! 经过一段时间,我发现界面程序中的a=1与功能设置中a重赋值(a=0)相冲突,最后将if()语句中a=1改为a=0 。相应的问题也解决了。 最后对程序进行相应的扩展完善,由于按键不灵敏我们加上声音程序。加上另一个闹钟实现设计需求。 通过单片机学习板对照,程序基本实现我所预期的要求,但是界面显示闹钟1,闹钟2闪烁时,液晶竟然出现显示淡化。据分析,可能使程序的问题。由于这部分显示复杂,用了多个if语句,可能出现语句冗余。我只有请教高手啰! 2)硬件调试 硬件调试,我们用万用表,单片机学习板来完成的。首先,我们调试LCD12864

37、显示。我将液晶显示程序下载到单片机内,连好所有的线,通电后,观察显示结果。唉!液晶竟然不显示。我们用万用表测试各连线是否导通及某些点的电压,发现没问题。最后在网上发现我的P0口竟然没接上拉电阻,通过计算电阻应该去5K至10K,我们选用4.7k的电阻。由于没准备多的电阻,我在以前买的电阻找到了4.7k的电阻。开始布局没有为上拉电阻留下空间,我们在单片机插槽里插电阻,解决一些连线的复杂度。后来在调试液晶能够显示了。 然后,我们调试DS1302时钟芯片。连上按键模块,液晶显示模块,单片机最小系统,时钟系统,温度系统,连接所有线,通上电源后,我们观察到液晶显示 20858585 85:85:85 20

38、.125C 温度能正常显示,时钟不能正常显示。我们还是用万用表检查所用线路,对照电路原理图,最后发现时钟上拉电阻没焊上电源。接上电源后,时钟能够正常显示,按键也能控制。 最后,我们对报警模块进行简单调试。最后发现没问题。 整个硬件调试完成。 程序完成后 五总结与体会 经过将近一个月的设计,终于完成LCD液晶时钟设计,虽然达到设计要求,但单片机的资源并没完全应用,毕竟这次设计把实物都做了出来,心底是很高兴的,这次不是用单片机学习板而是自己动手制作的作品。在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙

39、的程序算法。这次设计是液晶,单片机,键盘控制的综合应用,其间,遇到许多困难,甚至,有时竟然想放弃。从这次的课程设计中,我真真正正的意识到,在写程序时,逻辑思维要清晰,要有耐心。在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设计中的最大收获。参考文献:1.单片机学习板配套资料2.C语言程序设计 谭浩强编 清华大学出版社3.单片机原理与应用及C51程序设计 谢维成 杨加国 主编 清华大学出版社附件:LCD液晶时钟设计元件清单名称型号数量 单片机AT89S521 液晶显示器JHD12864F1 电阻10k

40、(1/4w)5电阻1k5电阻200欧姆5电阻4.7k5 电阻4.7k5 电位器10k1 电容10u/16V1 电容30p4 三极管90131 轻触按键小(尺寸6×6mm×5.5)4 蜂鸣器5 V1 晶振12M(小体积)1 底座8脚1 底座40脚1 发光二极管 红1 发光二极管绿1 时钟芯片DS13021 温度芯片DS18B201 纽扣电池及底座3V(大)1 液晶插槽20孔1 单排针3排120 杜邦线及杜邦头1股40 电路板AOA51由于我们由单片机学习板,很多器件没买,像DS1302,DS18B20,单片机等,节约设计成本。总的花费约30元。LCD液晶时钟设计原理电路图LC

41、D液晶时钟设计部分参考程序液晶部分显示程序:/屏幕显示屏幕显示void show_lcd(void) switch(w) case 0: show_time(); break;case 1: show_timeset(); break; /在不同的条件下显示不同的字符case 2: show_dateset(); break;case 3: show_alarmclockset1(); break;case 4: show_alarmclockset2(); break;case 5: show_tempset(); break; /*w=0时,显示: 液晶时钟设计 日期:yyyy-mm-dd

42、 时间: hh:mm:ss 当前温度: xx.x */ void show_time() clrram_lcd (); DS1302_GetTime(); /获取时钟芯片的时间数据 TimeToStr(); /时间数据转换液晶字符 DateToStr(); /日期数据转换液晶字符 ReadTemperature(); /开启温度采集程序 temp_to_str(); /温度数据转换成液晶字符 gotoxy(4,0); print("温度:"); gotoxy(4,3); /液晶字符显示位置 print(TempBuffer); /显示温度 gotoxy(4,6); prin

43、t(""); gotoxy(3,0); print("时间:"); gotoxy(3,3); print(TimeString); /显示时间 gotoxy(2,3); print(DateString); /显示日期 gotoxy(2,0); print("日期:"); gotoxy(1,1); print("液晶时钟设计"); mdelay(500); /扫描延时/*w=1时,显示: 时钟设置 按set进入下面界面 时间设置 时间(闪)日期 在按set分闪 时:xx(闪) 闹钟1 闹钟2 再按set秒闪 分:

44、温度 通过上下键改变xx值 秒:*/void show_timeset() clrram_lcd ();DS1302_GetTime();HourToStr();MinuteToStr();SecondToStr(); if(k=0) gotoxy(4,0); print("温度"); gotoxy(3,0); print("闹钟1"); gotoxy(3,4); print("闹钟2"); gotoxy(2,4); print("日期"); gotoxy(1,0); print("时钟设置")

45、; if(a=0) gotoxy(2,0); print(" "); /不显示 else gotoxy(2,0); print("时间"); /显示time else /id不为零进入时间调整项目 gotoxy(4,1); print("秒:"); gotoxy(3,1); print("分:"); gotoxy(2,1); print("时:"); gotoxy(1,0); print("时间设置"); if(k=5)&&(a=0) gotoxy(2,3);

46、 print(" "); else gotoxy(2,3); print( HourString); /*分显示闪烁控制*/ if(k=6)&&(a=0) gotoxy(3,3); print(" "); else gotoxy(3,3); print(MinuteString); /*秒显示闪烁控制*/ if(k=7)&&(a=0) gotoxy(4,3); print(" "); else gotoxy(4,3); print(SecondString); mdelay(500);/*w=3时,显示: 时钟设置 闹钟设置 时间 日期 闹钟1clockoff(闪)或 clockon 闹钟1(闪)闹钟2 时: 温度 分:*/void sh

温馨提示

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

评论

0/150

提交评论