万年历程序和电路图.doc_第1页
万年历程序和电路图.doc_第2页
万年历程序和电路图.doc_第3页
万年历程序和电路图.doc_第4页
万年历程序和电路图.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

I 目录目录 第一章 设计方案 1 1 1 硬件设计 1 1 1 1 设计要求 1 1 1 2 硬件框图 1 1 1 3 硬件选择 1 1 2 软件设计 3 1 2 1 编程环境及语言 3 1 2 2 程序框图 3 第二章 系统设计 4 2 1 硬件设计 4 2 1 1 振荡电路 4 2 1 2 复位电路 4 2 1 3 按键 4 2 1 4 lcd 显示电路 5 2 1 5 音乐播放电路 5 2 1 6 P0 上拉电阻计算 6 2 2 软件设计 7 2 2 1 程序流程图 7 2 2 2 流程的各个模块设计 9 心得体会 21 附录 1 元器件表 22 附录 2 程序源代码 23 1602 c 文件 23 Clock H 文件 24 Music h 文件 28 LCD1602 H 文件 29 参考文献 31 引言引言 单片机就是微控制器 是面向应用对象设计 突出控制功能的芯片 单片机接 上晶振 复位电路和相应的接口电路 装载软件后就可以构成单片机应用系统 将 它嵌入到形形色色的应用系统中 就构成了众多产品 设备的智能化核心 本设计 就是应用单片机强大的控制功能制作而成的电子万年历 该电子万年历包括三大功 II 能 实时显示年 月 日 时 分 秒 实现位调 附加播放音乐功能 本设计是基于 AT89C51 和 LCD1602 液晶显示器设计的可调式电子钟 该单片机 采用的 MCU51 内核 因此具有很好的兼容性 内部带有 4KB 的 ROM 能够存储大 量的程序 最突出特点是具有 ISP 在系统烧写功能 使得烧写程序更加方便 显示 器件采用通用型 1602 液晶 可显示 32 个字符 如果使用数码管来做显示器件需消 耗大量的系统资源 因此采用低功耗的 1602 液晶 该液晶显示方便 功能强大 完 全能满足数字万年历的显示要求 通过此次设计能够更加牢固的掌握单片机的应用技术 增强动手能力 硬件设 计能力以及软件设计能力 0 第一章第一章 设计方案设计方案 1 1 硬件设计硬件设计 1 1 1 设计要求设计要求 实现年月日 时分秒 星期的显示功能 用两个按键来实现日期和时间的调整功能 调整要求星期能自动更新 且能实现位调 显示格式 四位年 两位月 两位日 星期 字母前三位 两位时 两位分 两位秒 比如 YYYY MM DD WEEK HH MM SS 1 1 2 硬件框图硬件框图 图 1 1 硬件框图 日期时间由硬件软件结合产生 按键之间相互配合完成当前日期时间的调整功能 过 程与结果由控制芯片分别输出到显示器上 本设计附加了播放音乐的功能 音乐从蜂鸣器产生 1 1 3 硬件选择硬件选择 1 显示模块 本设计具体选用与实际应用与消耗资源相关 万年历用到的地方大多都在室内 现 市场上与许多显示器 在日常生活中最常见的有数码管 led 点阵屏 lcd 液晶显示器等 八段数码管的优点 亮度高 显示大 驱动部份的软件简单 缺点 与液晶相比 耗电及体积大 数码管只能单纯的显示数字 不能生动的表达各个参数的信息 消耗电 力也比 led 液晶显示器大 LCD 液晶显示器它是一种专门用来显示字母 数字 符号等的点阵型液晶模块 在 单片机系统中应用晶液显示器作为输出器件有以下几个优点 显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度 恒定发光 而不像阴极射线管显示器 CRT 那样需要不断刷新新亮点 因此 液晶显示 器画质高且不会闪烁 数字式接口 液晶显示器都是数字式的 和单片机系统的接口更加简单可靠 操作 更加方便 控制芯片控制芯片 显示器显示器 按键调整按键调整 1 体积小 重量轻 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的 目的 在重量上比相同显示面积的传统显示器要轻得多 功耗低 相对而言 液晶显示器的功耗主要消耗在其内部的电极和驱动 IC 上 因而 耗电量比其它显示器要少得多 Lcd 液晶能一屏把本设计所要显示的信息表达完整 而且 lcd 耗电小 体积小很适合与室内使用 本设计的要求日期时间以数字表示 星期用 3 位英文字符表示共 21 个字符 lcd1602 能显示 32 个字符 足以完成显示功能 Lcd1602 有 16 个引脚 各个引脚功能见 下表 引脚号引脚名电平输入 输出作用 1VSS电源地 2VDDVcc电源 5v 3VEE对比调整电压 4RS0 1输入0 输入指令 1 输入数据 5R W0 1输入0 向 lcd 写入数据或指令 1 从 lcd 读取数据 6E1 1 0输入使能信号 1 读取信息 1 0 下降沿 执行指令 7DB00 1输入 输出数据总线 line0 8DB10 1输入 输出数据总线 line1 9DB20 1输入 输出数据总线 line2 10DB30 1输入 输出数据总线 line3 11DB40 1输入 输出数据总线 line4 12DB50 1输入 输出数据总线 line5 13DB60 1输入 输出数据总线 line6 14DB70 1输入 输出数据总线 line7 15AVccLcd 背光正极 14KLcd 背光负极 表 1 1 lcd1602 引脚及功能 2 按键与蜂鸣器 本设计选用轻触按钮 型号为 XDJT1102S 选用压电式蜂鸣器型号 PT 1540P RoHS 3 控制芯片 根据 lcd1602 液晶显示器与按键的引脚 I O 数量以及扩展功能的要求 所选控制芯片 至少需要三组 I O 口 本设计功能简单 所以程序量较小 AT89C51 是一种带 4K 字节 闪存只读存储器的低电压 高性能 CMOS 8 位微处理器 AT89c51 是 51 系列基本的控 制芯片 能满足本设计的要求 性价比也要低于 51 系列其他的芯片 4 日期时间生成模块 2 为了减少成本 使用 51 的内部定时器中断再配合软件计数的方式来生成一秒的时间 3 1 2 软件设计软件设计 1 2 1 编程环境及语言 编程环境及语言 本设计的原理图实现是在 proteus 中实现的 本设计的程序在 keil Uvision4 环境中进 行编程与调试的 keil Uvision4 与 proteus 联调能有效的对各个设计进行测试 编程语言 51C 1 2 2 程序框图程序框图 图 1 2 程序框图 1 time0 中断用于生成时间 具体由程序和硬件共同产生 1 秒的时间 2 两个外部中断能进行时间日期的切换 和对时间日期进行调整 播放音乐 能满 足对按键设置的要求 3 主函数能及时在液晶屏上显示默认的时间和调整后的时间 主函数主函数 Time0 中断中断 与软件计数与软件计数 产生产生 1 秒的秒的 时间 并实时间 并实 现日期时间现日期时间 更新更新 按键按键 1 按下按下 Int0 中断响中断响 应应 按键按键 2 按下按下 Int1 中断响中断响 应应 液晶显示液晶显示 4 第二章第二章 系统设计系统设计 2 1 硬件设计硬件设计 2 1 1 振荡电路振荡电路 本设计 51 芯片选用内部振荡器方式 由于本设计的时间由内部定时器中断与软件计 数相结合产生的 所以从计算方便以及系统的效率上考虑 本设计选用 12MHz 频率的晶 振 电路原理图如下 图 2 1 AT89C51 的振荡电路 经厂家推荐稳定电路的电容 C1 C2 30pF 10p 附录资料 AT89C51 PDF 第 4 32 页 2 1 2 复位电路复位电路 本设计使用上电复位电路 单片机晶振为 12MHz 起振时间将近 1ms 单片机 1 个机 器周期的时间为 1us 单片机每次上电复位所需的最短延时应该不小于 treset 这里 treset 等于上电延时与 起振延时之和 从实际上讲 延迟一个 treset 往往还不够 不能够保障单片机有一个良好 的工作开端 复位电路把单片机锁定在复位状态上并且维持一个延时 记作 TRST 以便给予电 源电压从上升到稳定的一个等待时间 在电源电压稳定之后 再插入一个延时 给予时 钟振荡器从起振到稳定的一个等待时间 在单片机开始进入运行状态之前 还要至少推 迟 2 个机器周期的延时间 单片机是高电平的时候复位 一般是用电阻和电容组成的 电 容充电的时 RST 复位端为高电平 此时单片机开始复位 电容充电完成 此时单片机复位完 成 由此电容值可取 22uf 电阻值取 10K 详细见附录文件 电容充电时间的计算方 法 pdf 图 2 2 AT89C51 上电复位电路 2 1 3 按键按键 5 选用两个轻触按键与单片机 P3 2 int0 P3 3 int1 两个引脚相接组成的独立按 键 6 2 1 4 lcd 显示电路显示电路 1 lcd 的选用 本设计选用型号为 LCD 016M002L 显示器 具体资料见附录文件 LCD 016M002L pdf 2 lcd 与 51 引脚的连接 Lcd1602 引脚AT89C51 引脚LCD1602 引脚AT89C51 引脚 RSP2 0DB3P0 3 R WP2 1DB4P0 4 EP2 2DB5P0 5 DB0P0 0DB6P0 6 DB1P0 1DB7P0 7 DB2P0 2 表 2 1 lcd1602 与 51 的连接 VEE 为液晶显示器对比度调整端 接正电源时对比度最弱 接地时对比度最高 对比 度过高时会产生 鬼影 使用时可以通过一个 10K 的电位器调整对比度 图 2 3 1602 液晶与单片机接口电路 2 1 5 音乐播放电路音乐播放电路 此模块采用蜂鸣器实现 蜂鸣器驱动电流为20mA 单片机的 P1 口输出电流 为 26mA 能够直接驱动蜂鸣器 只要编写相应的程序即可实现发出不同频率的声音 蜂鸣器与单片机的接口电路 蜂鸣器接线与单片机P1 7 引脚相连 图 2 5 蜂鸣器电路 7 2 1 6 P0 上拉电阻计算上拉电阻计算 由于 lcd 数据口是与 51 的 P0 口连接的 在 P0 口做一般 I O 使用时要外接上拉电阻 根据 LCD 016M002L 显示器的伏安特性 要保证上拉电阻明显小于 lcd 的阻抗 以 使高电平时输出有效 Lcd 工作电压 5V Lcd 工作电流 20mA lcd 阻抗 5v 20mA 2 5k 上拉电阻值可以取 2 2k 详细见附录资料上拉电阻下拉电阻的总结 doc 由于 需要八个相同的上拉电阻如图 2 6 所示 也可用一个排阻 具体型号见附录表 图 2 6 上拉电阻 8 2 2 软件设计软件设计 2 2 1 程序流程图程序流程图 图 2 6 主函数流程图 2 7 time0 中断服务程序流程 图 2 8 int1 中断服务流程 开始 初始化 将数据写入缓冲区 显示缓冲区内容 开始 赋计数初值 判断是否计满一秒 时间更新 返回 是 否 是否 判断是否在调整状态 调整当前指针号的值 播放音乐 开始 返回 9 开始 定时器停止工作 调整指 针加 1 调状态标志置 1 秒清零 等待按键松开 判断调整指针是否增到 上限值 即调整完毕 指针复位 调整状态标志清零 定时器开始工作 返回 是否 图 2 9 int0 中断服务流程 10 2 2 2 流程的各个模块设计流程的各个模块设计 全局变量 datetime 数组保存日期时间星期的容器 min 2 hour 2 day 2 mon 2 year 4 调整时候使用的中间变量 buffer date 16 buffer time 16 显示缓冲区 1 定时器中断服务程序 定时器 1 计时一秒 计数初值的计算方法如下 设晶振频率为 f 则定时 计数器计 数频率为 f 12 定时 计数器的计数总次数 T all 在方式 1 为 216 65536 定时间隔为 T 计数初值为 a 则有a T f 12 将计数初值 a 分别赋给加 1 计数器 TH0 TL0 TH0 T all a 256 TL0 T all a 256 本设计晶振频率为 12MHz 定时间隔为 50ms 所以 a 0 05 12000000 12 a 50000 TH0 65536 50000 256 TL0 65536 50000 256 1s 就要计 20 次 中断服务程序如下 void time0 interrupt 1 using 3 TH0 65536 50000 256 TL0 65536 50000 256 if count 20 计时一秒 count 0 DATATIME 按实际规则日期时间更新 2 int0 中断服务程序 按键 1 接在了 int0 对应的引脚 P3 2 按键 2 接在了 int1 对应的引脚 P3 3 Int0 为 电平触发方式 int1 为边沿触发方式 由于按键 2 是一键多功能 具体功能由状态标志 FLAG 表明 所以在 int0 中断服务程序中要有对 FLAG 标志的置位及清位的操作 在调整 期间为了时间准确定时器不能工作 为了对日期时间的各位值进行循环调整 设置了一 个计数器 它的值表明要调整的是哪位 终端服务程序如下 void int0 K1 interrupt 0 TR0 0 定时器停止 cnum 计数器加 1 11 FLAG 1 标志位置位 datetime 0 0 while K1 0 等待按键松开 if cnum 12 调整结束 各个状态还原 TR0 1 cnum 1 FLAG 0 3 int1 中断服务程序 Int1 只要判断标志位执行任务就行了 中断服务程序如下 void int1 K2 interrupt 2 if FLAG 1 调整状态下则位对应调整位的增值 正常状态则播放音乐 EDIT datetime cnum 按计数器的值调整对应位 else ShowString 0 x00 0 播放音乐是屏幕上的字幕 ShowString 0 x00 1 happy music Delayms 500 4 主函数程序 主函数对各个中断及 lcd1602 初始化后 就一直进行显示工作了 显示的时候判断 标志 FLAG 以区别是正常显示还是闪烁显示 主程序如下 void main IE 0X87 开中断 ea 1 et0 1 et1 1 ex0 1 TCON 0X04 it1 为边沿触发 it0 电平触发 IP 0X0a 定时器 0 1 为高优先级 TMOD 0X01 设置定时器 0 方式 1 TH0 65536 50000 256 TL0 65536 50000 256 Initialize LCD 初始化 LCD TR0 1 12 while 1 buffer value 设置显示缓存区的内容 if FLAG 调整时对应调整位置闪烁 if refresh 5 refresh 0 Flash cnum DIS buffer 将显示缓冲区的内容输出到 lcd 上 5 星期在调整是是自动更新的 这要归功于蔡勒公式 算法如下 C51 表示 unsigned char week unsigned int y m c s y datetime 5 100 c datetime 5 100 if datetime 4 1 m 13 y if datetime 4 2 m 14 y s y y 4 c 4 2 c 26 m 1 10 datetime 3 1 蔡勒公式 s s 7 return s 函数返回值 0 星期日 1 星期一 6 星期六 6 闰年是自动判断的 算法 year 4 0 else return 0 13 是闰年返回 1 否则返回 0 7 月的天数判断 由于 1 3 5 7 8 10 12 每月有 31 天 4 6 9 11 每月有 30 天 2 月 闰年 29 天 平年 28 天 所以只要判断月号是哪一类的 就返回那类的值 2 月用闰年判 断算法判断 函数代码如下 unsigned char MON unsigned char month switch month case 1 case 3 case 5 case 7 case 8 case 10 case 12 return 31 case 4 case 6 case 9 case 11 return 30 default if Ynian datetime 5 二月特殊 闰年判断 return 29 else return 28 返回各月的天数上限 8 日期时间更新 按照实际规则更新 60 秒一分 60 分一时 24 小时一日 30 日或 31 日或 28 日或 29 日一月 12 月一年 函数代码如下 void DATATIME datetime 0 if datetime 0 59 秒判断 datetime 0 0 datetime 1 14 if datetime 1 59 分 datetime 1 0 datetime 2 if datetime 2 23 时 datetime 2 0 datetime 3 if datetime 3 MON datetime 4 日 datetime 3 1 datetime 4 if datetime 4 12 月 datetime 4 1 datetime 5 年 时刻为进入调整状态作准备 将当前日期时间值赋给调整时的变量 datetime 6 week min 0 datetime 1 10 min 1 datetime 1 10 hour 0 datetime 2 10 hour 1 datetime 2 10 day 0 datetime 3 10 day 1 datetime 3 10 mon 0 datetime 4 10 mon 1 datetime 4 10 year 0 datetime 5 10 year 1 datetime 5 100 10 year 2 datetime 5 1000 100 year 3 datetime 5 1000 9 调整日期时间函数 利用 cnum 计数器指定当前的调整属性 函数源代码如下 void EDIT datetime char cnum switch cnum case 0 min 0 15 if min 0 9 分低位调整限制 min 0 0 break case 1 min 1 if min 1 5 分高调整限制 min 1 0 break case 2 hour 0 if hour 0 9 时低位调整限制 hour 0 0 break case 3 hour 1 if hour 1 2 时高位调整限制 hour 1 0 break case 4 day 0 if day 0 9 日低位调整限制 day 0 0 break case 5 day 1 if day 1 3 日高位调整限制 day 1 0 break case 6 mon 0 if mon 0 9 月低位调整限制 mon 0 0 break case 7 mon 1 if mon 1 1 月高位调整限制 mon 1 0 break case 8 16 year 0 年调整 if year 0 9 year 0 0 break case 9 year 1 if year 1 9 year 1 0 break case 10 year 2 if year 2 9 year 2 0 break case 11 year 3 if year 3 9 year 3 0 break datetime 1 min 0 min 1 10 调整后将 datetime 实时更新 datetime 2 hour 0 hour 1 10 datetime 3 day 0 day 1 10 datetime 4 mon 0 mon 1 10 datetime 5 year 0 year 1 10 year 2 100 year 3 1000 调整后能及时让 datetime 更新 10 将 datetime 的日期时间星期按照格式放到缓冲区上 格式为 YYYY MM DD week HH MM SS 函数源代码如下 void buffer value Format Datetime datetime 0 buffer time 6 将年月日时分秒星期 Format Datetime datetime 1 buffer time 3 放到对应缓冲区的位置上 Format Datetime datetime 2 buffer time 0 以待显示 Format Datetime datetime 3 buffer date 8 Format Datetime datetime 4 buffer date 5 Format Datetime datetime 5 100 buffer date 2 17 Format Datetime datetime 5 100 buffer date 0 buffer date 13 week1 week buffer date 14 week2 week buffer date 15 week3 week Lcd1602 显示的是字符 所以用函数转换 Format Datetime 数组 1 数组 2 功能 将数组 1 的数值转换为字符放到数组 2 11 闪烁显示 在主函数显示配合延时清空 写入缓冲区的内容 达到闪烁效果 具体 哪位闪烁还是有 cnum 决定 函数源代码如下 void Flash char n switch n case 0 buffer clr 0 4 对应分低位置 清空 break case 1 buffer clr 0 3 break case 2 buffer clr 0 1 break case 3 buffer clr 0 0 break case 4 buffer clr 1 9 break case 5 buffer clr 1 8 break case 6 buffer clr 1 6 break case 7 buffer clr 1 5 break case 8 18 buffer clr 1 3 break case 9 buffer clr 1 2 break case 10 buffer clr 1 1 break case 11 buffer clr 1 0 break case 12 Write LCD Command 0 xc0 12 第 2 行 12 列后显示 over Write LCD Data o Write LCD Data v Write LCD Data e Write LCD Data r break 12 显示缓冲区 源代码如下 void DIS buffer ShowString 0 x00 0 buffer date 输出缓冲区的内容 ShowString 0 x00 1 buffer time ShowString 是 lcd 的驱动函数 其他的驱动函数见下 13 lcd1602 的驱动程序 Lcd1602 与单片机引脚的连接前面已将过了 下面是各个对 lcd1602 的操作 具体细 节可看 lcd1602 的资料 函数名 Busy Check 功能 读取 lcd 忙标志 输入参数 无 输出参数 返回读取的数据 版本号 1 1 0 修改日期 2010 06 01 unsigned char Busy Check 19 unsigned char LCD Status RS 0 寄存器选择 RW 1 读状态寄存器 EN 1 开始读 Delayms 1 LCD Status P0 EN 0 return LCD Status 函数名 Write LCD Command 功能 向 LCD 写指令 输入参数 cmd 指令 输出参数 无 版本号 1 1 0 修改日期 2010 06 01 void Write LCD Command unsigned char cmd while Busy Check 忙等待 RS 0 选择命令寄存器 RW 0 写 EN 0 P0 cmd EN 1 Delayms 1 EN 0 函数名 Write LCD Data 功能 向 lcd 发送数据 输入参数 dat 数据 输出参数 无 版本号 1 1 0 修改日期 2010 06 01 void Write LCD Data unsigned char dat 20 while Busy Check 忙等待 RS 1 RW 0 EN 0 P0 dat EN 1 Delayms 1 EN 0 函数名 Initialize LCD 功能 对 lcd 初始化 输入参数 无 输出参数 无 版本号 1 1 0 修改日期 2010 06 01 void Initialize LCD Write LCD Command 0 x38 8 位 2 行 5x7 点阵 Delayms 1 Write LCD Command 0 x01 清屏 Delayms 1 Write LCD Command 0 x06 字符进入模式 屏幕不动 字符后移 Delayms 1 Write LCD Command 0 x0c 显示开 关光标 Delayms 1 函数名 ShowString 功能 显示字符串 输入参数 x 列 y 行 str 字符串 输出参数 无 版本号 1 1 0 修改日期 2010 06 01 void ShowString unsigned char x unsigned char y unsigned char str 21 unsigned char i 0 设置显示起始位置 if y 0 Write LCD Command 0 x80 x if y 1 Write LCD Command 0 xc0 x 输出字符串 for i 0 i 16 i Write LCD Data str i 22 心得体会心得体会 单片机的学习已告一段落 我对自己的专业有了更深的体会 非常感谢钱老师的辛 勤教导 以企业的要求对我们进行培训 开拓我们的思维 改变我们的思维方式 让我们自主 发挥 让我们在以后工作中少走很多弯路 并在此过程中让我们自己找到了自身的种种缺点 让我们受益非浅 也许现阶段的学习还存在诸多不足 在以后的学习中 会勤于总结 认真学好自己的专业课程 23 附录 1 元器件表 序号代号名称型号 规格数量备注 1U1 单片机 AT89C511 2 K1 K2按钮 XDJT1102S2 3C1 C2 电容 0805 30pF2 贴片 4C3 电解电容 CSR13 22uF1 5X1 晶振 PTVC 75114 12MHz1 6Lcd 液晶显示器 LCD 016M002L1 7R1 电阻 RJ47 10k 0 5W1 8R2 电位器 WX2 27 15k 1W1 9RP1 排阻 A09 103J 2 2k 8 1w1 贴片 10S1 蜂鸣器 PT 1540P RoHS1 压电式 11Vcc 电源 5V1 24 附录 2 程序源代码 1602 c 文件文件 项目名称 万年历 制作 韩强 王先忠 王子房 杨振伟 版本号 1 1 2 修改日期 2010 06 04 include include include sbit K1 P3 2 sbit K2 P3 3 unsigned char count refresh char cnum 1 日期时间的 指针 unsigned char FLAG 0 调整标志 flag 1 则是调整状态 25 unsigned char happy 16 Happy birthday void main IE 0X87 开中断 TCON 0X04 it1 为边沿触发 it0 电平触 发 IP 0X0a 定时器 0 1 为高优先级 TMOD 0X01 设置定时器 0 方式 1 TH0 65536 50000 256 TL0 65536 50000 256 Initialize LCD 初始化 LCD TR0 1 while 1 buffer value 设置显示缓存区的内容 if FLAG 调整时对应调整位置闪烁 if refresh 5 26 refresh 0 Flash cnum DIS buffer 将显示缓冲区的内容输出到 lcd 上 void time0 interrupt 1 using 3 TH0 65536 50000 256 TL0 65536 50000 256 if count 20 计时一秒 count 0 DATATIME 日期时间生成 void int0 K1 interrupt 0 27 TR0 0 cnum FLAG 1 标志位置位 datetime 0 0 while K1 0 if cnum 12 调整结束 各个状态还原 TR0 1 cnum 1 FLAG 0 void int1 K2 interrupt 2 if FLAG 1 调整状态下则位对应调整位的增值 正常状态则 播放音乐 EDIT datetime cnum 28 else ShowString 0 x00 0 ShowString 0 x00 1 happy music Delayms 500 Clock H 文件文件 ifndef CLOCK define CLOCK unsigned int datetime 7 0 59 0 1 6 2010 2 秒 分 时 日 月 年 星期 unsigned char code week1 7 SMTWTFS 组成星期前三个字母 unsigned char code week2 7 uouehra unsigned char code week3 7 nneduit unsignedchar min 2 hour 2 day 2 mon 2 year 4 unsigned char buffer date 16 2010 06 01 2 29 unsigned char buffer time 16 00 00 00 函数名 Ynian 功能 判断年份是否为闰年 输入参数 year 一个有效的年份 输出参数 是闰年输出 1 否则输出 0 版本号 1 1 0 制作人 韩强 修改日期 2010 06 01 unsigned char Ynian unsigned char year if year 400 0 year 4 0 else return 0 函数名 MON 30 功能 判断某一月分的天数上限 输入参数 month 一个有效的月份 输出参数 返回该月份的上限值 版本号 1 1 0 制作人 韩强 修改日期 2010 06 01 unsigned char MON unsigned char month switch month case 1 case 3 case 5 case 7 case 8 case 10 case 12 return 31 case 4 31 case 6 case 9 case 11 return 30 default if Ynian datetime 5 二月特殊 return 29 else return 28 函数名 week 功能 实现星期的更新 输入参数 无 输出参数 星期值 0 星期日 1 星期一 6 星期六 版本号 1 1 0 修改日期 2010 06 01 unsigned char week 32 unsigned int y m c s y datetime 5 100 c datetime 5 100 if datetime 4 1 m 13 y if datetime 4 2 m 14 y s y y 4 c 4 2 c 26 m 1 10 datetime 3 1 蔡勒公式 s s 7 return s 函数名 DATATIME 功能 实现时间日期的更新 33 输入参数 无 输出参数 无 版本号 1 1 1 修改日期 2010 06 02 void DATATIME datetime 0 if datetime 0 59 秒 datetime 0 0 datetime 1 if datetime 1 59 分 datetime 1 0 datetime 2 if datetime 2 23 时 34 datetime 2 0 datetime 3 if datetime 3 MON datetime 4 日 datetime 3 1 datetime 4 if datetime 4 12 月 datetime 4 1 datetime 5 年 datetime 6 week 时刻为进入调整状态作 准备 min 0 datetime 1 10 min 1 datetime 1 10 hour 0 datetime 2 10 35 hour 1 datetime 2 10 day 0 datetime 3 10 day 1 datetime 3 10 mon 0 datetime 4 10 mon 1 datetime 4 10 year 0 datetime 5 10 year 1 datetime 5 100 10 year 2 datetime 5 1000 100 year 3 datetime 5 1000 函数名 Format Datetime 功能 日期时间转换为数字字符 输入参数 d 数据 a 指向存放转换结果的数组 输出参数 无 版本号 1 1 0 修改日期 2010 06 01 void Format Datetime unsigned int d unsigned char a 36 a 0 d 10 0 a 1 d 10 0 函数名 EDIT datetime 功能 实现对日期时间的调整 包括闹钟调整 输入参数 cnum 是表指示前调整的值 1 不调整 0 13 分别是分 年的各位 14 保存调整结果 输出参数 无 版本号 1 1 2 修改日期 2010 06 05 void EDIT datetime char cnum switch cnum case 0 min 0 if min 0 9 37 分低位调整限制 min 0 0 break case 1 min 1 if min 1 5 分高调整限制 min 1 0 break case 2 hour 0 if hour 0 9 时低位调整限制 hour 0 0 break case 3 hour 1 if hour 1 2 时高位调整限制 38 hour 1 0 break case 4 day 0 if day 0 9 日低位调整限制 day 0 0 break case 5 day 1 if day 1 3 日高位调整限制 day 1 0 break case 6 mon 0 if mon 0 9 月低位调整限制 mon 0 0 39 break case 7 mon 1 if mon 1 1 月高位调整限制 mon 1 0 break case 8 year 0 年调整 if year 0 9 year 0 0 break case 9 year 1 if year 1 9 year 1 0 break case 10 year 2 40 if year 2 9 year 2 0 break case 11 year 3 if year 3 9 year 3 0 break datetime 1 min 0 min 1 10 调整后将 datetime 实时更新 datetime 2 hour 0 hour 1 10 datetime 3 day 0 day 1 10 datetime 4 mon 0 mon 1 10 datetime 5 year 0 year 1 10 year 2 100 year 3 1000 函数名 buffer vlaue 功能 对缓冲区的内选择 41 输入参数 无 输出参数 无 版本号 1 1 1 制作人 韩强 修改日期 2010 06 02 void buffer value Format Datetime datetime 0 buffer time 6 将年月日 时分秒星期 Format Datetime datetime 1 buffer time 3 放到对应 缓冲区的位置上 Format Datetime datetime 2 buffer time 0 以待显示 Format Datetime datetime 3 buffer date 8 Format Datetime datetime 4 buffer date 5 Format Datetime datetime 5 100 buffer date 2 Format Datetime datetime 5 100 buffer date 0 buffer date 13 week1 week buffer date 14 week2 week 42 buffer date 15 week3 week 函数名 buffer clr 功能 针对缓冲区位置进行清空 输入参数 无 输出参数 无 版本号 1 1 0 修改日期 2010 06 01 void buffer clr unsigned char datetime unsigned char i if datetime 0 buffer time i 对应位清空 if datetime 1 buffer date i 函数名 Flash 43 功能 针对调节的位置进行闪烁显示 输入参数 无 输出参数 无 版本号 1 1 1 修改日期 2010 06 02 void Flash char n switch n case 0 buffer clr 0 4 对应分低位置 清 空 break case 1 buffer clr 0 3 break case 2 buffer clr 0 1 44 break case 3 buffer clr 0 0 break case 4 buffer clr 1 9 break case 5 buffer clr 1 8 break case 6 buffer clr 1 6 break case 7 buffer clr 1 5 break case 8 buffer clr 1 3 break 45 case 9 buffer clr 1 2 break case 10 buffer clr 1 1 break case 11 buffer clr 1 0 break case 12 Write LCD Command 0 xc0 12 第 2 行 12 列后 显示 over Write LCD Data o Write LCD Data v Write LCD Data e Write LCD Data r break 46 函数名 DIS buffer 功能 实现对缓冲区的内容显示 输入参数 无 输出参数 无 版本号 1 1 0 修改日期 2010 06 01 void DIS buffer ShowString 0 x00 0 buffer date 输出缓冲 区的内容 ShowString 0 x00 1 buffer time endif Music h 文件文件 ifndef MUSIC 47 define MUSIC 子程序名 MUSIC 功能 播放音乐 版本 1 1 0 修改日期 2010 06 01 include include sbit BEEP P1 7 unsigned char code SONG TONE 212 212 190 212 159 169 212 212 190 212 142 159 212 212 1 06

温馨提示

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

评论

0/150

提交评论