1、 液晶LCD电子钟设计 姓 名: 余兴强、林贞涛、林环宇 专 业: 光电子专业技术与科学 辅导教师: 张育钊、刘伟、陈邦 完成日期: 2013 年 8 月 2 日 目录引言、. .4一、 方案设计及方案论证 1.时钟温度的总体设计思路.5 2.时钟温度系统方案论证.5 1)时钟系统方案选择.5 2)单片机的选择.5 3)显示系统的方案比较.5 4)闹铃系统的方案比较.6 5)温度系统方案选择.6 6)键盘控制方案选择.6 7)呼吸灯系统方案选择.7 3.时钟温度系统总体设计. 7二硬件设计部分 1.单片机最小系统电路设计.7 1)单片机芯片选择.7 2)单片机管脚说明.8 3)单片机最小系统.
2、10 2.时钟系统电路设计.11 3.温度系统电路.11 1)温度芯片的选择.11 2)DS18B20内部结构描述.11 3)DS18B20温度系统电路.12 4.键盘控制系统设计.13 5.闹钟电路系统设计.13 6.液晶显示系统设计.13 1)1602液晶显示简介.13 2)1602引脚说明.14 3)1602液晶显示特性.14 4)12864F液晶显示电路.15 7.总体硬件系统设计.15三软件设计部分 1.主程序.16 2.液晶程序.16 3.时钟数据处理程序.17 4.DS18B20温度数据处理程序.17 5.键盘控制程序.17 6.液晶显示程序.17 7.其他程序.18 8.程序中
3、的注意点.18四软硬件调试部分 1.软件调试.18 2.硬件调试.19五 总结与体会.19 参考文献.20 附件:.20LCD液晶时钟设计原理电路图.20 另外再附上我们的PCB图.21 六.LCD液晶时钟设计部分参考程序.21 摘要 我们设计的LCD时钟温度系统是由中央控制器、温度检测器、时钟系统、闹铃设定系统、显示器以及键盘部分组成。控制器采用单片机AT89C51,温度检测部分采用DS18B20温度传感器、用LCD1602液晶显示作为显示器,用压电式蜂鸣器构成闹铃。单片机通过外部设定时间获取时间数据,对数据处理后显示时间;单片机再把时间数据和温度数据传送到LCD液晶显示屏上显示;还可以设定
4、闹铃,到设定时间发出闹铃声;不仅如此,1602还可以显示星期、年月日、时分秒;4x4矩阵键盘可以设定年月日,时间,闹铃。 关键字:LCD1602 AT89c51 DS18B20 温度 时间 星期1.引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计是数据采集及处理,矩阵键盘控制,显示系统及闹铃系统与单片机有效结合,本设计是通过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,培养一种自学的能力。并且引导一种创
5、新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。 一 方案设计及方案论证1.时钟温度的总体设计思路 按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度,闹铃的调整及显示。获得时钟温度数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。2.
6、时钟温度系统方案论证 2.1时钟系统方案选择方案1:通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟;方案2:用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。虽然使用专用时钟芯片硬件的精度很高,软件编程也很简单,但是成本相对使用软件来说大大增加了。用软件实现时钟硬件线路简单,虽然程序运行的每一步都需要时间,或多或少都会影响记时的准确度,但是比赛时对于精度的要求不高,而且复杂的软件编程有利于培养我们学生的能力,不仅如此,软件实现大大降低了成本。综上所述,选择方案1.2.2单片机的选择对于单片机的选择,STM32系列基于专为要求高性能、低成本
7、、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。虽然功能强大,但是费用也较高。;51系列单片机的ROM为4K,足以满足我们的设计需求,并且平时接触过得主要都是51单片机,对于它的参数比较熟悉,运用起来更加方便。我们选择51系列的单片机。2.3 显示系统的方案比较 方案1:用数码管或LED显示。 方案2:用液晶1602显示。方案3:用液晶12864显示。 时钟和温度的显示可以用数码管或LED,而且价格便宜。但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用1602液晶显示数据有限,显示数据的
8、可读性不好,但是足以满足现阶段所需。用可以显示汉字的12864液晶显示器还可以增加显示信息的可读性,让人看起来会很方便。另外它们在价格上差距很大,考虑成本我们首选1602。因此我们选择方案2。2.4 闹铃系统的方案比较方案1:用压电式蜂鸣器实现闹钟铃声。方案2:用电磁式蜂鸣器实现闹钟铃声。压电式蜂鸣器,用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。电磁式蜂鸣器,主要是利用通电导体会产生磁场的特性,用一个固定的永久性磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。两种蜂鸣器发音原理不同,压电式结构简单但是音调单一音色差,适用于报警器等设备。
9、而电磁式由于音色好,所以多用于语音、音乐等设备。但是电磁式价格远远高于压电式,考虑成本以及所需实现的功能,我们选择方案1。2.5 温度系统方案选择方案1:用热敏电阻等测温元件测出电压,再转换成对应的温度。需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。方案2:用DS18B20直接测温。DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。经比较,我们选择方案2。温度实现只能通过外部的温度传感器来实现。经上网查阅及市场考察,DS18b20体积小,只有3只脚,电路接法简
10、单。内部含有寄存器为我们设计实现上下限报警功能提供保障。精度为0.5C,足以满足我们设计要求。DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。2.6 键盘控制方案选择方案1:购买集成键盘,采用矩阵形式连接。方案2:购买单个复位开关做成键盘。虽然集成键盘美观,与单片机的接口少,但是它的成本比较高。单片机的IO口对于我们的设计绰绰有余。通常我们选用价格便宜单个复位开关做成键盘。因此我们选择方案2.2.7 呼吸灯系统方案选择方案1:通过阳极控制LED灯使其发光。方案2:通过阴极控制LED灯使其发光。虽然呼吸灯阳极阴极控制原理相似,但是用阳极控制更加方便,也较为熟悉,因此我们选择
11、方案1.3. 时钟温度系统总体设计 初步确定设计系统由单片机主控模块、时钟模块、测温模块、呼吸灯模块、显示模块、键盘接口模块共6个模块组成,电路系统框图如图(1)所示。 二硬件设计部分 1 单片机最小系统电路设计 1.1 单片机芯片选择单片机采用51系列单片机。其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工
12、业标准的MCS-51指令集和输出管脚相兼容。AT89C51具有以下标准功能: 4k字节Flash,128字节RAM,32 位I/O 口线,两个16 位定时器/计数器,5个中断源,可编程串行通道片,片内振荡器和时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其芯片外观及引脚图如下: 图1.1_1 图1.1_21.2 单片机管脚说明VCC:供电电压GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定
13、义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,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”时,其管脚被内部上拉电阻拉高,且作为输入
14、。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能
15、口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.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端以不变的频率周期输出
16、正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序
17、存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。1.3 单片机最小系统单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。1) 复位电路 复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。 如下图所示:2) 晶振电路晶振电路原理图如3-2:3-2晶振模块原理图 选取原则:电容选取30pF,晶振为12MHz。3) 电源AT89C51单片机的供电电源是5V的直流电。4) E
18、A非/Vpp 脚我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。2 时钟系统电路设计通过单片机内部的定时器/计数器,用软件实现,直接用单片机的定时器编程以实现时钟。3 温度系统电路 3.1 温度芯片的选择 温度实现只能通过外部的温度传感器来实现。经上网查阅资料及市场考察,DS18b20体积小,只有3只脚,电路接法简单。它能够直接读出被测温度。内部含有寄存器为我们设计实现上下限报警功能提供保障。用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;精度为0.5C,也符合我们设计的要求。DS18B20也是我们通常使用的型号,因此温度传
19、感器用DS18B20。3.2 DS18B20内部结构描述DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8个字节的存储器,结构如图4.1所示。头两个字节包含测得的温度信息,第三和第四字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第五个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如图4.2所示。低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。温度 LSB温度 MSBTH 用户字节1TL
20、 用户字节2配置寄存器保留保留保留 CRC图 4.1高速暂存RAM结构图1字节2字节 3字节 4字节 5字节6字节 7字节 8字节9字节EEROMTH 用户字节1TL 用户字节2TMR1R011111图 4.2 配置寄存器3.3 DS18B20温度系统电路 DS18B20系统电路如下: DS18B20有两种接法:一是单线接法即只接QT。这种方法应用它内部的寄生电源,因此在QT上要用一个MOSFET把I/O线只接拉到电源上。二是从vdd脚加上电源。方法一适合于远距离温度监控,不需要本地电源。而我们只是设计测温系统,选择方法二就行了,还有MOSFET极容易烧,我们不用它。Vdd接5V电源,vss接
21、地,QT与P2.7相连。因为DS18B20的工作电流约为1MA,因此Qt端还要加上拉电阻为其提供电流。若用5V电源,则R=5/1MA=5k。R取4.7K。4 键盘控制系统设计 按键需要4个,分别实现为时间调整、时间的加、时间的减、退出四个功能。用单片机的4x4矩阵键盘I/O口接收控制信号,其电路图如下: 4x4按键的一端与地相连,另一端分别与P1.0、P1.1、 P1.2、P1.3、P1.4、P1.5、 P1.6、P1.7、相连。这时当按键按下就输入低电平。5 闹钟电路系统设计闹铃电路由蜂鸣器、三极管、电阻等构成电路图如下: 它与单片机的接口是P2.4。6 液晶显示系统设计6.1 1602液晶
22、显示简介 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。6.2 1602引脚说明1602采用标准的16脚接口,其中:第1脚:VSS为电源地。第2脚:VCC接5V电源正极。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最
23、弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。6.3 1602液晶显示特性3.3V或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显
24、示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM6.4 12864F液晶显示电路设计中采用 LCD12864液晶显示。它一般串口、并口两种方式显示,而我们一般采用并口显示。12864的4、5、6、15、17脚分别与单片机的P3.0、P3.4相连。714脚与单片机的P0口相连。1、20号脚接地,2号脚接电源,19号脚背光灯正端串一个电阻与电源相连,电阻起限流的作用,我们取R=10K。3号脚是对比度(亮度)调整,这里要用一个滑动变阻器来调整亮度,这里我们取电位器大小为10K。 LCD1602显示电路如下图所示:7 总体硬件系
25、统设计1. 由于材料有限,我们只能使用大小为10x15(cm)大的双面都带有铜的铜板,通过Altiun designed软件画好PCB图,通过油纸打印出来把电路图附在铜板上,通过腐蚀液腐蚀掉多余的铜,从来制作出电路板。2. 各电气元件的连接,我们采用单、排针和杜邦线相连。这样为我们避免各元件的跨接,对我们对线路的排错提供方便。3. 上述六个模块可以按原理图整齐的焊接在电路板。最后效果,板子正面连线错横复杂,板子反面横整齐。三软件设计部分 本系统的软件系统主要分为主程序、液晶程序、时钟程序、温度程序、键盘控制程序、液晶显示程序。 3.1 主程序 系统主程序首先对系统进行初始化,包括设置定时器、液
26、晶、DS18B20和端口的初始化;由于单片机没有命令指令,所以可以设计系统程序不断地循环执行液晶显示时间程序即show_time()程序。如果单片机接收命令指令,就执行相应的程序及闹钟是否到的判断,执行相应的及铃声程序。简单流程图如下: 3.2 液晶程序LCD1602的程序主要是对内部控制指令进行指定如液晶初始化,显示空白,读,写,判断液晶是否忙及指定字符的位置等函数构成。了解LCD1602的内部结构及控制指令和网上大部分程序模块大致相同。3.3 时钟数据处理程序单片机通过控制运行自行编程的时钟程序,从而获得年月日,时分秒,星期等数据,并且通过显示器显示。3.4 DS18B20温度数据处理程序
27、 DS18B20数据处理对芯片内部数据处理获得液晶的显示字符。它主要包括DS18B20的初始化,读写一个字节,读取DS18B20中的数据和对数据的转换液晶显示的字符。对DS18B20的精度进行不同定义可得到不同精度。部分流程如图3.1 。3.5 键盘控制程序 键盘的控制是本系统的核心,也是本系统的最复杂的部分。通过按键设置,改变芯片内数据达到调时的效果,设置闹钟,设置温度上下限等功能。我们设置4x4个按键分别是设置(set),上(up),下(down),退出(out)。我们首先按set就进入功能选择界面,通过上下键选择功能,再按set进入功能设置界面,按set改变设置项目及退出,按上下键改变所
28、设置的值。按out键退出到时钟显示界面。3.6 液晶显示程序液晶显示程序是对单片机内数据视化,让用户更直观方便观察结果及对功能的设置。在程序中加入闪烁,使显示更加直观。YESYESNONO初始化调用显示子程序读出温度值温度计算处理显示数据刷新发温度转换开始命令1秒到?初次上电?图3.1 DS18B20温度计主程序流程图 3.7 其他程序 其他程序包括延时程序,闹铃程序、呼吸灯程序。闹铃程序、呼吸灯程序用延时函数来实现。3.8 程序中的注意点1. 按键处理防抖动应加延时函数。2. 程序用调用函数,最好在头文件申明函数,主函数一般最后写。3. 为了使程序更加容易写,我们要分模块来完成程序。四软硬件
29、调试部分 1) 软件调试 软件调试,我是在keil软件平台和单片机学习板上来完成的。当我写部分程序在keil软件经过调试,开始出现很多错误和警告。通过逐个错误排错及修改。得出下列经验,(1)调用函数最好在头文件中进行申明,主函数写在最后; (2) 特别注意一些字母的大小写,一般要用英语文字写,不要用中文汉写,这是最不容易检查的,如我在检查液晶显示程序时,时钟没检查到错误,最后我删掉此行重新写,错误排除了,据我分析可能是中英文变换时出现问题。 经过一系列排错,最后文件没有错误但还有警告。由于c语言中有警告是没关系的,我将HEX文件下在到单片机竟显示一些乱码。我有回到文件,经过对警告的分析及上网查
30、阅。将程序稍微修改警告慢慢被排除,最后没有错误和警告了,下载到单片机,发现乱码竟然还出现,还有多个界面叠加显示,里面还有一些乱码。经过分析,叠屏现象是没有对液晶清平所致。于是我又在不同界面程序前加入调用填充空格函数(void clrram_lcd ()),然后又下载,结果与前面一样,崩溃啊!经过几个小时后,无意间我去掉 调用函数前void。结果叠屏现象解决。但是显示还是乱码。谢天谢地啊!有进步! 又经过几天,排错,上网查阅与参考程序对照。最后在void R1302()函数中DS1302InputByte(ucAddr|0x01);掉了|0x01,加上生成HEX文件,下载到单片机中。能够正常显示
31、了。呵呵!又进一步!最后对程序进行相应的扩展完善,由于按键不灵敏我们加上声音程序。加上另一个闹钟实现设计需求。 通过单片机学习板对照,程序基本实现我所预期的要求,但是界面显示闹钟1,闹钟2闪烁时,液晶竟然出现显示淡化。据分析,可能使程序的问题。由于这部分显示复杂,用了多个if语句,可能出现语句冗余。我只有问度娘啰! 2)硬件调试 硬件调试,我们用万用表,单片机学习板来完成的。首先,我们调试LCD1602显示。我将液晶显示程序下载到单片机内,连好所有的线,通电后,观察显示结果。唉!液晶竟然不显示。我们用万用表测试各连线是否导通及某些点的电压,发现没问题。最后在网上发现我的P0口竟然没接上拉电阻,
32、通过计算电阻应该去5K至10K,我们选用4.7k的电阻。由于没准备多的电阻,我在以前买的电阻找到了4.7k的电阻。开始布局没有为上拉电阻留下空间,我们在单片机插槽里插电阻,解决一些连线的复杂度。后来在调试液晶能够显示了。然后,我们调试DS1302时钟芯片。连上按键模块,液晶显示模块,单片机 最小系统,时钟系统,温度系统,连接所有线,通上电源后,我们观察到液晶显示 20858585 85:85:85 20.125C 温度能正常显示,时钟不能正常显示。我们还是用万用表检查所用线路,对照电路原理图,最后发现时钟上拉电阻没焊上电源。接上电源后,时钟能够正常显示,按键也能控制。 最后,我们对报警模块进行
33、简单调试。最后发现没问题 整个硬件调试完成。 五总结与体会经过将近一个星期的设计,终于完成LCD液晶时钟设计,虽然达到设计要求,但单片机的资源并没完全应用,毕竟这次设计把实物都做了出来,心底是很高兴的,这次不是用单片机学习板而是自己动手制作的作品。在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法。这次设计是液晶,单片机,键盘控制的综合应用,其间,遇到许多困难,甚至,有时竟然想放弃。从这次的课程设计中,我真真正正的意识到,在写程序时,逻辑思维要清晰,要有耐心。在以后的学习中,要理论联系实际,
34、把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设计中的最大收获。参考文献:1.单片机学习板配套资料2.C语言程序设计 谭浩强编 清华大学出版社3.单片机原理与应用及C51程序设计 谢维成 杨加国 主编 清华大学出版社附件:LCD液晶时钟设计原理电路图另外再附上我们的PCB图LCD液晶时钟设计部分参考程序液晶部分显示程序: #include#include #define uchar unsigned char #define uint unsigned intsbit BEEP = P37; sbit rs=P20;sbit rw
35、=P21;sbit ep=P22;sbit s1=P10;sbit s2=P11;sbit s3=P12;sbit s4=P13;sbit rd=P14;sbit DQ = P33 ; /定义DS18B20端口DQ bit presence ; /检测18b20是否插好uchar count,s1num,num,num2;char m,n,miao,shi,fen,yue,ri,week;uchar data armhour,armmin,armsec;/闹钟时、分、秒uint nian;unsigned char code dis_week=THU,FRI,SAT,SUN,MON,TUE,W
36、ED;uchar code table=B 2013-01-01 ;uchar code table1=23:59:55 ;bitarm;/标识是否启用闹钟,1-启用,0-关闭unsigned char code para_month13=0,0,3,3,6,1,4,6,2,5,0,3,5;/星期月参变数unsigned char data temp_data2 = 0x00,0x00 ;unsigned char data display5 = 0x00,0x00,0x00,0x00,0x00 ;unsigned char code ditab16 = 0x00,0x01,0x01,0x02
37、,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ;void beep() ; unsigned char code mytab8 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00 ;#define delayNOP() ; _nop_() ;_nop_() ;_nop_() ;_nop_() ; ;/ 延时程序void delay(unsigned char ms)while(ms-)unsigned char i;for(i = 0; i 250; i+) _nop_(); /执行一
38、条_nop_()指令为一个机器周期_nop_();_nop_();_nop_();/测试LCD忙碌状态bit lcd_busy()bit result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result =(bit)(P0&0x80);/LCD的D0-D7中,D7=1为忙碌,D7=0为空闲ep = 0;return result;/写入指令到LCDvoid lcd_wcmd(char cmd)while(lcd_busy();/当lcd_busy为1时,再次检测LCD忙碌状态,lcd-busy为0时,开始写指令rs = 0;rw = 0;ep = 0;_nop_();_
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100