单片机课程设计(论文)液晶显示电子万历年

上传人:仙*** 文档编号:33024759 上传时间:2021-10-16 格式:DOC 页数:31 大小:3.44MB
返回 下载 相关 举报
单片机课程设计(论文)液晶显示电子万历年_第1页
第1页 / 共31页
单片机课程设计(论文)液晶显示电子万历年_第2页
第2页 / 共31页
单片机课程设计(论文)液晶显示电子万历年_第3页
第3页 / 共31页
点击查看更多>>
资源描述
天津理工大学专业设计报告设计题目:液晶显示电子万历年设计人: 系别:电子信息工程系 专业:电子信息科学与技术指导老师:时间:2010年12月1日至2010年12月31日目 录关键词:时钟日历;AT89S52;LCD1602;DS12887;DS18B20;单片机第1章 设计要求与方案论证 1.1 设计要求1.2系统基本方案选择和论证1.2.1单片机芯片的选择方案和论证 21.2.2 显示模块选择方案和论证 21.2.3 时钟芯片的选择方案和论证 2第2章 系统的硬件设计与实现 2.1 电路设计框图 32.2 系统硬件 32.2.1系统硬件概述32.2.2元件叙述32.3 主要单元电路的设计 102.3.1单片机主控制模块的设计 102.3.2时钟电路模块的设计 102.3.3 LCD1602液晶显示模块的设计 112.3.4 电路原理及说明 12第3章 系统的软件设计3.1程序流程框图 143.2 子程序的设计 153.2.1读写日期、时间子程序153.2.2 各功能按键子程序16第4章 测试方案及结果4.1 测试仪器204.2硬件测试204.3软件测试204.测试结果分析与结论204.4.1 测试结果分析204.4.2 测试结论20参考文献21附录一:系统电路图22附录二:系统程序清单23附录三:系统使用说明书29第1章 设计概述1.1设计要求()基本要求 具有年、月、日、星期、时、分、秒等功能; 具备年、月、日、星期、时、分、秒校准功能;( 2 ) 创新要求 具有设置闹钟功能; 具备闹铃功能;1.2 系统基本方案选择和论证1.2.1单片机芯片的选择方案和论证:方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二: 采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用AT89S52作为主控制系统.1.2.2 显示模块选择方案和论证:方案一:采用LED数码管动态扫描,LED数码管价格便宜,而且采用动态扫描法与单片机连接时,占用的单片机口线少,但是如果显示年月日、时分秒、星期、温度,要求的LED数码管数量比较多,而且接线麻烦,所以不采用LED数码管作为显示。方案二: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案三: 采用LCD1602液晶显示屏,价格相对比较贵,但是液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,令作品效果更佳,所以在此设计中建议采用LCD1602液晶显示屏。1.2.3时钟芯片的选择方案和论证:方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二: 采用DS12887时钟芯片实现时钟,DS12887芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA. 1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS12887提供时钟; LCD1602液晶显示屏作为显示。第二章 系统硬件设计与实现2.1 电路设计框图AT89S52主控制模块键盘模块温度采集模块LCD1602液晶显示模块DS12887时钟模块2.2 系统硬件2.2.1系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS12887提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS12887内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;显示部份由LCD1602液晶显示屏对数字、字母的显示。2.2.2元件叙述(1)AT89S52主要性能: 与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、1000次擦写周期、 全静态操作:0Hz33Hz 、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。 功能特性描述 At89s52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K 字节在系统可编程 Flash AT89S52 P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2 的触发输入(P1.1/T2EX),具体如下表所示。 在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能 P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用) P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些控制信号。(2)1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图:图1602字符型液晶显示器实物图1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表1:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表2所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表2:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序表如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表3:基本操作时序表读写操作时序如图2.1和2.2所示:图2.1 读操作时序图2.2 写操作时序1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图2.3是1602的内部显示地址。图2.3 1602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图2.4所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”图2.4 字符代码与图形对应图2.4 1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置(3)DS12887器件特性DS12C887 实时时钟芯片功能丰富,可 以用来直接代替 IBM PC 上的时钟日历芯片 DS12887,同时,它的管脚也和 MC146818B、DS12887 相兼容。由于 DS12C887 能够自动产生世纪、 年、月、日、时、分、秒等时间信息,其内 部又增加了世纪寄存器,从而利用硬件电路 解决子“千年”问题;DS12C887 中自带有锂电 池,外部掉电时,其内部时间信息还能够保 持 10 年之久;对于一天内的时间记录,有12 小时制和 24 小时制两种模式。在 12 小时 制模式中,用 AM 和 PM 区分上午和下午; 时间的表示方法也有两种,一种用二进制数 表示,一种是用 BCD 码表示;DS12C887 中 带有 128 字节 RAM,其中有 11 字节 RAM 用来存储时间信息,4 字节 RAM 用来存储 DS12C887 的控制信息,称为控制寄存器,113 字节通用 RAM 使用户使用;此外用户还 可对 DS12C887 进行编程以实现多种方波输 出,并可对其内部的三路中断通过软件进行 屏蔽。引脚功能DS12C887 的引脚排列如图 1 所示,各管脚的功能说明如下:GND、VCC:直流电源,其中 VCC 接+5V 输入,GND 接地,当 VCC 输入为+5V 时,用 户可以访问 DS12C887 内 RAM 中的数据,并可对其进行读、写操作;当 VCC 的输入小于+4.25V 时,禁止用户对内部 RAM 进行读、写操作,此时用户不能正确获取芯片内的时间信 息;当 VCC 的输入小于+3V 时,DS12C887 会自动将电源发换到内部自带的锂电池上,以保证 内部的电路能够正常工作。(1)MOT:模式选择脚,DS12C887 有两种工作模式,即 Motorola 模式和 Intel 模式,当 MOT 接 VCC 时,选用的工作模式是 Motorola 模式,当 MOT 接 GND 时,选用的是 Intel 模式。本 文主要讨论 Intel 模式。(23)SQW:方波输出脚,当供电电压 VCC 大于 4.25V 时,SQW 脚可进行方波输出,此时用 户可以通过对控制寄存器编程来得到 13 种方波信号的输出。AD0AD7:复用地址数据总线,该总线采用时分复用技术,在总线周期的前半部分,出 现在AD0AD7 上的是地址信息,可用以选通 DS12C887 内的 RAM,总线周期的后半部分出 现在 AD0AD7 上的数据信息。(14)AS:地址选通输入脚,在进行读写操作时,AS 的上升沿将 AD0AD7 上出现的地址信 息锁存到 DS12C887 上,而下一个下降沿清除 AD0AD7 上的地址信息,不论是否有效, DS12C887 都将执行该操作。(17)DS/RD:数据选择或读输入脚,该引脚有两种工作模式,当 MOT 接 VCC 时,选用 Motorola 工作模式,在这种工作模式中,每个总线周期的后一部分的 DS 为高电平,被称为数 据选通。在读操作中,DS 的上升沿使 DS12C887 将内部数据送往总线 AD0AD7 上,以供外 部读取。在写操作中,DS 的下降沿将使总线 AD0AD7 上的数据锁存在 DS12C887 中;当 MOT 接 GND 时,选用 Intel 工作模式,在该模式中,该引脚是读允许输入脚,即 Read Enable。(15)R/W:读/写输入端,该管脚也有 2 种工作模式,当 MOT 接 VCC 时,R/W 工作在 Motorola 模式。此时,该引脚的作用是区分进行的是读操作还是写操作,当 R/W 为高电平时 为读操作,R/W 为低电平时为写操作;当 MOT 接 GND 时,该脚工作在 Intel 模式,此时该作 为写允许输入,即 Write Enable。(13)C()S():片选输入,低电平有效。(19)I()R()Q():中断请求输入,低电平有效,该脚有效对 DS12C887 内的时钟、日历和 RAM 中的 内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,RESET 可以直接接 VCC,这样可以保证 DS12C887 在掉电时,其内部控制寄存器不受影响。2.3 主要单元电路的设计2.3.1单片机主控制模块的设计 AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图所示, P30 P31 P32接时钟校准电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第16引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,19引脚为接地端,40引脚为电源端. 如图2.3.1 所示图2.3.1主控制系统2.3.2时钟电路模块的设计图2.3.2示出DS12887的引脚排列,其中Vcc为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS12887由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS12887供电。当Vcc2小于Vcc1时,DS12887由Vcc1供电。X1和X2是振荡源,外接32.KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS12887进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。图2.3.2 DS12887时钟电路2.3.3 LCD1602液晶显示模块的设计LCD1602液晶与单片机接口如图2.3.3所示。接口说明如下:(1) 液晶1,2端为电源;15,16为背光电源;为防止直接加5V电压烧坏背光灯,在15脚串接一个10电阻用于限流。(2) 液晶3端为液晶对比度调节端,通过一个10电位器接地来调节液晶显示对比度。首次使用时,在液晶上电状态下,调节至液晶上面一行显示出黑色小格为止。(3) 液晶4端为向液晶控制器写数据/写命令选择端,接单片机的P3.5口。(4) 液晶5端为读/写选择端,因为我们不从液晶读取任何数据,只向其写入命令和显示数据,因此此端始终选择为写状态,即低电平接地。(5) 液晶6端为使能信号,是操作时必需的信号,接单片机的P3.4口。图2.3.3 LCD1602显示电路2.3.4 电路原理及说明(1) 时钟芯片DS12c887的工作原理: DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2) DS12c882的控制字节DS12c88的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS12c88中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 RAM RD 1 A4 A3 A2 A1 A0 / CK /WR 表-1 DS12c88的控制字格式(3) 数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS12c88,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS12c88的数据,读出数据时从低位0位到高位7。如下图-4所示 图-4 DS12c88读/写时序图(4) DS12c88的寄存器DS12c88有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。 表-2 DS12c88的日历、时间寄存器 此外,DS12c88 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS12c88与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。第三章 系统的软件设计开始初始化读、写日期、时间分离日期时间星期显示值显示子程序Key3时钟减1调节子程序Key2时钟加1调节子程序返回Key1功能键子程序3.1程序流程框图 图-A 主程序流程图 图-B计算日期程序流程图 图-C 时间调整程序流程图3.2 子程序的设计3.2.1 读写日期、时间子程序20 void write_sfm(uchar add,uchar dat) /写时分秒的程序uchar sh,g;sh=dat/10;g=dat%10;write_com(0x80+0x40+add);write_dat(0x30+sh); /1602字符手册里的数字对应的编码值write_dat(0x30+g);void write_nyr(uchar add,uchar dat)/写年月日的程序uchar sh,g;sh=dat/10;g=dat%10;write_com(0x80+add);write_dat(0x30+sh);write_dat(0x30+g);void write_week(char we) /写液晶星期显示函数write_com(0x80+12);switch(we)Case1: write_dat(M);delay(5);write_dat(o);delay(5);write_dat(n);break;case2: write_dat(T);delay(5);write_dat(u);delay(5);write_dat(e);break;case3: write_dat(W);delay(5);write_dat(e);delay(5);write_dat(d);break;case4: write_dat(T);delay(5);write_dat(h);delay(5);write_dat(u);break;case5: write_dat(F);delay(5);write_dat(r);delay(5);write_dat(i);break;case6: write_dat(S);delay(5);write_dat(a);delay(5);write_dat(t);break;case7: write_dat(S);delay(5);write_dat(u);delay(5);write_dat(n);break;3.2.2 各功能按键子程序void keyscan() /键盘扫描程序rd=0; /键盘的列端口设置if(flag1=1)if(key1=0)|(key2=0)|(key3=0)delay(5);if(key1=0)|(key2=0)|(key3=0)while(!(key1&key2&key3);didi();flag1=0; if(key1=0)delay(5); /延时消抖if(key1=0)/确认按键是否按下flag=1;flag1=0;k+;while(!key1);/松手检测if(k=1) /按下功能键停止计时并分别用光标指向时分秒年月日进行调整TR0=0;write_com(0x80+0x40+11); /设置光标为写命令后不加1write_com(0x0f);/设置光标为闪烁状态if(k=2)write_com(0x80+0x40+8);if(k=3)write_com(0x80+0x40+5);if(k=4)write_com(0x80+10);if(k=5)write_com(0x80+7);if(k=6)write_com(0x80+4);if(k=7)write_com(0x80+14);if(k=8) /最后再按下功能键确认开始重新计时k=0;write_com(0x0c);flag=0;write_ds(0,miao);write_ds(2,fen);write_ds(4,shi);write_ds(6,week);write_ds(7,day);write_ds(8,mon);write_ds(9,year);if(k!=0) /在key1键按下的情况下才能使用 加值(key2)功能键if(key2=0) delay(5);if(key2=0) while(!key2); if(k=1) /秒加1(按下Key即秒加一) miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+11);if(k=2) /分加1 fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+8);if(k=3) /时加1 shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+5);if(k=4) /day加1 day+;if(day=32)day=0;write_nyr(9,day);write_com(0x80+10);if(k=5) /mon加1 mon+;if(mon=13)mon=0;write_nyr(6,mon);write_com(0x80+7);if(k=6) /year加1 year+;if(year=100)year=0;write_nyr(3,year);write_com(0x80+4);if(k=7) /week加1 week+;if(week=8)week=1;write_week(week);write_com(0x80+14);if(key3=0)/在key1键按下的情况下才能使用 减值(key3)功能键delay(5);if(key3=0)while(!key3);if(k=1) /秒减1 miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+11); if(k=2) /分减1 fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+8); if(k=3) /时减1 shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+5); if(k=4) /day减1 day-;if(day=0)day=31;write_nyr(9,day);write_com(0x80+10); if(k=5) /mon减1 mon-;if(mon=0)mon=12;write_nyr(6,mon);write_com(0x80+7); if(k=6) /year减1 year-;if(year=0)year=99;write_nyr(3,year);write_com(0x80+4); if(k=7)/week减1 week-;if(week=0)week=7;write_week(week);write_com(0x80+14); 第四章 测试方案及结果4.1 测试仪器序号名称型号1PC机LXB-HF769A2双路直流稳压电源CA17303D3V8通用单片机仿真器V8/L4数字万用表DT92085ISP在线编程器4.硬件测试电子万年历的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。4.软件测试电子成年历是多功能的数字型,可以看当前日期(阴、阳历),时间,还有温度的仪器。电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。在软件的调试过程中主要遇到的问题如下:1烧入程序后,LCD1602液晶显示显示乱码,而且亮度不够。解决:首先对1602液晶显示初始化程序和往1602液晶的写数据程序进行逐渐修改,可以解决显示乱码问题。其次,LCD1602液晶显示亮度不够,通过调节3端口的电位器,最后解决了此问题。2使用Key3减1功能键调节时间、日期、星期时显示在液晶显示的第一行始位置。解决:可能是程序的不严谨,所以造成了显示错乱,不过调节后再按下Key4复位功能键显示就正常了,最后也算解决了此问题。4.测试结果分析与结论4.1 测试结果分析(1)在测试中遇到发时钟芯片在1602液晶上不能显示正确的时间,却显示“I5”,首先对DS12c887时钟与AT89S52单片机的接线进行检查,观察是否存在接错,漏接,或者使用万用表检查杜邦线是否损坏。(2)LCD1602液晶显示屏有时背光灯不亮,首先使用试测仪对电路进行测试,观察电路是否存在短路现象,检查和排针是否接触不良。查看烧写的程序是否正确无误,对程序进行认真修改。4.4.2 测试结论经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力,同时在软件的编程方面得到更到的提高,对编程能力得到加强。同时对所学的知识得到很大的提高与巩固。参考文献1 白延敏 编 51单片机典型系统开发 电子工业出版社 20092 孙慧芹 编 单片机项目设计教程 电子工业出版社20093 郭天祥 编 新概念单片机C语言教程 电子工业出版社20104 赵 辉 编 Protel 99 电子线路CAD 北京邮电大学出版社 2008附录一系统电路图附录二系统程序清单- 30 -#include#define uchar unsigned char#define uint unsigned intsbit e=P34; /1602液晶的使能sbit rs=P35; /1602液晶的片选sbit dula=P26;sbit wela=P27;sbit key1=P30; /第一按键功能:调节时间选择位sbit key2=P31; /第二按键功能:加值键sbit key3=P32; /第三按键功能:减值键sbit rd=P37; /矩阵键盘一根线设置为0,用其中四个做独立按键sbit dscs=P14;sbit dsas=P15;sbit dsrw=P16;sbit dsds=P17;sbit dsirq=P33;sbit beep=P23;uchar code table1= 20 - - ; /初始1602液晶显示的内容uchar code table2= : : ;uchar count,k,week,mon,day,year,flag,flag1; /定义年月日char shi,fen,miao; /定义时分秒和星期(char型,因为要判断其值时出现-1)void write_ds(uchar,uchar);void set_alarm(uchar,uchar,uchar);uchar read_ds(uchar);void set_time();void delay(uint z) /延时函数uint i,j;for(i=z;i0;i-)for(j=110;j0;j-);void didi() beep=0;delay(50);beep=1;delay(100);beep=0;delay(50);beep=1;void write_com(uchar com) /1602液晶写命令程序rs=0;P0=com;e=0;delay(5);e=1;delay(5);e=0;delay(5);void write_dat(uchar dat) /1602液晶写数据程序rs=1;P0=dat;e=0;delay(5);e=1;delay(5);e=0;delay(5);void write_sfm(uchar add,uchar dat) /写时分秒的程序uchar sh,g;sh=dat/10;g=dat%10;write_com(0x80+0x40+add);write_dat(0x30+sh); /1602字符手册里的数字对应的编码值write_dat(0x30+g);void write_nyr(uchar add,uchar dat)/写年月日的程序uchar sh,g;sh=dat/10;g=dat%10;write_com(0x80+add);write_dat(0x30+sh);write_dat(0x30+g);void write_week(char we) /写液晶星期显示函数write_com(0x80+12);switch(we)case 1: write_dat(M);delay(5);write_dat(o);delay(5);write_dat(n);break;case 2: write_dat(T);delay(5);write_dat(u);delay(5);write_dat(e);break;case 3: w
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!