1、计算机科学与技术专业毕业论文-基于 51 单片机的电子时钟设计摘 要随着单片机技术的飞速发展在其推动下现代的电子产品几乎渗透到了社会的各个领域有力地推动了社会生产力的发展和社会信息化程度的提高同时也使现代电子产品性能进一步提高时间就是金钱时间就是生命时间就是胜利准确的掌握时间和分配时间对人们来说至关重要时钟是我们生活中必不可少的工具电子钟的设计方法有很多种但是基于单片机并通过 LCD 显示的电子时钟具有编程灵活精确度高便于携带显示直观等特点利用 STC89C52 单片机对 DS1302 时钟芯片进行读写操作并通过 1602 字符液晶显示实时时钟信息这样便构成了一个单片机电子时钟关键词单片机电子
2、时钟 STC89C52 AbstractWith the rapid development of microcomputer technology in its promotion modern electronics into almost all areas of society a strong impetus to the development of social productive forces and social improvement in the level of information but also to further improve the performan
3、ce of modern electronic productsTime is a money time is life time is victory Accurate grasp of time and allocation of time is crucial to people The clock is necessary in our life tools Clock Design There are many ways however produced by single chip electronic clock is more flexible programming and
4、easy expansion of electronic capabilities high accuracy easy to carry display visual and so on In this paper through the use of STC89C52 microcontroller by DS1302 clock chips for reading and writing operation and through 1602 character liquid crystal display real-time clock information so that formi
5、ng a single chip electronic clock Key Words MicrocontrollerSTC89C52Electronic clock目 录绪论 1概述 1研究目的 1第 1 章 设计要求与方案论证 211 设计要求 212 系统基本方案选择和论证 2com 单片机芯片的选择方案和论证 2com 显示模块选择方案和论证 2com 时钟芯片的选择方案和论证 313 电路设计最终方案决定 3第 2 章 主要元件介绍 421 STC89C52 介绍 4com STC89C52 主要功能及 PDIP 封装 4com STC89C52 引脚介绍 4com STC89C52
6、 最小系统 522 DS1302 时钟芯片介绍 6com DS1302 概述 6com DS1302 引脚介绍 7com DS1302 使用方法 72 3 1602 字符液晶介绍 9com 1602 液晶概述 9com 1602 引脚介绍 10com 1602 字符液晶使用方法 10第 3 章 系统硬件设计 1331 电路设计框图 1332 系统硬件概述 13第 4 章 系统的软件设计 1441 程序概述 1442 延时函数 1543 对 DS1302 读写操作函数 15com 向 DS1302 写数据 15com 从 DS1302 读数据 1644 显示函数 17com02 液晶中写一个指令
7、 17com 写数据 17com1602 液晶 17com 如何在液晶上显示时间日期及周 1845 按键函数 19com 1224 小时显示模式切换键 21com 功能键函数 23com 调整键函数 25com 确定键 3146 主函数 32总结 34致谢 35参考文献 36绪 论概述时间对人们来说是非常宝贵的准确的掌握时间和分配时间对人们来说至关重要因此自从时钟发明的那刻起就成为人类的好朋友随着时间的流逝科学技术的不断发展和提高人们对时间计量的精度要求越来越高应用越来越广怎样让时钟更好更方便更精确的显示时间这就要求人们不断设计研发出新型的时钟高精度的计时工具大多数都使用了石英晶体振荡器由于电
8、子钟石英表石英钟都采用了石英技术因此走时精度高稳定性好使用方便不需要经常调校数字式电子钟用集成电路计时时译码代替机械式传动用 LD 显示器代替指针进而显示时间减小了计时误差这种表具有时分秒显示时间的功能还可以进行时和分的校对片选的灵活性好时钟电路在计算机系统中起着非常重要的作用是保证系统正常工作的基础在单片机的应用系统中时钟有两个方面的含义一是指为保障系统正常工作的基准振荡定时信号主要由晶振和外围电路组成晶振频率的大小决定了单片机系统工作的快慢二是指系统的标准定时时钟即定时时间它通常有两种实现方法一是用软件实现即用单片机内部的可编程定时器计数器来实现二是用专门的时钟芯片实现研究目的通过利用 S
9、TC89C52 单片机和 DS1302 芯片以及外围的按键和 LCD 显示器等部件设计一个基于单片机的电子时钟设计的电子时钟通过液晶显示器显示并能通过按键对时间进行设置第 1 章 设计要求与方案论证11 设计要求具有年月日星期时分秒显示功能具备年月日星期时分秒校准功能具有 1224 小时切换显示功能 12 系统基本方案选择和论证 com 单片机芯片的选择方案和论证方案一 采用 STC89C52 芯片作为硬件核心 STC89C52 内部具有 8KB ROM 存储空间512 字节数据存储空间带有 2K 字节的 EEPROM 存储空间与 MCS-51 系列单片机完全兼容 STC89C52 可以通过串
10、口下载方案二采用 AT89S52AT89S52 片内具有 8K 字节程序存储空间 256 字节的数据存储空间没有 EEPROM 存储空间也与 MCS-51 系列单片机完全兼容具有在线编程可擦除技术两种单片机都完全能够满足设计需要 STC89C52 相对 ATS89C52 价格便宜且抗干扰能力强考虑到成本因素因此选用 STC89C52com 显示模块选择方案和论证方案一采用点阵式数码管显示点阵式数码管是由八行八列的发光二极管组成可用来显示数但体积较大且价格也相对较高从便携实用的角度出发不采用此种方案方案二采用 LED 数码管动态扫描 LED 数码管价格便宜对于显示数字最合适但功耗较大且显示容量不
11、够所以也不用此种方案方案三采用 LCD 液晶显示屏液晶显示屏的显示功能强大可显示大量文字显示多样清晰可见且价格适中所以采用了 LCD 数码管作为显示com 时钟芯片的选择方案和论证方案一直接采用单片机定时计数器提供秒信号使用程序实现年月日星期时分秒计数采用此种方案虽然减少芯片的使用节约成本但是实现的时间误差较大所以不采用此方案方案二采用 DS1302 时钟芯片实现时钟 DS1302 芯片是一种高性能的时钟芯片可自动对秒分时日周月年以及闰年补偿的年进行计数而且精度高工作电压25V55V 范围内 25V 时耗电小于 300nA13 电路设计最终方案决定综上各方案所述对此次作品的方案选定 采用 ST
12、C89C52 单片机作为主控制系统采用 DS1302 作为时钟芯片采用 1602 LCD 液晶作为显示器件第 2 章 主要元件介绍21 STC89C52 介绍com STC89C52 主要功能及 PDIP 封装STC89C52 是由深圳宏晶科技公司生产的与工业标准 MCS-51 指令集和输出管脚相兼容的单片机 STC89C52 主要功能如表所示兼容 MCS51 指令系统可反复擦写 Flash ROM32 个双向 IO 口 256x8bit 内部 RAM3 个 16 位可编程定时计数器中断时钟频率 0-24MHz2 个串行中断可编程 UART 串行通道 2 个外部中断源共 6 个中断源 2 个读
13、写中断口线 3 级加密位低功耗空闲和掉电模式软件设置睡眠和唤com STC89C52 引脚介绍 主电源引脚 2 根VCC Pin40 电源输入接5V 电源GND Pin20 接地线外接晶振引脚 2 根XTAL1 Pin19 片内振荡电路的输入端XTAL2 Pin20 片内振荡电路的输出端控制引脚 4 根RSTVPP Pin9 复位引脚引脚上出现 2 个机器周期的高电平将使单片机复位ALEPROG Pin30 地址锁存允许信号PSEN Pin29 外部存储器读选通信号EAVPP Pin31 程序存储器的内外部选通接低电平从外部程序存储器读指令如果接高电平则从内部程序存储器读指令可编程输入输出引脚
14、 32 根STC89C52 单片机有 4 组 8 位的可编程 IO 口分别位 P0P1P2P3 口每个口有 8位 8 根引脚共 32 根P0 口 Pin39Pin328 位双向 IO 口线名称为 P00P07P1 口 Pin1Pin88 位准双向 IO 口线名称为 P10P17 P2 口 Pin21Pin288 位准双向 IO 口线名称为 P20P27 P3 口 Pin10Pin178 位准双向 IO 口线名称为 P30P37图 21 STC89C52 PDIP 封装图com STC89C52 最小系统 最小系统是指能进行正常工作的最简单电路 STC89C52 最小应用系统电路如图 22 所示
15、它包含五个电路部分电源电路时钟电路复位电路片内外程序存储器选择电路输入输出接口电路其中电源电路时钟电路复位电路是 保证单片机系统能够正常工作的最基本的三部分电路缺一不可电源电路 芯片引脚 VCC 一般接上直流稳压电源 5V 引脚 GND 接电源 5V的负极电源电压范围在 455 之间可保证单片机系统能正常工作为提高电路的抗干扰性能通常在引角 Vcc 与 GND 之间接上一个 10uF 的电解电容和一个 01uF 陶片电容这样可抑制杂波串扰从而有效确保电路稳定性时钟电路 单片机引脚 18 和引脚 19 外接晶振及电容 STC89C52 芯片的工作频率可在 233MHz 范围之间选单片机工作频率取
16、决于晶振 XT 的频率通常选用 MHz 晶振两个小电容通常取值 3pF 以保证振荡器电路的稳定性及快速性复位电路 一般若在引脚 RST 上保持 24 个工作主频周期的高电平单片机就可以完成复位但为了保证系统可靠地复位复位电路应使引脚 RST 保持 10ms以上的高电平如图复位电路带有上电自动复位功能当电路上电时由于 C1 电容两端电压值不能突变电源 5V 会通过电容向 RST 提供充电电流因此在 RST 引脚上产生一高电平使单片机进入复位状态随着电容 C1 充电它两端电压上升使得 RST 电位下降最终使单片机退出复位状态正常运行时可按复位按钮对单片机复位图 22 STC89C52 最小系统22
17、 DS1302 时钟芯片介绍com DS1302 概述DS1302 是美国 DALLAS 公司推出的一种高性能低功耗带 RAM 的实时时钟它可以对年月日周日时分秒进行计时具有闰年补偿功能工作电压为 25V55V 同时提供了对后背电源进行涓细电流充电的能力采用三线接口与 CPU 进行同步通信图 23 DS1302 封装图com DS1302 引脚介绍各引脚功能为Vcc 主电源 Vcc2 备用电源当 Vcc2 Vcc102V 时由 Vcc2 向 DS1302 供电当Vcc2 Vcc1 时由 Vcc1 向 DS1302 供电SCLK 串行时钟输入端控制数据的输入与输出IO 三线接口时的双向数据线 C
18、E 输入信号在读写数据期间必须为高com DS1302 使用方法1 时钟芯片 DS1302 的工作原理DS1302 在每次进行读写程序前都必须初始化先把 SCLK 端置 0 接着把RST 端置 1 最后才给予 SCLK 脉冲读写时序如图 5 所示表 2 为 DS1302 的控制字此控制字的位 7 必须置 1 若为 0 则不能把对 DS1302 进行读写数据对于位 6 若对程序进行读写时 RAM 1 对时间进行读写时 CK 0 位 1 至位 5 指操作单元的地址位0 是读写操作位进行读操作时该位为 1 该位为 0 则表示进行的是写操作控制字节总是从最低位开始输入输出的表 6 为 DS1302 的
19、日历时间寄存器内容 CH 是时钟暂停标志位当该位为 1 时时钟振荡器停止 DS1302 处于低功耗状态当该位为 0时时钟开始运行 WP是写保护位在任何的对时钟和 RAM 的写操作之前 WP 必须为 0 当 WP 为 1 时写保护位防止对任一寄存器的写操作2 DS1302 的控制字节DS1302 的控制字如表所示控制字节最高有效位位 7 必须是逻辑 1 如果它为0 则不能把数据写入 DS1302 中位 6 为 0 表示存取日历时钟数据为 1 表示存取RAM 数据位 5 至位 1 指示操作单元的地址最低有效位位 0 如为 0 表示要进行写操作为 1 表示进行读操作控制字节总是从最低位开始传输1 R
20、AMA4 A3 A2 A1 A0 RD CK WR 表22 DS1302 控制字3 数据输入输出 IO在控制指令字输入后的下一个 SCLK 时钟的上升沿时数据被写入 DS1302 数据输入从低位即位 0 开始同样在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据读出数据时从低位 0 位到高位 7 其读写时序如图示图 24 DS1302 读写时序4DS1302 寄存器DS1302 中与时间日期有关的寄存器共有 12 个其中 7 个存放数据的格式为BCD 码格式其读写地址如下表所示读寄存器 写寄存器 Bit7 Bit7 Bit7 Bit7 Bit7 Bit7Bi
21、t7 Bit7 范围 81H80HCH 10 秒 秒 00-59 83H82H10 分 分 00-59 85H84H12 0 10 时 时 0-23 24AMPM 1-12 87H86H 10 日 日 1-3189H88H 10 月 月 1-12 8BH8AH0 0 0 0 0 周1-7 8DH8CH10 年 年 00-99 8FH8EHWP 0 0 0 0 00 0 表 23 DS1302 时钟寄存器第一行秒寄存器 CH 为时钟暂停标志位该位为 1 时时钟停止该位为 0 时时钟运行第二行分寄存器 bit0bit6 表示分钟数因采用 BCD 编码所以低四位最大能表示的数字为 9 计数满向高三位
22、进 1第三行时寄存器 1224 用来定义 DS1302 小时的运行模式 12 小时模式下bit5 为 1 表示 PM 下午 bit5 为 0 表示 AM 上午第八行控制寄存器 bit7 是写保护位 WP 当 WP 为 1 时写保护位可防止对任一寄存器的写操作在任何的对时钟和 RAM 的写操作之前 WP 位必须为 0 此外 DS1302 还有年份寄存器控制寄存器充电寄存器时钟突发寄存器及与RAM 相关的寄存器等时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容 DS1302 与 RAM 相关的寄存器分为两类一类是单个 RAM 单元共 31 个每个单元组态为一个 8 位的字节其命令控制字
23、为 C0HFDH 其中奇数为读操作偶数为写操作另一类为突发方式下的 RAM 寄存器此方式下可一次性读写所有的RAM 的 31 个字节命令控制字为 FEH 写 FFH 读 2 3 1602 字符液晶介绍com 1602 液晶概述工业字符型液晶同时显示目前市面上绝大多数基于 HD44780 液晶芯片控制原理是完全相同的 1602 液晶模块显示屏是蓝色背光白色字体 图 25 1602 字符液晶com 1602 引脚介绍编号 符号 引脚说明 编号 符号 引脚说明 1 GND 电源地2 VCC 电源正极 3 VO 液晶显示对比度调节端 4 RS 数据命令选择端 5 RW 读写选择 6 E 使能信号 7
24、D0 数据口 8 D1数据口 9 D2 数据口 10 D3 数据口 11 D4 数据口 12 D5 数据口 13 D6 数据口 14 D7 数据口 15 BLA 背光电源正 16 BLK 背光电源负 表 24 1602 字符液晶引脚说明各个引脚具体功能说明第 1 脚 GND 为地电源第 2 脚 VCC 接 5V 正电源第 3 脚 VO 为液晶显示器对比度调整端接正电源时对比度最弱接地电源时对比度最高对比度过高时会产生重影使用一个 1K 的电位器调整对比度第 4 脚 RS 为寄存器选择高电平时选择数据寄存器低电平时选择指令寄存器第 5 脚 RW 为读写信号线高电平时进行读操作低电平时进行写操作第
25、 6 脚 E 端为使能端当 E 端由高电平跳变成低电平时液晶模块执行命令第 714 脚 DB0DB7 为 8 位双向数据线第 1516 脚背光灯电源com 1602 字符液晶使用方法1 基本操作时序操作 输入 输出 读状态 RSLRWHEH D0D7状态字写指令 RSLRWLD0D7指令码 E高脉冲 无 读数据RSHRWHEH D0D7数据 写数据 RSHRWLD0D7数据 E高脉冲 无 表 25 1602 字符液晶读写状态表图 26 1602 液晶写时序图图 27 1602 液晶读时序图2RAM1602 液晶控制器芯片内部带有 80 个 8 位的 RAM 缓冲区其地址和屏幕的对应关系 160
26、2 液晶模块内部的字符发生存储器 CGROM 已经存储了 160 个不同的点阵字符图形如下表所示这些字符有阿拉伯数字英文字母的大小写常用的符号和日文假名等每一个字符都有一个固定的代码比如大写的英文字母 A 的代码是 B41H 显示时模块把地址 41H 中的点阵字符图形显示出来我们就能看到字母 A XXXX0000 0 P p - PXXXX0001 1 A Q a q qXXXX0010 2 B R b r XXXX0011 3 C S c s XXXX0100 4 D T d t XXXX0101 5 E U e u oXXXX0110 6 F V f v XXXX0111 7 G W g
27、w XXXX1000 8 H X h x f XXXXX1001 9 I Y i y -1 yXXXX1010 J Z j z 千XXXX1011 K k 万XXXX1100 L l XXXX1101 - M m XXXX1110 N n XXXX1111 O - o 表 26 1602 字符液晶字库表第 3 章 系统硬件设计31 电路设计框图图 31 硬件框图32 系统硬件概述本电路以 STC89C52 单片机为控制核心以 STC89C52 最小系统为基础时钟电路由高精度低功耗的 DS1302 提供采用三线接口与 CPU 进行同步通信输入部分采用四个独立式按键 S1S2S3S41602 液晶
28、显示部分 D0D7 口与单片机 P0 口相连具体线路连接详见附录 1第 4 章 系统的软件设计41 程序概述DS1302 时钟芯片具有通电自动计时的功能向 DS1302 中写入一个初值如写入 20110501 图 41 主程序框图42 延时函数void delay uint z uint xyfor x zx 0x- for y 110y 0y- 由 for 循环构成的延时函数 z 的取值为这个函数的延时 ms 数如 delay 200 大约延时 200ms delay 500 大约延时 500ms 因下文多次用到固在此先作说明43 对 DS1302 读写操作函数在对 DS1302 时钟芯片操
29、作前应对其操作时序有所了解参看前文 DS1302 介绍 DS1302 采用串行方式与单片机进行通信一个机器周期只能读写一个字节的一位因此在单片机与 DS1302 芯片间传输一字节 8 位数据要分 8 次进行且先从低位开始传输com 向 DS1302 写数据写数据字节子函数void write_1302_byte uchar temp 用来发送 8 位数据信息uchar ifor i 0i 8i 循环 8 次 写入数据sck 0sda temp0x01 每次传输低字节temp 1 右移一位sck 1 在 SCK 上升沿的时候字节写入 DS13021302 写数据子函数void write_130
30、2 uchar addduchar dat rst 0_nop_ sck 0_nop_ rst 1_nop_ write_1302_byte addd 发送地址write_1302_byte dat 发送数据rst 0com 从 DS1302 读数据读 DS1302 数据函数uchar read_1302 uchar add 输入地址 add 返回读取的数据uchar itemp 0x00rst 0sck 0rst 1write_1302_byte add for i 0i 8i 循环 8 次读取if sda temp 0x80 每次传输低字节等价于 temp temp0x80sck 0tem
31、p 1 右移一位sck 1 sck 被置高在其下一次变为 0 时数据被写入rst 0 以下为 DS1302 复位的稳定时间sck 0sck 1sda 0sda 1return temp 将 temp 值返回44 显示函数对 1602 进行操作前要对其进行初使化初使化完成后它才能正常显示如果想在 1602 液晶的某一个位置显示一个内容要先对其写入一个指令在什么地方显示然后再对其写入一个数据要显示什么内容对 1602 的液晶初使化需要用写入指令的方式完成com02 液晶中写一个指令void write_com uchar com lcdwr 0 lcdwr 为读写控制端 lcdwr 0 这里可不写
32、lcdrs 0 液晶 rs 接口为 0 时写指令 rs 为 1 时写数据P0 com 将要写的指令赋给 P0 口delay 5 由 1602 读写操作时序图先将指令赋给 P0 口延时后将使能lcden 1 端 lcden 置高再延时一段时间然后将 lcden 置低这样指令delay 5 就写入到 LCD 了lcden 0com 写数据void write_data uchar date 与写指令类似这里 lcdrs 设为 1lcdrs 1P0 datedelay 5 lcden 1delay 5 lcden 0com1602 液晶此函数首先对液晶进行初使化使其处于待命状态然后将时钟框架显示出来
33、年月日之间的时分秒之间的还有世纪年的高两位void init_1602 uchar numlcdwr 0lcden 0write_com 0x38 设置 LCD 为 162 显示 57 点阵 8 位数据接口模式write_com 0x0c 开显示不显示光标write_com 0x06 写一个字符后地址指针加 1write_com 0x01 显示清 0write_com 0x80 将指针指向初始位置for num 0num 14num 循环函数用于将“ 20 - - “写入液晶write_data tablenum write_com 0x800x404 将指针指向 1602 液晶的第二行第四个
34、字段for num 0num 8num 功能与上同用于将“ “写入write_data table1num com 如何在液晶上显示时间日期及周DS1302 中的时间日期等信息是以 BCD 码的形式存放的要先将从 1302 中读取的数据转化成 10 进制然后显示在液晶上相应的位置显示时间日期子函数void write_sfm uchar adduchar time 用于在 1602 上显示年月日时分秒Add 为显示位置 time 为要显示的内容uchar shigeshi time16 将从 DS1302 中读取的 BCD 码数据转化成 10 进制个位和10 ge time16 进制十位wri
35、te_com add0x80 定义显示在液晶的什么位置write_data 0x30shi 由 1602 液晶字库可知 09 的数据码分别对应0x300x39write_data 0x30ge 初使化中设定了写一个字符后地址指针加 1 因此这里不用重新光标定位显示周子函数void write_zhou uchar time1 用于在 1602 上显示周信息与显示时间日期子函数类似uchar gege time116 一周七天因此只需个位write_com 0x8013 write_data 0x30ge 45 按键函数此电子时钟共有 4 个按键 S1S2S3 与调时有关图按键程序如图 11S4
36、 为 12 小时切换键S1 功能键在 24 小时显示模式下该键被第一次按下后进入秒调整液晶显示器上的时间停止走动模式再次按下后进入分调整模式接着是调时模式调年模式调月模式调日模式调周模式当第八次按下该键后退出S2 调整键在调整模式下该键每按一次相应时间或日期加 1S3 确定键在调整模式下该键被按下后退出调整模式并将调整后的时间日期写入 DS1302S4 显示模式调整键 用于对时间的 1224 小时模式的切换图 42 按键程序图com 1224 小时显示模式切换键时钟默认在 24 小时模式下运行定义一个标志位 flag1 第一次按下切换键把瞬时时间转化成 12 小时制令 flag1 1 并写入
37、DS1302 芯片此后 DS1302 芯片在12 小时模式下运行第二次按下切换键即返回 24 小时显示模式令 flag1 0 把瞬时时间转化成 24 小时模式并写入 DS1302 芯片有关 DS1302 的时间寄存器存放形式参阅前文如 24 小时模式下的 2200 存放的形式为小时模式下的 22 点也就是 1000PM 存放形式为在切换的一瞬间我们只需要把小时数据 0xb0 写入到 DS1302 这样就能让时钟芯片在 12 小时模式下运行了需要注意的是 12 小时模式下只用到后 5 位来表示时间第 6 位用来表示 AM 或PM 信息如果真接用 24 小时模式下的显示方法是会出错的这里我们需要对
38、时进行转化首先提取 AMPM 信息让其显示然后提取其后 5 位时间显示时间在主函数部分如果检测到 flag1 1 就进行转换 12 转 24 小进模式与其类似不再赘述if s1num 0s4 0 设置键没被按下且 1224 小时模式切换键被按下后delay 5 if s4 0 s2numwhile s4 if s2num 1 24 小时切换成 12 小时int geshiflag1 1hour read_1302 0x85 ge hour16shi hour16if shi 1ge 1 时小于 12if shi 0ge 0 hour 0x92else hour hour0x9fhour hou
39、r0x80if shi 1ge 2 12 点hour hour0x80hour hour0x20if shi 1ge 3ge 9 13 点 19 点hour hour-0x12hour hour0x80hour hour0x20if shi 2ge 0 20 点hour 0xa8if shi 2ge 1 hour 0xa9if shi 2ge 2 hour 0xb0if shi 2ge 3 hour 0xb1write_1302 0x8e0x00 write_1302 0x84hour write_1302 0x8e0x80 if s2num 2 12 小时切换成 24 小时int ap1ap
40、2hour read_1302 0x85 ap1 hour0x20 ap1 0 时 AM ap1 0 时 PMap2 hour0x1fif ap1 0ap2 0x12 AM 且小时不等于 12hour hour0x1fif ap1 0ap2 0x12 AM 小时等于 12 即 0 点hour 0x00if ap1 0ap2 0x08 下午 8 点转化成 20 点hour 0x20if ap1 0ap2 0x09 下午 9 点转化成 21 点hour 0x21if ap1 0ap2 0x08ap2 0x09 PM 且不是 8 点或 9 点hour hour-0xa0hour hour0x12if
41、 ap1 0ap2 0x12 12 点 PM 也就是 24 小时模式下的 12 点hour hour-0xa0write_1302 0x8e0x00 把转化成 24 小进模式后的时写入DS1302write_1302 0x84hour write_1302 0x8e0x80 flag1 0s2num 0 按键次数清 0com 功能键函数if s1 0s2num 0 如果 S1 被按下 当在 12 小时模式下显示时按此键无效delay 5 if s1 0 以上用于键盘消抖差小误差flag 1 时钟暂停标志位 flag 1 时液晶时钟计时暂停s1nums1num 表示按键被按下的次数按下次数加 1
42、while s1 松手后继续执行后面指令if s1num 1 如果 S1 按下一次秒的个位位置闪烁光标write_com 0x800x4011 write_com 0x0f if s1num 2 如果 S1 按下两次先将设置后的秒写到 DS1302 再在分的个位位置闪烁光标write_1302 0x8e0x00 禁止写保护write_1302 0x80miao 写入秒信息write_1302 0x8e0x80 开写保护write_com 0x800x408 指针指到分钟显示的位置write_com 0x0f 闪烁光标if s1num 3 以下同上面类似write_1302 0x8e0x00 w
43、rite_1302 0x82fen write_1302 0x8e0x80 write_com 0x800x405 write_com 0x0f if s1num 4 write_1302 0x8e0x00 write_1302 0x84hour write_1302 0x8e0x80 write_com 0x804 write_com 0x0f if s1num 5 write_1302 0x8e0x00 write_1302 0x8cnian write_1302 0x8e0x80 write_com 0x807 write_com 0x0f if s1num 6 write_1302 0
44、x8e0x00 write_1302 0x88yue write_1302 0x8e0x80 write_com 0x8010 write_com 0x0f if s1num 7 write_1302 0x8e0x00 write_1302 0x86ri write_1302 0x8e0x80 write_com 0x8013 write_com 0x0f if s1num 8 write_1302 0x8e0x00 write_1302 0x8azhou write_1302 0x8e0x80 flag 0 时钟暂停标志位 flag 0 退出调整模式 write_com 0x0c 不显示光标s1num 0 按键次数清 0com 调整键函数每按一次此键相应的时间或日期加 1 但是时间日期是以 BCD 码的形式存放