基于AT89C51单片机的LCD电子时钟设计.doc_第1页
基于AT89C51单片机的LCD电子时钟设计.doc_第2页
基于AT89C51单片机的LCD电子时钟设计.doc_第3页
基于AT89C51单片机的LCD电子时钟设计.doc_第4页
基于AT89C51单片机的LCD电子时钟设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

YanCheng Institute of Technology 课程设计说明书课程名称单片机应用设计 设计题目基于单片机的时钟设计专业(工业)自动化学生姓名 班级 学号完成日期 2012/12/32012/12/15盐城工学院电气学院盐城工学院电气学院课程设计任务书 姓 名: 院 (系): 自动化 专 业: (工业)自动化 班 号: BM自动化091 任务起至日期: 2012 年 12 月 3 日至 2012 年 12 月 15 日 课程设计题目: 基于单片机的时钟设计 已知技术参数和设计要求: (1)AT89C51单片机 (2)DS1302定时器 (3)DS1232看门狗 (4)LCD1602液晶显示 (5)8*10K上拉电阻 (6)Altium软件 预期设计效果: 设计一个基于单片机的电子时钟,要求能够实现时、分、秒。 工作计划安排:2012年12月3日-6日:收集和课程设计有关的资料,熟悉课题任务何要求2012年12月7日-10日:总体方案设计2012年12月11日-14日:硬件电路设计2012年12月15日:软件设计2012年12月16日:整理书写设计说明书 2012年12月17日:答辩 同组设计者及分工: 独立完成! 成绩评定: 指导教师签字: 2012 年 12 月 17 日 第1章 电子时钟的工作原理本次设计时钟电路,使用了AT89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,用C语言程序来控制整个时钟的显示,使得编程变得更容易,这样通过五个模块:芯片、显示屏、看门狗、电源、时钟即可满足设计要求。此设计原理图框图如图1-1所示,此电路包括以下五个部分:单片机、时钟电路、看门狗、液晶屏、电源模块、时钟振荡电路。AT89C51主控模块DS1232时钟电路时钟振荡模块DS1232看门狗LCD1602显示模块电源模块图1-1 主电路设计框图本设计采用C语言程序设计,使单片机控制数码管显示年、月、日、时、分、秒,当秒计数满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。时、分、秒的计数结果经过数据处理可直接送显示器显示。当计时发生误差的时候可以用校时电路进行校正。设计采用的是时、分、秒显示,单片机对数据进行处理同时在LCD上显示。第2章 系统硬件电路设计及元件2.1 AT89C51芯片AT89C51 是美国ATMEL 公司生产的8 位Flash ROM 单片机。其最突出的优点是片内ROM 为Flash ROM,可擦写1000 次以上,应用并不复杂的通用ROM 写入器就能方便的擦写,读取也很方便,价格低廉,具有片程序ROM 二级保密系统。因此可灵活应用于各种控制领域。AT89C51 包含以下一些功能部件:(1)一个8 位CPU ;(2)一个片内振荡器和时钟电路;(3)4KB Flash ROM ;(4)128B 内RAM;(5)可寻址64KB 的外ROM 和外RAM 控制电路;(6)两个16 位定时/计数器;(7)21 个特殊功能寄存器;(8)4 个8 位并行I/O 口;(9)一个可编程全双工串行口;(10)5 个中断源,可设置成2 个优先级。AT89C51 单片机一般采用双列直插DIP 封装,共40 个引脚,图2-1 为其引脚排列图。40 个引脚大致可分为4 类:电源、时钟、控制各I/O 引脚。图2-1 AT89C51引脚图2.1.1 电源Vcc芯片电源,接+5V;GND接地端。2.1.2 时钟XTAL1、XTAL2晶体振荡电路反相输入端和输出端。2.1.3 控制线控制线共有4 根,其中3 根是复用线。所谓复用线是指具有两种功能,正常使用时是一种功能,在某种条件下是另一种功能。1、ALE/ PROG 地址锁存允许/片内EPROM 编程脉冲。(1)ALE 功能:用来锁存P0 口送出的低八位地址。AT89C51 在并行扩展外存储器时,P0 口用于分时传送低8 位地址和数据信号,且均为二进制数。当ALE 信号有效时,P0 口传送的是低8 位地址信号;ALE 信号无效时,P0 口传送的是低8 位地址信号。在ALE 信号的下降沿,锁定P0 口传送的内容,即低8 位地址信号。需要指出的是,当CPU 不执行访问外RAM 指令,ALE 以时钟振荡频率1/6 的固定频率输出,因此ALE 信号也可作为外部芯片CLK 时钟或其他需要。但是,当CPU 执行MOVX 指令时,ALE 将跳过一个ALE 脉冲。(2) PROG 功能:片内EPROM 的芯片,在EPROM 编程期间,此引脚输入编程脉冲。2、 PSEN 外ROM 读选通信号。89C51 读外ROM 时,每个机器周期内PSEN 两次有效输出。PSEN 可作为外ROM芯片输出允许OE 的选通信号。在读内ROM 或读外RAM 时, PSEN 无效。3、RST/VPD复位/备用电源。(1)正常工作时,RST 端为复位信号输入端,只要在该引脚上连续保持两个机器周期以上高电平,AT89C51 芯片即实现复位操作,复位后一切从头开始,CPU 从0000H 开始执行指令。(2)VPD 功能:在VCC 掉电情况下,该引脚可接上备用电源,由VPD 向片内RAM供电,以保持片内RAM 中的数据不丢失。4、EA /VPP内外ROM 选择/片内EPROM 编程电源。(1) EA 功能:正常工作时, EA 为内外ROM 选择端。AT89C51 单片机ROM 寻址范围为64KB,其中4KB 在片内,60KB 在片外。当EA 保持高电平时,先访问内ROM,但当PC 值超过4KB 时,将自动转向执行外ROM 中的程序。当EA 保持低电平时,则只访问外ROM,不管芯片内有否内ROM。(2)VPP 功能:片内有EPROM 的芯片,在EPROM 编程期间,此引脚用于施加编程电源。2.1.4 I/O引脚AT89C51 有P0、P1、P2、P3 4 个8 位并行I/O 端口,共32 个引脚。P0 口是一组8 位漏级开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能以吸收电流的方式驱动8 个TTL 逻辑门电路,对端口写1 时,又可作高阻抗输入端用。在访问外部程序和数据存储器时,它是分时多路转换的地址(低8 位)/数据总线,在访问期间激活了内部的上拉电阻。在Flash 编程时,P0 端口接收指令字节;而在验证程序时,则输出指令字节。验证时,要求外接上拉电阻。P1 口是带内部上拉电阻的双向I/O口,向P1口写入1时P1口被内部上拉为高电平,可用作输入口。当作为输入脚时被外部信号拉低的P1口会因为内部上拉而输出一个电流。Flash编程和程序校验期间,P1接收低8位地址。P2 口是带内部上拉电阻的双向I/O口,向P2口写入1时P2口被内部上拉为高电平可用作输入口,当作为输入脚时被外部拉低的P2口会因为内部上拉而输出电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX DPTR指令)时,P2口送出高8位地址数据,当使用8位寻址方式(MOVXRI)访问外部数据存储器时,P2口发送P2特殊功能寄存器的内容,在整个访问期间不改变。Flash编程和程序校验时,P2也接收高位地址和一些控制信号。P3 口是带内部上拉电阻的双向I/O口,向P3口写入1时P3口被内部上拉为高电平可用作输入口,当作为输入脚时被外部拉低的P3口会因为内部上拉而输出电流。P3口除了作为一般的I/O口线外,更重要的是它的第二功能,如表2-1所示:表2-1 P3端口的特殊功能 端口引脚兼 用 功 能 P3.0RXD 串行输入口 P3.1TXD 串行输出口 P3.2/INT0 外部中断0 P3.3/INT1 外部中断1 P3.4T0 定时器0的外部输入 P3.5T1 定时器1的外部输入 P3.6/WR 外部数据存储器写选通 P3.7/RD 外部数据存储器读选通 2.2 DS1302芯片DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。有主电源和备份电源双引脚,而且备份电源可由大容量电容(1F)来替代。需要强调的是,DS1302需要使用32.768KHz的晶振。DS1302 包含以下一些功能部件:(1)实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;(2)用于高速数据暂存的318位RAM;(3)最少引脚的串行I/O;(4)2.55.5V 电压工作范围;(5)2.5V时耗电小于300nA;(6)用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;(7)简单的3线接口;(8)可选的慢速充电(至VCC1)的能力。2.2.1 DS1302数据操作原理DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。DS1302的内部结构图如图2-2所示。图2-2 DS1302内部结构图2.2.2 DS1302 的引脚图及功能DS1302 的引脚图如图2-3所示。图2-3 DS1302引脚图DS1302 各引脚功能:Vcc1:主电源;Vcc2:备份电源。当Vcc2Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 Vcc1时,由Vcc1向DS1302供电。 SCLK:串行时钟,输入,控制数据的输入与输出; I/O:三线接口时的双向数据线; CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次CE提供结束单字节或多字节数据传输的方法。引脚功能如表2-2所示:表2-2 DS1302引脚功能说明引脚号名称功能1VCC1备份电源输入2X132.768KHz晶振输入3X232.768KHz晶振输出4GND地5RST控制移位寄存器/复位6I/O数据输入/输出7SCLK串行时钟8VCC2主电源输入 2.2.3 DS1302的寄存器 1、DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h8Dh,写时80h8Ch),存放的数据格式为BCD码形式,如表2-3所示:表2-3 DS1302的日历、时钟寄存器及其控制字寄存器名命令字取值范围各位内容写操作读操作76543210秒寄存器 80H81H00-59CH10SECSEC分寄存器82H83H00-59010MINMIN时寄存器84H85H01-12或00-2312/24010HRHR日寄存器86H87H01-28,29,30,310010DATEDATE月寄存器88H89H01-1200010MMONTH周寄存器8AH8BH01-0700000DAY年寄存器8CH8DH00-9910YEARYEAR控制8EH8FH-WP0000000秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是 ,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。2、DS1302的工作模式寄存器所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。突发模式寄存器如表2-4所示:表2-4突发模式寄存器工作模式寄存器读寄存器写寄存器时钟突发模式CLOCK BURSTBFHBEHRAM突发模式RAM BURSTFFHFEH 3、DS1302还有涓流充电寄存器等。 2.2.4 DS1302的控制字DS1302的控制字如下表所示:表2-5控制字(即地址及命令字节) 765432101RAMA4A3A2A1A0RD控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。控制字总是从最低位开始输出。在控制字指令输入后的下一个 SCLK时钟的上升沿时,数据被写入 DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个 SCLK脉冲的下降沿,读出 DS1302的数据,读出的数据也是从最低位到最高位。2.2.5 DS1302时序CE 输入驱动高启动所有的数据传输。CE 输入有两个功能。首先,CE打开控制逻辑,允许访问的移位寄存器的地址/命令序列。其次,CE 提供了一个终止单字节或多字节数据传输方法。一个时钟周期是由一个下降沿之后的上升沿序列。对于数据传输而言,数据必须在有效的时钟的上升沿输入,在时钟的下降沿输出。如果CE 为低,所有的I/ O 引脚变为高阻抗状态,数据传输终止。对于数据输入:开始的8 个SCLK 周期,输入写命令字节,数据字节在后8 个SCLK 周期的上升沿输入。数据输入位0 开始。对于数据输出:开始的8 个SCLK 周期,输入一个读命令字节,数据字节在后8 个SCLK 周期的下降沿输出。注意,第一个数据字节的第一个下降沿发生后,命令字的最后一位被写入,命令字节的最后一位被写入。当CE 仍为高时。如果还有额外的SCLK 周期,DS1302 将重新发送数据字节,这使DS1302 具有连续突发读取的能力。DS1302数据读写时序如图2-4所示:图2-4 数据读写时序2.3 DS1232芯片DS1232是由美国DALLAS公司生产的微处理器监控电路,采用8脚DIP封装,具有看门狗功能的电源监测芯片,在电源上电、断电、电压瞬态下降和死机时都会输出一个复位脉冲。DS1232的的主要特点:(1)在微处理器失控状态下可以停止和重新启动微处理器;(2)具有8脚DIP封装和16脚SOIC贴片封装两种形式,可以满足不同设计要求;(3)微处理器掉电或电源电压瞬变时可自动复位;(4)具有5%或10%的两种电源监测精度。2.3.1 DS1232引脚功能及内部结构DS1232各引脚功能:RESTE:复位键连接引脚,直接连接复位键;TD :看门狗定时器延时设置。如果连接到地,输入给看门狗的脉冲间隔不得大于150毫秒;如果不连接,脉冲间隔不得大于600毫秒;如果连接到电源,脉冲间隔不得大于1.2秒;TOL :选择5%或10%的电源监测精度。如果这个引脚连接到地,当电源下降到4.75V时芯片将输出一个复位脉冲;如果这个引脚连接到5V,只有当电源下降到4.5V时芯片才输出一个复位脉冲;GND :地线;RST:复位高脉冲输出引脚;RST:复位低脉冲输出引脚;ST:看门狗脉冲输入,低脉冲有效;VCC:5V电源。DS1232的引脚如图2-5所示:图2-5 DS1232的引脚图芯片DS1232在系统工作时,必须不间断的给引脚7输入一个脉冲系列,这个脉冲的时间间隔由引脚2设定,如果脉冲间隔大于引脚2的设定值,芯片将输出一个复位脉冲使单片机复位。一般将这个功能称为看门狗,将输入给看门狗的一系列脉冲称为“喂狗”。这个功能可以防止单片机系统死机。DS1232内部结构如图2-6所示:电压偏差监测环节数字彩排环 节 门电路 (与门)数字延时环 节 按键防抖时间溢出比 复位输出电压传感器 RST图2-6 DS1232内部结构2.3.2 DS1232的功能 1、电源电压监视 DS1232能够实时监测向微处理器供电的电源电压,当电源电压VCC低于预置值时,DS1232的第5脚和第6脚输出互补复位信号RST和/RST。预置值通过第3脚(TOL)来设定;当TOL接地时,RST和/RST信号在电源电压跌落至4.75V以下时产生;当TOL与VCC相连时,只有当VCC跌落至4.5V以下时才产生RST和/RST信号。当电源恢复正常后,RST和/RST信号至少保持250ms,以保证微处理器的正常复位。 2、按键复位 在单片机产品中,最简单的按键复位电路是由电阻和电容构成的,如果系统扩展存在需要和微处理器同时复位的其他接口芯片,这种简单的阻容复位电路往往不能满足整体复位的要求。DS1232提供了可直接连接复位按键的输入端/PBSEN(第1脚),在该引脚上输入低电平信号,将在/RST和RST端输出至少250ms的复位信号。3、看门狗定时器在DS1232内部集成有看门狗定时器,当DS1232的ST端在设置的周期时间内没有有效信号到来时,DS1232的RST和RST端将产生复位信号以强迫微处理器复位。这一功能对于防止由于干扰等原因造成的微处理器死机是非常有效的。看门狗定时器的定时时间由DS1232的TD引脚确定,见表2-6所示:表2-6 看门狗定时器定时时间设置TD引脚连接至定时时间最小值典型值最大值地(GND)62.5ms150ms250ms浮空250ms600ms1000ms电源(Vcc)500ms1200ms2000ms看门狗定时器的周期输入信号ST可以从微处理器的地址信号、数据信号或控制信号中获得,不论哪种信号都必须能够周期性的访问DS1232,对于MCS51系列单片机,推荐使用ALE信号。2.4 LCD1602液晶显示LCD1602是一种用5x7点阵图形来显示字符的液晶显示器模块,它显示的容量为2行16个字共32个字符。它由若干个57或者511点阵字符位组成,每个点阵字符位都可以显示一个字符。模块采用数字式接口,能够方便地与单片机等控制类芯片进行通信。由于其具有体积小、重量轻、显示质量高、功耗低等诸多优点而被广泛用于智能化仪器仪表的显示器件。2.4.1 LCD1602引脚及功能 LCD1602的引脚如图2-7所示:(1)GND:地电源。(2)Vcc:接+5V电源。(3)VL:液晶显示器对比度调整端。接+5V电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的精密电位器调整对比度,一般对比电压为0.7V左右。(4)RS:寄存器选择。高电平时选择数据寄存器,否则选择指令寄存器。(5):读写信号线。高电平时进行读操作,低电平时进行写操作。当RS和共同为低电平时可以写入指令或者显示地址,当RS为低电平为高电平时可以读出忙信号,当RS为高电平为低电平时可以写入数据。(6)E:使能端。当E端由高电平跳变成低电平时,液晶模块执行命令。(7)D1D8:8位双向数据线。 (8)BLA:背光源正极;(9)BLK:背光源负极。图2-7 LCD1602引脚图LCD1602引脚功能表如下表2-7所示:表2-7 LCD1602引脚功能表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极LCD1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字符图有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。LCD1602液晶模块内部的控制器共有11条控制指令,如表2-8所示:表2-8 LCD1602控制命令表指令RSR/WD8D7D6D5D4D3D2D1清显示0000000001光标返回000000001*置输入模式00000001I/DS显示开/关控制0000001DCB光标或字符移位000001S/CR/L*置功能00001DLNF*置字符发生存贮器地址0001字符发生存贮器地址置数据存贮器地址001显示数据存贮器地址(ADD)读忙标志或地址01BF计数器地址(AC)写数到CGRAMD或DRAM10要写的数从CGRAMD或DRAM读数11读出的数据 它的读写操作、屏幕和光标的操作都是通过指令编程来实现的(说明: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的点阵字符(有些模块是 DL:高电平时为8位总线,低电平时为4位总线)。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读出忙信号和光标地址。BF为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙,模块就能接收相应的命令或者数据。 指令10:写数据。 指令11:读数据。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志位是不是为低电平,是低电平则表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。表2-9为 LCD1602的内部显示地址。表2-9 LCD1602的内部显示地址123141516第一行80H81H82H8DH8EH8FH第二行0C0H0C1H0C2H0CDH0CEH0CFH第3章 系统软件电路设计3.1 系统流程图及源代码设计3.1.1 主程序流程图设计液晶屏通信引脚定义DS1302通信引脚定义数据设定引脚定义开始引脚定义地址定义程序开始初始化液晶屏读取DS1302程序数据分离送显示缓存日历显示子程序数据存储地址显示数据缓冲地址初始化液晶屏幕显示初始画面清液晶屏幕显示空白读DS1302程序分离数据子程序写指令到液晶屏读数据到液晶屏图3-1 主程序流程图3.1.2 子程序流程图设计1、 DS1302 定时器中断子程序流程图YYYYYYYNNNNNNNNY开始给定时器再次赋值判断是否计满18次秒加1,判断是否等于60分加1,秒置0,判断分是否等于60时加1,分置0,判断时是否等于24日加1,时置0,判断该年是否为闰年判断日是否到月底月加1,日置1,判断月是否等于12年加1,月置1,判断年是否为100执行年、月、日、时、分、秒的显示结束图3-2 DS1302中断流程图 程序主要实现对DS1302写保护、充电,对年、月、日、时、分、秒等寄存器的读写操作。在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用I/O口软件模拟串行时钟脉冲,所以在通信过程中最好保证传输的连续性,不要允许中断,如图3-2所示。 2、 LCD1602 流程图 程序主要实现对信息的显示,包括年、月、日、时、分、秒等信息,在这里要注意它的读写控制指令。其流程图如图3-3所示。开始RW和E都置零设置点阵8位数据接口,两行显示开显示,不显示光标地址指针加一,画面不一定刷新,全部清零给地址,从第一行开始写显示第一行数据给第二行地址,显示第二行数据结束 图3-3 LCD1602初始化流程图3.1.3 子程序源代码设计详见附录一3.1.3 设计原理图详见附录二附录一/*程序名称:基于单片机和时钟芯片DS1302的电子时钟程序功能: 时钟芯片采用DS1302显示采用液晶屏LCD1602*/ #include /包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int/*以下是DS1302芯片的操作程序*/uchar code digit10=0123456789; /定义字符数组显示数字sbit DATA=P11; /位定义1302芯片的接口,数据输出端定义在P1.1引脚sbit RST=P12; /位定义1302芯片的接口,复位端口定义在P1.1引脚sbit SCLK=P10; /位定义1302芯片的接口,时钟输出端口定义在P1.1引脚/*函数功能:延时若干微秒入口参数:n*/ void delaynus(uchar n) uchar i; for(i=0;in;i+) ;/*函数功能:向1302写一个字节数据入口参数:x*/ void Write1302(uchar dat) uchar i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将dat的各数据位右移1位,准备写入下一个数据位 /*函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据*/ void WriteSet1302(uchar Cmd,uchar dat) RST=0; /禁止数据传递 SCLK=0; /确保写数居前SCLK被拉低RST=1; /启动数据传输delaynus(2); /稍微等待,使硬件做好准备Write1302(Cmd); /写入命令字Write1302(dat); /写数据SCLK=1; /将时钟电平置于已知状态RST=0; /禁止数据传递 /*函数功能:从1302读一个字节数据入口参数:x*/ uchar Read1302(void) uchar i,dat;delaynus(2); /稍微等待,使硬件做好准备for(i=0;i=1; /将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA=1) /如果读出的数据是1 dat|=0x80; /将1取出,写在dat的最高位 SCLK=1; /将SCLK置于高电平,为下降沿读出 delaynus(2); /稍微等待 SCLK=0; /拉低SCLK,形成脉冲下降沿 delaynus(2); /稍微等待 return dat; /将读出的数据返回 /*函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd*/ uchar ReadSet1302(uchar Cmd) uchar dat; RST=0; /拉低RST SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 Write1302(Cmd); /写入命令字 dat=Read1302(); /读出数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 return dat; /将读出的数据返回/*函数功能: 1302进行初始化设置*/ void Init_DS1302(void) WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,(0/10)4|(0%10); /根据写秒寄存器命令字,写入秒的初始值 /除法运算,取整;%取模运算,取余 /数据前四位为十位,后四位为个位,详见寄存器表 WriteSet1302(0x82,(0/10)4|(0%10); /根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,(12/10)4|(12%10); /根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,(01/10)4|(01%10); /根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,(06/10)4|(06%10); /根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,(10/10)4|(10%10); /根据写小时寄存器命令字,写入小时的初始值/*以下是对液晶模块的操作程序*/sbit RS=P20; /寄存器选择位,将RS位定义为P2.0引脚sbit RW=P21; /读写选择位,将RW位定义为P2.1引脚sbit E=P22; /使能信号位,将E位定义为P2.2引脚sbit BF=P07; /忙碌标志位,将BF位定义为P0.7引脚/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delaynms(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); /*函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*/bit BusyTest(void) bit result;RS=0; /根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; /E=1,才允许读写 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 result=BF; /将忙碌标志电平赋给result E=0; /将E恢复低电平 return result; /*函数功能:将

温馨提示

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

评论

0/150

提交评论