




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)题 目 基于单片机在电子万年历中的应用 目 录 摘要11系统基本方案选择和论证21.1核心单片机的选择21.2显示模块选择方案和论证21.3时钟芯片的选择方案和论证21.4温度传感器的选择方案与论证32系统硬件的设计与实现42.1电路设计框图42.2系统硬件概述42.3STC90C516RD+单片机主控制模块的设计52.4单片机中断系统62.5时钟电路模块的设计72.6温度采集模块设计92.7显示模块的设计103各器件工作原理113.1 时钟芯片DS1302的工作原理113.2LCD12864工作原理及说114系统的软件设计194.1主程序流程框图194.2子程序214.3 软件测试21总结22参考文献23基于单片机在电子万年历中的应用胡俊朋摘 要:本文借助电路仿真软件ISIS 7 Professional对基于STC90C516RD+单片机的电子万年历的设计方法及下载测试进行了全面的阐述。该电子万年历在硬件方面主要采用STC90C516RD+单片机作为主控核心,由DS1302时钟芯片提供时钟、LCD12864点阵液晶显示屏显示。STC90C516RD+单片机是由Atmel公司推出的,功耗小,电压可选用46V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LCD液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒等信息。此外,该电子万年历还具有时间校准等功能。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,进行下载调试。论文主要研究了液晶显示器及时钟芯片DS1302,温度传感器DS18B20与单片机之间的硬件相互之间通信,对数种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。关键词:单片机STC90C516RD+;DS1302;DS18B20;LCD12864 随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间的同时,能够了解其它与人类密切相关的信息,比如温度、星期、日期等,电子万年历诞生了,它集时间、日期、星期和温度功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点。伴随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便,作为一种附加功能,现在越来越广泛的被应用于各种电子产品中,具有广阔的市场前景。 通过以往对工业自动化的相关课程学习和理解独立完成制作电子万年历的设计。电子万年历作为电子类小产品不仅是市场上的宠儿,也是单片机设计培训中一个很实用的题目。因为这个课题有很好的开放性和可发挥性,对制作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且要求设计的电子万年历在操作上力求简洁,功能上尽量齐全,显示界面也要出色。所以,电子万年历制作无论从实用目的,还是从培养能力的角度来看都是很有价值的毕业设计课题。本电子万年历的设计在硬件方面主要采用STC90C516RD+单片机作为主控核心,由DS1302时钟芯片提供时钟、DS18B20温度传感器、LCD12864点阵液晶显示屏显示。一、 系统基本方案选择和论证(一)、核心单片机芯片的选择本设计采用STC90C516RD+芯片作为硬件核心,该芯片采用Flash ROM,内部具有64KB ROM存储空间,相对于本设计而言程序空间完全够用。STC90C516RD+系列单片机是宏晶科技推出的新一代超强/高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下时,复位脚可直接接地。共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用。外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒。通用异步串行口(UART),还可用定时器软件实现多个UART。工作温度范围:0-75/-40-+85。封装:LQFP-44,PDIP-40,PLCC-44。工作电压:5V-3.5V;注意:当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,避免芯片的多次拔插对芯片造成的损坏。(二)、显示模块选择方案和论证方案一: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,成本较高,所以不采用此种作为显示.方案二: 采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在程序和电路调试时往往会有很多障碍,所以不采用LED数码管作为显示。方案三: 采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量汉字,图形,显示多样,清晰可见,对于电子万年历而言,一个12864的液晶屏即可,价格也还能接受,需要的接口线较少,便于调试,所以此设计中采用12864液晶显示屏作为显示模块.(三)、时钟芯片的选择方案和论证方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然可以减少时钟芯片的使用,节约成本,但是,程序量较大不易修改而且实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源Vcc2/后背电源Vcc1双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。因此,本设计中采用DS1302提供时钟信号。(四)、温度传感器的选择方案与论证方案一: 使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。因此,不采用此方法。方案二: 采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以避免A/D模数转换模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。因此,本设计DS18B20温度传感器作为温度采集模块。 综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用STC90C516RD+作为主控制系统;DS1302提供时钟;DS18B20作为数字式温度传感器;LCD12864液晶屏作为显示。二、系统硬件的设计与实现(一)、电路设计框图 本系统的电路系统框图如图1所示。STC90C516RD+单片机对DS1302和DS18B20写入控制字并读取相应的数据,继而控制LCD12864作出对应的显示。LCD12864液晶显示模块STC90C516RD+主控模块键盘控制模块DS1302时钟模块温度采集模块 图1 系统硬件框图(二)、系统硬件概述本电路设计采用STC90C516RD+芯片作为硬件核心,该芯片采用Flash ROM,内部具有64KB ROM存储空间,相对于本设计而言程序空间完全够用。STC90C516RD+系列单片机是宏晶科技推出的新一代超强/高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下时,复位脚可直接接地。工作温度范围:0-75/-40-+85。封装:LQFP-44,PDIP-40,PLCC-44;工作电压:5V。 时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。温度的采集由DS18B20完成,它具有独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,测温范围 55125,检测精度正负0.5C,支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温,工作电源:35V/DC,在使用中不需要任何外围元件。液晶显示模块是12864点阵的汉字图形液晶显示模块,可显示汉字及图形,内置8192个中文汉字(1616点阵)、128个字符(816点阵)及64256点阵显示RAM(GDRAM)。可与CPU直接接口,提供两种界面来连接微处理器:8-位并行及串行两种连接方式。具有多种功能,画面移位、睡眠模式等。(三)、STC90C516RD+单片机主控制模块的设计STC90C516RD+系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051系列单片机,指令代码完全兼容传统8051,但速度快8-12倍。针对万年历控制,强干扰场所。其重要性能特点如下:增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;工作电压:5.5V-3.5V;工作频率范围:0-35MHz;用户应用程序空间64K字节;片上集成256字节RAM;通用I/O(32个),复位后为:准双向口/弱上拉;可设置成4种模式:准双向口/弱上拉。强推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均能达到20mA,但整个芯片最大不要超过120mA;ISP(在系统编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(P3.0/P3.1)直接下载应用程序,数秒钟即可完成一片;有EEPROM功能;看门狗;具备双串口;工作温度范围:0-75(商业级),-40-+85(工业级);40管教封装。 有图2可知,单片机18和19管脚接时钟电路,19管脚接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入;18管脚接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。9管脚是复位输入端RST,接上电阻电容及开关后构成上电复位电路。31管脚,当只访问内部程序存储器时该管脚直接接高电平。端口P0、P1、P2、P3为单片机的输入和输出端口,特别的当P0输出高电平时,必须接上拉电阻。其中P0端口可以做8位的数据总线和地址总线。P2端口可以作为8位的地址总线。P3端口还可以作为中断的输入端口复用。29引脚为程序存储器允许输出控制端,当单片机访问外部程序存储器时,此引脚输出的低电平作为读外部程序存储器的选通信号。30引脚ALE为地址锁存允许信号,当单片机上电正常工作时,ALE引脚不断地输出正脉冲信号。图2 单片机最小系统(四)、单片机中断系统 在提及单片机的最小系统后,现对单片机的另一重要应用系统即中断系统做一个比较详细的介绍。 在CPU 与外设交换信息时,存在着一个快速CPU与慢速的外设之间的矛盾。为解决这个问题,发展了中断的概念。单片机在某一时刻只能处理一个任务,当多个任务同时要求单片机处理时,这一要求应该怎么实现呢?通过中断可以实现多个任务的资源共享。所谓的中断就是,当CPU正在处理某项事务的时候,如果外界或者内部发生了紧急事件,要求CPU暂停正在处理工作而去处理这个紧急事件,待处理完后,再回到原来中断的地方,继续执行原来被中断的程序,这个过程称作中断。 从中断的定义我们可以看到中断应具备中断源、中断响应、中断返回这样三个要素。中断源发出中断请求,单片机对中断请求进行响应,当中断响应完成后应进行中断返回,返回被中断的地方继续执行原来被中断的程序。MCS-51单片机的中断源共有两类,它们分别是:外部中断和内部中断。外部中断0(INT0)来自P3.2引脚,通过外部中断0触发方式控制位IT0(TCON.0),来决定中断输入信号是低电平有效还是负跳变有效。一旦输入信号有效,便使IE0标志置一,向 CPU申请中断;外部中断1(INT1)来自P3.3引脚, 通过外部中断1触发方式控制位IT1(TCON.2),来决定中断输入信号是低电平有效还是负跳变有效。一旦输入信号有效,便使IE0标志置一,向CPU申请中断。内部中断有三个:TF0,TF1,RI或TI。TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断;TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断;RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。 MCS-51单片机为用户提供了四个专用寄存器,来控制单片机的中断系统。定时器控制寄存器(TCON),该寄存器用于保存外部中断请求以及定时器的计数溢出。进行字节操作时,寄存器地址为88H。按位操作时,各位的地址为88H8FH,当CPU采样到INT0(或INT1)端出现有效中断请求时,IE0(IE1)位由硬件置“1”。当中断响应完成转向中断服务程序时,由硬件把IE0(或IE1)清零, 当计数器产生计数溢出时,相应的溢出标志位由硬件置“1”。当转向中断服务时,再由硬件自动清“0”。计数溢出标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用;串行口控制寄存器(SCON),进行字节操作时,寄存器地址为98H。按位操作时,各位的地址为98H9FH,当发送完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”,当接收完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”。串行中断请求由TI和RI的逻辑或得到。就是说,无论是发送标志还是接收标志,都会产生串行中断请求;中断允许控制寄存器(IE),进行字节操作时,寄存器地址为0A8H。按位操作时,各位的地址为0A8H0AFH,可见,MCS-51单片机通过中断允许控制寄存器对中断的允许(开放)实行两级控制。即以EA位作为总控制位,以各中断源的中断允许位作为分控制位。当总控制位为禁止时,关闭整个中断系统,不管分控制为状态如何,整个中断系统为禁止状态;当总控制位为允许时,开放中断系统,这时才能由各分控制位设置各自中断的允许与禁止。 MCS-51单片机复位后(IE)00H,因此中断系统处于禁止状态。单片机在中断响应后不会自动关闭中断。因此在转中断服务程序后,应根据需要使用有关指令禁止中断,即以软件方式关闭中断。中断优先级控制寄存器(IP)MCS-51单片机的中断优先级控制比较简单,因为系统只定义了高、低2个优先级。高优先级用“1”表示,低优先级用“0”表示。各中断源的优先级由中断优先级寄存器(IP)进行设定。IP寄存器地址0B8H,位地址为0BFH0B8H。(五)、时钟电路模块的设计 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK为时钟输入端。DS1302的控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST/CE(5)。实际上,在调试程序时可以不加电容器,只加一个32.768kHz 的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个口线即可。单片机与DS1302管脚图如图3所示:系统图如图4所示图3 外部引脚分配图4 系统图(六)、温度采集模块设计图3 DS1302 DS18B20简单特点,此类传感器仅需要一条数据线进行数据传输,使用1.7与DS18B20的I/O口连接加一个上拉电阻,VCC接电源,GND接地。独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源 测量温度范围为-55度至+125度。-10度至+85度范围内精度为0.5度温度传感器可编程的分辨率为912位。DS18B20连线如图5图5 DS18B20连接图(七)、显示模块的设计如下图6所示,采用LCD12864液晶显示器,单片机P2口作为数据输出口,RS,RW,E分别通过10K的上拉电阻连接到单片机的P2.0,P2.1,P2.2。VDD接5V电源,VSS接地。VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。E(或EN)端为使能端,下降沿使能。P0.0-P0.7对应B0-DB7为双向数据总线,同时最高位DB7也是忙信号检测位。BLA、BLK分别为显示器背光灯的正、负极。逻辑工作电压(VDD):4.55.5V电源地(GND):0V工作温度(Ta):060(常温) / -2075(宽温)模块有并行和串行两种连接方法(时序如下):8位并行连接时序 图6 12864功能图三、各器件工作原理 (一)、 时钟芯片DS1302的工作原理DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图8所示。图7为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。图9为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。1、 DS1302的控制字DS1302的控制字如图7所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。图7 DS1302的控制字 2、 数据输入输出在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图8所示: 图8 DS1302读与写的时序图3、DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见图9。 图9 DS1302的日历、时间寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 (二)、LCD12864工作原理及说明1、MPU写资料到模块从模块读出资料2、串行连接时序图3、串行数据传送共分三个字节完成:第一字节:串口控制格式 11111ABC A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令 C固定为0第二字节:(并行)8位数据的高4位格式 DDDD0000第三字节:(并行)8位数据的低4位格式 0000DDDD串行接口时序参数:备注:1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。2、“RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。具体指令介绍:1、清除显示CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLLH功能:清除显示屏幕,把DDRAM位址计数器调整为“00H”2、位址归位CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLHX功能:把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM3、位址归位CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLHI/DS功能:把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。4、显示状态 开/关CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLHDC B功能: D=1;整体显示ON C=1;游标ON B=1;游标位置ON5、游标或显示移位控制CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLHS/CR/LX X功能:设定游标的移动与显示的移位控制位:这个指令并不改变DDRAM的内容6、功能设定CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLHDLX0 REX X 功能:DL=1(必须设为1) RE=1;扩充指令集动作 RE=0:基本指令集动作7、设定CGRAM位址CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLHAC5AC4AC3AC2AC1 AC0功能:设定CGRAM位址到位址计数器(AC)8、设定DDRAM位址CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLHAC6AC5AC4AC3AC2AC1 AC0功能:设定DDRAM位址到位址计数器(AC)9、读取忙碌状态(BF)和位址CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LHBFAC6AC5AC4AC3AC2AC1 AC0功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值10、写资料到RAMCODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0HLD7D6D5D4D3D2D1 D0功能:写入资料到内部的RAM(DDRAM/CGRAM/TRAM/GDRAM)11、读出RAM的值CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0HHD7D6D5D4D3D2D1 D0功能:从内部RAM读取资料(DDRAM/CGRAM/TRAM/GDRAM)12、待命模式(12H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLL H 功能:进入待命模式,执行其他命令都可终止待命模式13、卷动位址或IRAM位址选择(13H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLH SR 功能:SR=1;允许输入卷动位址 SR=0;允许输入IRAM位址 14、反白选择(14H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLHR1 R0 功能:选择4行中的任一行作反白显示,并可决定反白的与否15、睡眠模式(015H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLHSLX X 功能:SL=1;脱离睡眠模式 SL=0;进入睡眠模式16、扩充功能设定(016H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLHHX1 REG L 功能:RE=1;扩充指令集动作 RE=0;基本指令集动作 G=1;绘图显示ON G=0;绘图显示OFF17、设定IRAM位址或卷动位址(017H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLHAC5AC4AC3AC2AC1 AC0 功能:SR=1;AC5AC0为垂直卷动位址 SR=0;AC3AC0写ICONRAM位址18、设定绘图RAM位址(018H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLHAC6AC5AC4AC3AC2AC1 AC0 功能:设定GDRAM位址到位址计数器(AC)四、系统的软件设计(一)、主程序流程框图如图10 开始初始化读、写日期、时间和温度分离日期时间温度显示值 显示子程序日期、时间修改子程序闰月、节假日子程序 返回 图10 系统软件流程图图11 时间调整程序流程图(二)、子程序 由于本系统程序涉及的可编程器件有LCD12864,DS18B20以及DS1302,各芯片的控制字及数据读写如果混杂,将会使程序可读性大大降低,因此采用子程序的方法进行调用并将其封装于各自的头文件中。详尽的程序设计见附录。板上完成硬件的组装,在焊接调试过程中遇到很多问题,只要细心,慢慢查找排除故障最终完成本次万年历的设计。认真检查这些问题都是可以避免的,主要问题及解决办法现列如下:1、接通电源后LCD12864没有正确的显示。在不通电状态下用万用表检测电路是否正常连接,在检查回路时发现有的点之间看似连接,但由于虚焊导致其并无电气连接,只能对焊脚进行在加工直到解决问题。2、电路工作一段时间之后有的芯片发热严重。经查发现原来是有尖锐的管脚刺破邻近的漆包线造成短路,断掉该线并再次连接可解决问题。(三)、软件测试由于本系统涉及到多个子程序,多个芯片的编程。首先必须对可编程芯片的控制字即其控制指令要熟记于心。其次,芯片很多都有时钟输入端,需要晶振支持。对芯片的读写都需要在相应的触发沿到来时才能进行。由于DS18B20是串行通信数据,只用一个口线传输,在处理采集的模拟信号时需要一定的时间,会对延时有较高要求。秒,分,小时,公历日期,月份,年份,世纪,星期,节气,闹钟设置有音乐歌谱铃声等多种音符供选择。、DS1302程序:/*定义时间芯片DS1302的数据线及相关函数*/sbit DS1302_CLK=P37; /DS1302的时钟信号线7 sbit DS1302_IO=P16; /DS1302的数据端口线6sbit DS1302_RST=P15; /DS1302的片选信号线5void WriteDs1302byte(unsigned char temp); /给DS1302写一个字节void WriteDs1302(unsigned char address,unsigned char dat); /给DS1302写入时间,先确定地址,再确定要写入的数据unsigned char ReadDs1302(unsigned char address); /读取DS1302的数据void InitDS1302();、DS18B20温度采集程序:/*定义温度传感器DS18B20的数据线和相关函数*/sbit DS18B20=P17; /DS18B20的数据线int temp;void DS18B20Init(void); /DS18B20初始化函数int GetTemp(void);void TempWriteByte(unsigned char dat);unsigned char TempRead(void);bit TempReadBit(void); void delayb(unsigned int count);void TempChange(void);void Conversion(bit cen_m,unsigned char year,unsigned char month,unsigned char day);bit GetMoonDay(unsigned char month_p,unsigned int TableAddr);void DisplayShengXiao(void);void DelayMs(unsigned int a);void Delay(unsigned char num);按键程序:/*定义开关按键,及蜂鸣器的数据线*/sbit SetKey=P32; /按键功能:设置sbit SureKey=P33; /按键功能:确认sbit PlusKey=P34; /按键功能:加sbit ReduceKey=P35; /按键功能:减void Key(void);、LCD程序:/*定义LCD12864的数据线和相关函数*/sbit LCD_RS=P20; /模式位,低电平输入指令,高电平输入数据sbit LCD_RW=P21; /读写位,低电平读,高电平写sbit LCD_E=P22; /LCD12864使能位,低电平无效,高电平使能sbit PSB=P23;#define Busy 0x80#define LCD_Data P0 /LCD12864的8位数据总线,单片机的P0端口void WriteDataLCD(unsigned char WDLCD); /给LCD12864写数据void WriteCommandLCD(unsigned char WCLCD); /给LCD12864写指令void LCDInit(void); /LCD12864初始化void LCDClear(void); /LCD12864清屏 void CheckBusy(void); /忙检测void LCDSendWord(unsigned char *p); /向LCD发送一个字符串void LCDTestWord(bit i,unsigned char word);void DisplaySec(void); /在LCD上显示秒钟void DisplayMin(void); /在LCD上显示分钟void DisplayHour(void); /在LCD上显示小时void DisplayDay(void); /在LCD上显示日期void DisplayYear(void); /在LCD上显示年份void DisplayMonth(void); /在LCD上显示月份 void DisplayWeek(void); /在LCD上显示星期void Holidays(void); /在LCD上显示节日5、肖年显示程序: case 0: LCDTestWord(0,0x93);LCDSendWord(龙);break; case 1: LCDTestWord(0,0x93);LCDSendWord(蛇);break; case 2: LCDTestWord(0,0x93);LCDSendWord(马);break; case 3: LCDTestWord(0,0x93);LCDSendWord(羊);break; case 4: LCDTestWord(0,0x93);LCDSendWord(猴);break; case 5: LCDTestWord(0,0x93);LCDSendWord(鸡);break; case 6: LCDTestWord(0,0x93);LCDSendWord(狗);break; case 7: LCDTestWord(0,0x93);LCDSendWord(猪);break; case 8: LCDTestWord(0,0x93);LCDSendWord(鼠);break; case 9: LCDTestWord(0,0x93);LCDSendWord(牛);break; case 10:LCDTestWord(0,0x93);LCDSendWord(虎);bre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宠物美容AI技术面试题库
- 2025年安全战略填空题库
- 2025年导盲犬训练高级面试实战题库
- 2025年广播电视台后期制作面试常见问题解答
- 2025年语音合成师职业发展面试题及答案
- 2025年高效学习方法与技巧高级笔试预测题
- 2025年地震救援面试重点题解析及答案
- 2025年建筑装饰设计师专业技术考核试卷及答案解析
- 课件中控件的使用
- 2025年环保工程技术师资格考试试题及答案解析
- 2025年中级会计职称考试经济法冲刺试题及答案
- 乐器供销合同范本
- 2025年辽宁省中考生物学试卷真题附答案
- 2025-2030牛肉分销渠道冲突与供应链协同优化报告
- 《法律职业伦理(第3版)》全套教学课件
- 2025年青岛市崂山旅游集团招聘考试笔试试题
- 2025年秋季新学期全体中层干部会议校长讲话:在挑战中谋突破于坚实处启新篇
- 2025年幼儿园保育员考试试题(附答案)
- 2025年上半年中国铁路兰州局集团有限公司校招笔试题带答案
- 《物联网导论》课程标准
- 供水抄表员安全知识培训课件
评论
0/150
提交评论