指针式电子钟_毕业论文.doc_第1页
指针式电子钟_毕业论文.doc_第2页
指针式电子钟_毕业论文.doc_第3页
指针式电子钟_毕业论文.doc_第4页
指针式电子钟_毕业论文.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

指针式电子钟 芜湖职业技术学院论文 指针式电子钟指针式电子钟 目录目录 摘摘 要要1 1 第一章第一章 引言引言2 2 1.11.1 设计任务设计任务.2 1.21.2 设计要求设计要求.2 第二章第二章 总体方案论证与设计总体方案论证与设计总体方案论证与设计总体方案论证与设计3 3 第三章第三章 系统硬件设置系统硬件设置4 4 3.13.1 at89c51 单片机简介单片机简介4 3.23.2 时钟模块设计时钟模块设计.7 3.2.13.2.1 ds1302ds1302 特性介绍特性介绍.7 3.2.23.2.2 ds1302ds1302 引脚介绍引脚介绍.7 3.2.33.2.3 ds1302ds1302 有关日历,时间的寄存器有关日历,时间的寄存器.9 3.2.43.2.4 ds1302ds1302 与单片机接口电路与单片机接口电路.9 3.33.3 显示模块设计显示模块设计.10 3.3.13.3.1 pg12864lcdpg12864lcd 的特性介绍的特性介绍.11 3.3.23.3.2 lcd12864lcd12864 引脚介绍引脚介绍.12 3.3.33.3.3 lcd12864lcd12864 的原理简图的原理简图.13 3.3.43.3.4 1286412864 内部功能器件及相关功能内部功能器件及相关功能.13 3.3.53.3.5 1286412864 液晶与单片机接口电路液晶与单片机接口电路.16 3.43.4 设置模块设置模块18 3.53.5 振荡电路振荡电路19 3.63.6 复位电路复位电路20 第四章第四章 系统软件设计系统软件设计2121 4.14.1 时钟函数模块时钟函数模块21 4.1.14.1.1 实现功能实现功能.22 4.1.24.1.2 函数设计函数设计22 4.24.2 指针时钟设计指针时钟设计28 芜湖职业技术学院论文 2 4.2.14.2.1 实现功能实现功能28 4.2.24.2.2 函数设计函数设计28 4.2.34.2.3 小结小结30 4.34.3 显示函数模块显示函数模块31 4.3.14.3.1 实现功能实现功能.31 4.3.24.3.2 函数设计函数设计31 4.3.34.3.3 小结小结33 4.44.4 按键函数模块按键函数模块33 4.4.14.4.1 实现功能实现功能33 4.4.24.4.2 函数设计函数设计33 4.4.34.4.3 小结小结33 4.54.5 主函数模块主函数模块33 附录附录 1 1 元器件表元器件表 5252 附录附录 2 2 仿真图仿真图 5353 附录附录 3 3 参考文献参考文献 5454 芜湖职业技术学院论文 1 摘摘 要要 单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。单片机 接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。 本设计就是应用单片机强大的控制功能制作而成的指针式电子钟,该指针式电子 钟实现如下功能:液晶屏模拟表盘与时分秒指针显示当前时钟,k1 键用于选择 调节对象,k2 键用于调整时分秒,在按下 k4 键时确定调节值,时钟继续运行。 本设计采用的是 at89c51 单片机,at89c51 单片机内部带有定时/计数功能, 此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用 11.0592 的晶振就能实现零误差的计时,因此可以利用此功能实现计时。芯片采 用 dallas 公司的涓细充电时钟芯片 ds1302,该芯片通过简单的串行通信与单 片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用 双电源供电,当外部电源掉电时能够利用后备电池准确计时。 显示器件采用 lcd12864 液晶,12864 是一种图形点阵液晶显示器,它主要由 行驱动器/列驱动器及 12864 全点阵液晶显示器组成。可完成图形显示,也可 以显示 84 个(1616 点阵)汉字。 通过此次设计能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件 设计能力以及软件设计能力。 关键词关键词 单片机 at89c51 单片机 时钟芯片 ds1302 lcd12864 液晶 芜湖职业技术学院论文 2 第一章第一章 引言引言 本例采用 pg12864lcd 液晶作为显示元件,液晶屏模拟表盘与时分秒指针 显示当前时钟。该指针式电子钟实现如下功能:液晶屏模拟表盘与时分秒指针显 示当前时钟,k1 键用于选择调节对象,k2 键用于调整时分秒,在按下 k4 键时 确定调节值,时钟继续运行。本例程序包含 main.c,lcd_12864.c,lcd_12864.h 三个 文件。 1.11.1 设计任务设计任务 利用单片机等实现一个简单的指针式电子钟。 1.21.2 设计要求设计要求 a实现时分秒指针式显示功能 b用三个按键来实现调整时分秒的功能 芜湖职业技术学院论文 3 第二章第二章 总体方案论证与设计总体方案论证与设计总体方案论证与设计总体方案论证与设计 组成框图中包含显示模块,控制器,时间模块,设置模块。显示模块有 lcd12864 来控制显示,整个代码实现主要由控制器来实现,时间模块有 ds1302 来实现,可以显示系统时间,也可自行调整,设置模块为按键处理。具 体模块分析在相关的软硬件设计中详细介绍。 本系统以 at89c51 单片机为控制核心,通过与 ds1302 信获取实时时间,并 将得到的数据通过 lcd12864 液晶显示出来,同时通过相应的按键调整相应的值。 因此本设计可分为一下模块:显示模块、实时时间计算模块、设置模块(时间设 置模块) 。下面对各个模块逐一进行论证分析。 芜湖职业技术学院论文 4 第三章第三章 系统硬件设置系统硬件设置 3.3.1 1 at89c51 单片机简介单片机简介 at89c51 是一种带 4k 字节闪烁可编程可擦除只读存储器(fperomflash programmable and erasable read only memory)的低电压,高性能 cmos8 位微 处理器,俗称单片机。该器件采用 atmel 高密度非易失存储器制造技术制造,与 工业标准的 mcs-51 指令集和输出管脚相兼容。由于将多功能 8 位 cpu 和闪烁存 储器组合在单个芯片中,atmel 的 at89s51 是一种高效微控制器,为很多嵌入式 控制系统提供了一种灵活性高且价廉的方案。 vcc:供电电压。 gnd:接地。 p0 口:p0 口为一个 8 位漏级开路双向 i/o 口,每脚可吸收 8ttl 门电流。当 p1 口的管脚第一次写 1 时,被定义为高阻输入。p0 能够用于外部程序数据存储 器,它可以被定义为数据/地址的第八位。在 fiash 编程时,p0 口作为原码输入 口,当 fiash 进行校验时,p0 输出原码,此时 p0 外部必须被拉高。 p1 口:p1 口是一个内部提供上拉电阻的 8 位双向 i/o 口,p1 口缓冲器能接 芜湖职业技术学院论文 5 收输出 4ttl 门电流。p1 口管脚写入 1 后,被内部上拉为高,可用作输入,p1 口 被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 flash 编程 和校验时,p1 口作为第八位地址接收。 p2 口:p2 口为一个内部上拉电阻的 8 位双向 i/o 口,p2 口缓冲器可接收, 输出 4 个 ttl 门电流,当 p2 口被写“1”时,其管脚被内部上拉电阻拉高,且作 为输入。并因此作为输入时,p2 口的管脚被外部拉低,将输出电流。这是由于 内部上拉的缘故。p2 口当用于外部程序存储器或 16 位地址外部数据存储器进行 存取时,p2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势, 当对外部八位地址数据存储器进行读写时,p2 口输出其特殊功能寄存器的内容。 p2 口在 flash 编程和校验时接收高八位地址信号和控制信号。 p3 口:p3 口管脚是 8 个带内部上拉电阻的双向 i/o 口,可接收输出 4 个 ttl 门电流。当 p3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作 为输入,由于外部下拉为低电平,p3 口将输出电流(ill)这是由于上拉的缘故。 p3 口除了作为一般的 i/o 口外,更重要的用途是他的第二功能,如下所示: p3.0 rxd(串行输入口) p3.1 txd(串行输出口) p3.2 /int0(外部中断 0) p3.3 /int1(外部中断 1) p3.6/wr(外部数据寄存器写选通) p3.7/rd(外部数据寄存器读选通) p3 口同时为闪烁编程和编程校验接受一些控制信号。 rst:复位输入。当振荡器复位器件时,要保持 rst 脚两个机器周期的高电 平时当 8051 通电,时钟电路开始工作,在 reset 引脚上出现 24 个时钟周期以上 的高电平,系统即初始复位。初始化后,程序计数器 pc 指向 0000h,p0-p3 输出 口全部为高电平,堆栈指钟写入 07h,其它专用寄存器被清“0” 。reset 由高电 芜湖职业技术学院论文 6 平下降为低电平后,系统即从 0000h 地址开始执行程序。然而,初始复位不改变 ram(包括工作寄存器 r0-r7)的状态, 特殊功能寄存器 初始态 特殊功能寄存器 初始态 acc 00h b 00h psw 00h sp 07h dph 00h th0 00h dpl 00h tl0 00h ip xxx00000b th1 00h ie 0xx00000b tl1 00h tmod 00h tcon 00h scon xxxxxxxxb sbuf 00h p0-p3 1111111b pcon 0xxxxxxxb 8051的初始态(表2.1) ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的 地位字节。在 flash 编程期间,此引脚用于输入编程脉冲。在平时,ale 端以不 变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外 部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时, 将跳过一个 ale 脉冲。如想禁止 ale 的输出可在 sfr8eh 地址上置 0。此时, ale 只有在执行 movx,movc 指令是 ale 才起作用。另外,该引脚被略微拉高。 如果微处理器在外部执行状态 ale 禁止,置位无效。 psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机 器周期两次/psen 有效。但在访问外部数据存储器时,这两次有效的/psen 信号 将不出现。 芜湖职业技术学院论文 7 ea/vpp:当/ea 保持低电平时,则在此期间外部程序存储器(0000h-ffffh) , 不管是否有内部程序存储器。注意加密方式 1 时,/ea 将内部锁定为 reset;当 /ea 端保持高电平时,此间内部程序存储器。在 flash 编程期间,此引脚也用于 施加 12v 编程电源(vpp) 。 xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。 xtal2:来自反向振荡器的输出。 振荡器特性:xtal1 和 xtal2 分别为反向放大器的输入和输出。该反向放大 器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱 动器件,xtal2 应不接。有余输入至内部时钟信号要通过一个二分频触发器,因 此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 芜湖职业技术学院论文 8 3.23.2 时钟模块设计时钟模块设计 实时时间计算模块 方案(1):at89c51 单片机内部带有定时/计数功能,此定时功能是通过对 外部晶振的脉冲进行计数,从而达到计时功能,只要使用 11.0592 的晶振就能实 现零误差的计时,因此可以利用此功能实现计时,但因为只有单一的计时功能要 实现“万年历”的功能需要较复杂的程序,而且如果单片机掉电无法继续进行计 时,所以使用不便。 方案(2):ds1302 是美国 dallas 公司推出的一种高性能、低功耗的实 时时钟芯片,附加 31 字节静态 ram,采用 spi 三线接口与 cpu 进行通信,并 可采用突发方式一次传送多个字节的时钟信号和 ram 数据。实时时钟可提供秒、 分、时、日、星期、月和年,一个月小与 31 天时可以自动调整,且具有闰年补 偿功能。工作电压宽达 2.55.5v。采用双电源供电(主电源和备用电源) ,可设 置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。利用单片机 强大的控制功能就可实现实时计时的功能,而且消耗的系统资源少,程序简单。 综合上述两种方案,宜采用方案(2)实现实时计时功能。 3.2.13.2.1 ds1302ds1302 特性介绍特性介绍 ds1302 是美国 dallas 公司推出的一种高性能、低功耗的实时时钟芯片, 附加 31 字节静态 ram,采用 spi 三线接口与 cpu 进行通信,并可采用突发方 式一次传送多个字节的时钟信号和 ram 数据。实时时钟可提供秒、分、时、日、 星期、月和年,一个月小与 31 天时可以自动调整,且具有闰年补偿功能。工作 电压宽达 2.55.5v。采用双电源供电(主电源和备用电源) ,可设置备用电源充 电方式,提供了对后备电源进行涓细电流充电的能力。利用单片机强大的控制功 能就可实现实时计时的功能,而且消耗的系统资源少,程序简单。 芜湖职业技术学院论文 9 ds1302 可以对年、月、日、星期、时、分、秒进行计时,且具有闰年补偿 等多种功能 ds1302 有 12 个寄存器,其中有 7 个寄存器与日历、时钟相关,存 放的数据位为 bcd 码形式;采用单片机计时,一方面需要采用计数器,占用硬 件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而采用时钟 芯片 ds1302。 3.2.23.2.2 ds1302ds1302 引脚介绍引脚介绍 图 3-1 8 、vcc1:备用电池端; 1、vcc2:5v 电源。当 vcc2vcc1+0.2v 时,由 vcc2 向 ds1302 供电, 当 vcc2 vcc1 时,由 vcc1 向 ds1302 供电。 7、 sclk:串行时钟,输入; 6、i/o:数据输入输出口; 5、ce/rst:复位脚 2 3、x1、x2 是外接晶振脚 (32.768khz 的晶振) 4、地(gnd) 芜湖职业技术学院论文 10 3.2.33.2.3 ds1302ds1302 有关日历,时间的寄存器有关日历,时间的寄存器 表 3-1 3.2.43.2.4 ds1302ds1302 与单片机接口电路与单片机接口电路 图 3-2 由于 ds1302 是依靠外部晶振与其内部的电容配合来产生时钟脉冲,因为 ds1302 在芯片本身已经集成了 6pf 电容。所以,为了获得稳定的可靠的时钟, 必须选用具有 6pf 负载电容的晶振。当它工作于所要求的负载电容时,所以要选 用 32768hz 的晶振。 石英晶振用 12m,因为一个机器周期为 1/12 时钟周期,所以这样用 12m 的 话,一个时钟周期为 12us 那么定时器计一次数就是 1us 了,电容范围是在 20- 40pf 之间的都行。 芜湖职业技术学院论文 11 表 3-2 引脚号ds1302at89c51 1i/op1.0 2sclkp1.1 3rstp1.2 3.33.3 显示模块设计显示模块设计 液晶显示模块 方案(1):数码管是利用发光二极管的特性组合而成数字显示器件,通过 控制相应的二极管的状态显示相应的数字。要使数码管正常显示就得有驱动电路 驱动相应的段码,数码管的现实方式可分为静态显示和动态显示,静态显示方式 只适合显示单个的数字,因此本设计应采用动态显示方式。由于动态显示方式利 用的是人眼视觉暂留的特性,扫描的时间应不大于 20 毫秒,占用系统资源大, 而且显示的个数和字型有限,在本设计中不易采用。 芜湖职业技术学院论文 12 方案(2):12864 是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器 及 12864 全点阵液晶显示器组成。可完成图形显示,也可以显示 84 个 (1616 点阵)汉字。该类液晶显示模块(即 ks0108b 及其兼容控制驱动器)的 指令系统比较简单,总共只有七种。关于行列和页的解释:从上向下共 64 行, 每 8 行为一页,共八页,从左到右共 128 列,左半屏 0 到 63 列,右半屏 0 到 63 列。显示时,每页以列为单位显示。 综合比较上述两种方案,应采用 12864 液晶组成本设计的显示模块。 3.3.13.3.1 pg12864lcdpg12864lcd 的特性介绍的特性介绍 pg12864lcd 是像素可寻址的图形液晶显示屏模块 芯片特性: 1.工作电压为+5v,可自带驱动 lcd 所需的负电压。 2.全屏幕点阵,点阵数为 128 列*64 行,可显示 8 行*4 行个(16*16 点阵) 汉字,也可完成图像,字符的显示。 3与 cpu 接口采用 5 条位控制总线和 8 位并行数据总线输入输出。 4.内部有显示数据锁存器,自带 el 驱动。 5.简单的操作指令,显示开关设置,显示起始行设置,地址指针设置和数据 读/写等指令。 芜湖职业技术学院论文 13 3.3.23.3.2 lcd12864lcd12864 引脚介绍引脚介绍 表 3-3 管脚 号 管脚名称 lever 管脚功能描述 1vss0 电源地 2vdd+5.0v 电源电压 3v0- 液晶显示器驱动电压 4d/i(rs)h/l d/i=“h”表示 db7db0 为显示数据 d/i=“l”表示 db7db0 为显示指令数据 5r/wh/l r/w=“h”,e=“h”数据被读到 db7db0r/w=“l”,e=“hl”数据被写 到 ir 或 dr 6eh/l r/w=“l”,e 信号下降沿锁存 db7db0r/w=“h”,e=“h”ddram 数据读 到 db7db0 7db0h/l 数据线 8db1h/l 数据线 9db2h/l 数据线 10db3h/l 数据线 11db4h/l 数据线 12db5h/l 数据线 13db6h/l 数据线 14db7h/l 数据线 15cs1h/l h:选择芯片(右半屏)信号 16cs2h/l h:选择芯片(左半屏)信号 17reth/l 复位信号,低电平复位 18vout-10v lcd 驱动负电压 19led+- led 背光板电源 20led- led 背光板电源 芜湖职业技术学院论文 14 3.3.33.3.3 lcd12864lcd12864 的原理简图的原理简图 图 3-3 通过 db0- db7 数据线和 at89c51 连接,对应的管脚必须有效。在显示的时 候,要通过列驱动和行驱动来控制液晶屏显示。在各个驱动时,对应的都有相应 的控制器来控制。 显示部分分为左右半屏,当 cs0 为有效电平时,左半屏显示,cs1 为有效电 平时,右半屏显示。 3.3.43.3.4 1286412864 内部功能器件及相关功能内部功能器件及相关功能 1. 指令寄存器(ir) ir 是用于寄存指令码,与数据寄存器数据相对应。当 d/i=0 时,在 e 信号 下降沿的作用下,指令码写入 ir。 2数据寄存器(dr) dr 是用于寄存数据的,与指令寄存器寄存指令相对应。当 d/i=1 时,在下 降沿作用下,图形显示数据写入 dr,或在 e 信号高电平作用下由 dr 读到 db7db0 数据总线。dr 和 ddram 之间的数据传输是模块内部自动执行的。 芜湖职业技术学院论文 15 3忙标志:bf bf 标志提供内部工作情况。bf=1 表示模块在内部操作,此时模块不接受外 部指令和数据。bf=0 时,模块为准备状态,随时可接受外部指令和数据。 利用 status read 指令,可以将 bf 读到 db7 总线,从检验模块之工作状态。 4显示控制触发器 dff 此触发器是用于模块屏幕显示开和关的控制。dff=1 为开显示(display off),ddram 的内容就显示在屏幕上,dff=0 为关显示(display off)。 ddf 的状态是指令 display on/off 和 rst 信号控制的。 5xy 地址计数器 xy 地址计数器是一个 9 位计数器。高 3 位是 x 地址计数器,低 6 位为 y 地 址计数器,xy 地址计数器实际上是作为 ddram 的地址指针,x 地址计数器为 ddram 的页指针,y 地址计数器为 ddram 的 y 地址指针。 x 地址计数器是没有记数功能的,只能用指令设置。 y 地址计数器具有循环记数功能,各显示数据写入后,y 地址自动加 1,y 地 址指针从 0 到 63。 6显示数据 ram(ddram) ddram 是存储图形显示数据的。数据为 1 表示显示选择,数据为 0 表示显示 非选择。ddram 与地址和显示位置的关系见 ddram 地址表。 7z 地址计数器 z 地址计数器是一个 6 位计数器,此计数器具备循环记数功能,它是用于显 示行扫描同步。当一行扫描完成,此地址计数器自动加 1,指向下一行扫描数据, rst 复位后 z 地址计数器为 0。 z 地址计数器可以用指令 display start line 预置。因此,显示屏幕的起 始行就由此指令控制,即 ddram 的数据从哪一行开始显示在屏幕的第一行。此模 块的 ddram 共 64 行,屏幕可以循环滚动显示 64 行。 芜湖职业技术学院论文 16 各功能指令分别介绍如下 显示开/关指令 r/wrsdb7 db6 db5 db4 db3db2db1 db0 0000111111/0 当 db01 时,lcd 显示 ram 中的内容;db00 时,关闭显示。 2、显示起始行(row)设置指令 r/wrsdb7 db6 db5 db4 db3db2db1 db0 00 11 显示起始行(063) 该指令设置了对应液晶屏最上一行的显示 ram 的行号,有规律地改变显示起 始行,可以使 lcd 实现显示滚屏的效果。 3、页(page)设置指令 r/wrsdb7 db6 db5 db4 db3db2db1 db0 00 10111 页号(07) 显示 ram 共 64 行,分 8 页,每页 8 行。 4、列地址(y address)设置指令 r/wrsdb7 db6 db5 db4 db3db2db1 db0 00 01 显示列地址(063) 设置了页地址和列地址,就唯一确定了显示 ram 中的一个单元,这样 mpu 就 可以 用读、写指令读出该单元中的内容或向该单元写进一个字节数据。 5、读状态指令 r/wrsdb7 db6 db5 db4 db3db2db1 db0 10busy0on/offrest0000 该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下: busy:1-内部在工作 0-正常状态 on/off:1-显示关闭 0-显示打开 芜湖职业技术学院论文 17 reset:1-复位状态 0-正常状态 在 busy 和 reset 状态时,除读状态指令外,其它指令均不对液晶显示模块 产生作用。 在对液晶显示模块操作之前要查询 busy 状态,以确定是否可以对液晶显示 模块进行操作。 6、写数据指令 r/wrsdb7 db6 db5 db4 db3db2db1 db0 01 写数据 读数据指令 r/wrsdb7 db6 db5 db4 db3db2db1 db0 11 读显示数据 读、写数据指令每执行完一次读、写操作,列地址就自动增一。必须注 意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的 单元中的数据 芜湖职业技术学院论文 18 3.3.53.3.5 1286412864 液晶与单片机接口电路液晶与单片机接口电路 图 3-4 表 3-4 引脚号12864 引脚at89c51 引脚 1数据线 db0-db7p0.0-p0.7 2寄存器选择 cdp2.0 3写 wrp3.6 4读 rdp3.7 5使能端 cep2.7 6复位 rst低电平 芜湖职业技术学院论文 19 排阻的计算公式:上拉电源 /(硬件额定电流单片机输出电流) 一、最大值的计算原则:要保证上拉电阻明显小于负载的阻抗,以使高电平 时输出有效。 例如:负载阻抗是 10k,供电电压是 5v,如果要求高电平不小于 4.5v,那 么,上拉电阻最大值 r 大 5-4.5)=10:5 r 大=1k 也就是最大值 1k, (如果超过了 1k,输出的高电平就小于 4.5v 了) 二、最小值的计算原则:保证不超过管子的额定电流(如果不是场效应管而 是三极管也可依照饱和电流来计算) 例:管子的额定电流 150ma,放大倍数 100,基极限流电阻 10k,工作在 5v 的系统中。那么,算法如下: ibu/r=(5-0.7)/10=0.47(ma) ic100*0.4747ma 小于额定的 150,所以可以按饱和法来算最小值。 上拉电阻最小值 r 小5v/47ma=106 欧姆 (如果小于这个电阻,管子就会过饱和而没有意 义了。如果大于这个值,管子的导体电阻就会变大一些,所以太高也不利于低电 平的输出) 芜湖职业技术学院论文 20 3.43.4 设置模块设置模块 设置模块采用三个按键与 p3.2 经过与门连接 按键与单片机的接口电路 图 3-5 按键问题:通过与门来控制,程序是中断驱动的,其中 k1 为选择按键,k2 为调整按键,k3 是确定按钮,实现时分秒的调整。相应的引脚接到 p3.0, p3.1. p3.3 上,共同控制电子时钟的调整。 选用轻触按钮型号为 xdjt1102s(轻触开关贴系列)。 芜湖职业技术学院论文 21 3.53.5 振荡电路振荡电路 本设计 51 芯片选用内部振荡器方式。由于本设计的时间由内部定时器中断 与软件计数相结合产生的,所以从计算方便以及系统的效率上考虑,本设计选用 12mhz 频率的晶振,电路原理图如下: 图 3-6 at89c51 的振荡电路 经厂家推荐稳定电路的电容 c1,c2=30pf+-10p(附录资料 at89c51.pdf 第 4-32 页) 。 芜湖职业技术学院论文 22 3.63.6 复位电路复位电路 本设计使用上电复位电路。单片机晶振为 12mhz,起振时间将近 1ms,单片 机 2 个机器周期的时间为 2us。 单片机每次上电复位所需的最短延时应该不小于 treset。这里,treset 等 于上电延时与起振延时之和。从实际上讲,延迟一个 treset 往往还不够,不能 够保障单片机有一个良好的工作开端。 复位电路把单片机锁定在复位状态上并且维持一个延时(记作 trst) ,以便 给予电源电压从上升到稳定的一个等待时间;在电源电压稳定之后,再插入一个 延时,给予时钟振荡器从起振到稳定的一个等待时间;在单片机开始进入运行状 态之前,还要至少推迟 2 个机器周期的延时间。单片机是高电平的时候复位,一 般是用电阻和电容组成的,电容充电的时 rst 复位端为高电平,此时单片机开始 复位电容充电完成,此时单片机复位完成。 由此电容值可取 22uf,电阻值取 10k。详细见附录文件(电容充电时间的 计算方法.pdf) 图 3-7 at89c51 上电复位电路 芜湖职业技术学院论文 23 第四章第四章 系统软件设计系统软件设计 软件设计是本设计的关键,软件程序编写的好坏直接影响着系统运行情况的 良好。因本程序涉及的模块较多,所以程序编写也采用模块化设计,c 语言具有 编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用 c51 编写。 程序框图如下: 芜湖职业技术学院论文 24 4-1 4.14.1 时钟函数模块时钟函数模块 具体实现含有向 ds1302 串行写入一字节即 write_a_byte_t0_ds1302,从 ds1302 读取一字节即 get_a_byte_from_ds1302,从 ds1302 指定位置读数据 read_data,向 ds1302 某地址写入数据 write_ds1302,设置时间 set_ds1302, 芜湖职业技术学院论文 25 从 ds1302 获取时间(读取当前时间)gettime,利用这些函数来实现时间,最终 显示在液晶屏上,可以自行调整。 你可以显示系统时间,也可以显示调整时间,具体实现是设置时间函数。 4.1.14.1.1 实现功能实现功能 能够显示年月日时分秒和星期,完成了 24 小时和 12 小时之间的切换,并设 有闹钟,闹钟存放于 eeprom 中,时间和星期以及闹钟均可调。其中闹钟掉电数 据不会丢失。 4.1.24.1.2 函数设计函数设计 1:void write_a_byte_to_ds1302(uchar x) (1)功能 向 ds1302 中写入一字节数据。 (2)依据 ds1302 时序图(详见 sd1302 技术资料)可知,在启动 ds1302 时每产生一 个下降沿可向 ds1302 中 写入一位数据。 芜湖职业技术学院论文 26 (3)右图为流程图: 2:uchar get_a_byte_from_ds1302() (1)功能 从 ds1302 中读取一字节数据。 (2)依据 ds1302 时序图(详见 sd1302 技术资料)可知,在启动 ds1302 时每产生一 个上升沿可向 ds1302 中 读取一位数据。 (3)右图为流程图: 指针式电子钟 芜湖职业技术学院论文 3:uchar read_ds1302(uchar addr) (1)功能 从指定的地址中读取一字节数据。 (2)依据 ds1302 时序图(详见 sd1302 技术资料)可知,在启动 ds1302 时每产生一 个下降沿可向 ds1302 中写入一位数据。在启动 ds1302 时每产生一个上升沿可向 ds1302 中读取一位数据。 (3)下图为流程图: 指针式电子钟 芜湖职业技术学院论文 4:void write_ds1302(uchar addr,uchar dat) (1)功能 向 ds1302 指定地址中写入一字节数据。 (2)依据 ds1302 时序图(详见 sd1302 技术资料)可知,在启动 ds1302 时每产生一 个下降沿可向 ds1302 中写入一位数据。在启动 ds1302 时每产生一个上升 沿可向 ds1302 中读取一位数据。 (3)右图为流程图: 5:uchar tran_input(uchar value) (1)功能 输入数据入转换函数、将十进制转换成 bcd 码 (2)依据 转换公式。 (3)下图为流程图: 芜湖职业技术学院论文 29 6:void gettime() (1)功能 读取当前时间,并判断当前是 12 小时显示还是 24 小时显示。 (2)依据 通过对标志位的判断来确定当前为 12 小时制还是 24 小时制,如果为 12 小 时时要将 ds1302 寄存器内相应位置 1。 (3)右图为流程图: 指针式电子钟 芜湖职业技术学院论文 7:void set_ds1302() (1)功能 向 ds1302 中写入初始时间,启动 ds1302 振荡器,判断上下午。 (2)依据 ds1302 时序图(详见 sd1302 技术资料) 。 (3)下图为流程图: 8:void format_datetime(uchar d,uchar *a) (1)功能 将数字转换成字符。 芜湖职业技术学院论文 31 (2)依据 asii 码表。 9:uchar isleepyear(uint y) (1)功能 判断是否为闰年。 (2)依据 闰年的判断方法。 10:void init_ds1302() (1)功能 启动 ds1302 振荡器。 (2)依据 由 ds1302 的技术资料知,ds1302 的秒寄存器的最高位为振荡器控制位,向 该位置一即可启动振荡器。 11:void ds1302_setprotect(bit flag) (1)功能 ds1302 寄存器写保护函数。 (2)依据 由 ds1302 的技术资料知,ds1302 的 0x80 地址处写一则启动寄存器保护, 写零则去除寄存器保护功能。 芜湖职业技术学院论文 32 4.24.2 指针时钟设计指针时钟设计 4.2.14.2.1 实现功能实现功能 本文件实现了指针时钟的显示,同时也实现了在 12864 显示器上花点以、画 线以及花圆的功能。 4.2.24.2.2 函数设计函数设计 1:void pixel(uchar x,uchar y,uchar mode) (1)功能 从指定坐标处绘制一个点或擦除 一个点 依据 利用 lcd_set_xy 确定坐标,然后 (2)根据 点在坐标的位置,判断是擦除还是绘 制再使 用 lcd_write_byte 函数写入数据。 (3)右图为流程图: 2: void line(uchar x1,uchar y1,uchar x2,uchar y2,bit mode) (1)功能 在 lcd 上绘制一条线段 (2)依据 利用直线两点式公式在直线点的轨迹上绘制/擦除点以达到绘线的目的。 (3)右图为流程图: 指针式电子钟 芜湖职业技术学院论文 3:void clock_plate() (1)功能 绘制一个指针时钟的圆盘 (2)依据 利用圆的公式找到点的轨迹,在轨迹上绘制点即可实现。 (3)右图为流程图: 4:void repaint_a_hand(uchar i) (1)功能 根据当前的时间绘制相对应的指针,并擦除原状态的指针 芜湖职业技术学院论文 34 (2)依据 利用圆的弧度制与时间的相映射,时间变化弧度也随之变化,从圆心到圆弧 对应时间的位置画出直线就是指针。 (3)下图为流程图: 5:void display_hms_hand() (1)功能 重新绘制秒、分、时针。 (2)依据 调用 repaint_a_hand 函数设置不同的参数即可实现。 6:void display_clockzhizhen() (1)功能 芜湖职业技术学院论文 35 读取时间绘制指针时钟到 lcd 上 (2)依据 读取从 ds1302 得到的时间,随时间的变化,指针也随之变化,形成一 个完整的模拟指针时钟,另外还要判断按键扫描的键值是否为退出键的键值, 若是则返回菜单界面。 (3)右图为流程图: 4.2.34.2.3 小结小结 用圆的弧度制与时间值相映射,使得圆上点的轨迹随着时间而跳动,实现了 指针的走动。另外读取的时间与闹钟时间相比较达到实时闹钟报警的功能。 芜湖职业技术学院论文 36 4.34.3 显示函数模块显示函数模块 检测 lcd 是否忙 lcd_check_busy(),向 lcd 发送命令 lcd_write_command,向 lcd 发送数据 void lcd_write_data,初 始化 12864 显示屏 lcd_initialize,初始化 12864 显示屏 common_show (通用显示函数) 。 显示字符和汉字的字模是用相应的软件导出的,根据液晶显 示屏的要求对应圆盘的大小都是可以规定的。 4.3.14.3.1 实现功能实现功能 通过 12864 显示指针式电子时钟 4.3.24.3.2 函数设计函数设计 1:uchar lcd_write_command_p2(uchar cmd,uchar para1,uchar para2) (1)功能 写双参的命令 (2)依据 通过判断状态位 char status_bit_01(),是读/写指令还是读/写数 据 2:uchar lcd_write_command_p1(uchar cmd,uchar para1) (1) 功能 芜湖职业技术学院论文 37 /写单参数的指令 (2) 依据 通过判断状态位 char status_bit_01(),是读/写指令还是读/写数 据 3:uchar lcd_write_command(uchar cmd) (1)功能 写无参数指令 (2)依据 通过判断状态位 char status_bit_01(),是读/写指令还是读/写 数据 4:uchar lcd_write_data(uchar dat) (1)功能 写数据 (2)依据 通过判断状态位 char status_bit_03(),数据是否为自动写状态 (3)流程图 芜湖职业技术学院论文 38 5:void set_lcd_pos(uchar row,uchar col)reentrant (1)功能 设置当前地址 (2)依据 先通过调用写双参数命令,使 lcd 准备工作,来达成我们的需要。 6:void cls() (1)功能 清屏 (2)依据 通过调用双参数和无参数函数来设置地址指针和是否自动写,再 通过判断状态位 status_bit_3(),是否要写数据,然后调用 lcd_write_data(),当向 lcd 写好后,在调用无参函数来完成自 动写结束,最后在重置地址指针。 芜湖职业技术学院论文 39 (3)流程图 7:char lcd_initialise() (1)功能 lcd 的初始化 (2)依据 通过写双参数 lcd_write_command_p2 来完成文本显示区首地址, 文本区显示区宽度,图形显示区首地

温馨提示

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

评论

0/150

提交评论