基于at89s52的万年历设计内容摘要:
片机和 DS1302 的多功能万年历设计 19 19 5 硬件设计与实现 单片机主控制模块的设计: AT89S52 单片机为 40 引脚双列直插芯片 ,有四个 I/O 口 P0,P1,P2,P3, MCS51 单片机共有 4个 8 位的 I/O 口( P0、 P P P3),每一条 I/O 线都能独立地作输出或输入。 单片机的最小系统如下图所示 ,18 引脚和 19 引脚接时钟电路 ,XTAL1 接外部晶振和微调电容的一端 ,在片内它是振荡器倒相放大器的输入 ,XTAL2 接外部晶振和微调电容的另一端 ,在片内它是振荡器倒相放大器的输出 .第 9 引脚为复位输入端 ,接上电容 ,电阻及开关后够上电复位电路 ,20 引脚为接地端 ,40 引脚为电源端。 单片机主控制模块的设计(图): MCU 8952 DS18B20 温度采样 LCD16824 显示 DATA DATA DS1302 时钟芯片 Control DATA Control 键盘 DS1302 时钟芯片 Control 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 20 20 时钟电路模块(图): 温度采集模块设计(图): 如下图所示。 采用数字式温度传感器 DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使 用P 与 DS18B20 的 I/O 口连接加一个上拉电阻 ,Vcc 接电源 ,Vss 接地。 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 21 21 DS18B20 温度采集 12864显示模块设计(图): 12864与单片机的硬件连接图 电路总线路(图): 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 22 22 6 系统软件设计与实现 主要算法流程图描述 软件流程图 :以 80C52 为核心 ,处理外转电路传进来的信号 ,实现时钟数据的读取 ,保存 ,显示其及键盘操作。 流程图如下所示 : 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 23 23 系 统 初 始 化数 据 采 集L C D 显 示按 键 检 测功 能 设 置设 置 完 毕结 束开 始否是 主程序流程图 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 24 24 初始 变量初始化化 控制器发送 ROM 指令 复位端产生一个高电平 写 1302 地址 延时 向地址写数据据 地 址增加 复位端产生一个高电平 数据是否写完 ? 写 1302 地址 延时 将该地址的数据读出 地址增加 数据是否读完 ? Y Y N N 显示数据 计算阳历和时分秒流程图 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 25 25 计算阴历程序流程图 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 26 26 时间调整程序流程图 开 始 Set 键有效进入年调整 等待按键程序 Up 键 Down Out 年加 1 年减 1 退出 Set 键有效 ,月调整 等待按键程序 Out 键 Down Up 退出 月减 1 月加 1 Set 键有效 ,日调整 等待按键程序 Up 键 Down Out 年加 1 年减 1 退出 Set 键有效 ,时调整 等待按键程序 Out 键 Down Up 时减 1 时加 1 退出 Set 键有效 ,分调整 等待按键程序 Down 键 Up 键 Out 键 分加 1 分减 1 退出 Set 键有效 ,设置闹铃 判 断 退出 设置时 设置分 等待按键程序 Set 键有效 ,退出 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 27 27 计算星期算法 文字描述 : 星期 =(日期年份 +所过闰年数 +月校正数 )%7 如果是在闰年又不到 3月份上述之和要减一天再除 7 其 1到 12月的校正数据为 [6 2 2 5 0 3 5 1 4 6 2 4] 该程序中采用 1 个字节表示年份闰年数也只计算 1900 年以后的闰年数 S=A+B+C+D D=月校正数 A=公历日期 B= 公历年份+100 C=所过闰年数 闰年是否到 3 月份 W=(S1)%7 (S1 W=S%7 (S1 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 28 28 LCM16824 子程序的实现 读写时序图 主要函数模块 : 函数 :void lcd_init(void) 显示初始化程序 . 函数 :Void GUI_init() 该函数用于初始化显示界面 ,把一些固定不需要刷新的文字固定下来 . 函数 :void lw(uchar x, uchar y, uchar dd) 用来写数据的子程序 . 函数 : void display(uchar xx, uchar yy, uchar n, uchar fb,uchar hz[]) 用于显示汉字 ,每个汉字为 16*16的点阵 函数 : void shownum(uchar xx,uchar yy,uchar n,uchar fb,uchar num[]) 用于显示数字 ,每个数字为 8*16的点阵 . 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 29 29 DS1302 子程序的实现 DS1302读写时序图 定义结构体数组 SYSTEMTIME 的时间类型 .结构体数组如下 : typedef struct __SYSTEMTIME__ { unsigned char Second。 unsigned char Minute。 unsigned char Hour。 unsigned char Week。 unsigned char Day。 unsigned char Month。 unsigned char Year。 }SYSTEMTIME 主要函数模块 : 函数 : void Initial_DS1302(void) 描述 :时钟芯片初始化 函数 : void Write1302(unsigned char ucAddr, unsigned char ucDa) 描述 :把某个数据写进某个地址 函数 : unsigned char Read1302(unsigned char ucAddr) 描述 :从芯片内某地址读取数据 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 30 30 函数 : void DS1302_GetTime(SYSTEMTIME *Time) 描述 : 获取时钟芯片的时钟数据到自定义的结构型数组 函数 : void DS1302InputByte(unsigned char d) 描述 : 往时钟写入一字节 函数 : unsigned char DS1302OutputByte(void) 描述 :从时间内读取一个字节 DS18B20 子程序的实现 简要流程图 主要函数描述 : 函数 : void Init_DS18B20(void) 描述 :单总线传输初始化函数 . 函数 : void WriteOneChar(uchar dat) 复位 存在脉冲 控制器发送 ROM 指令 控制器发送存储器操作指令 执行或数据读写 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 31 31 描述 :往芯片内部地址写入一个字节 ,有写数据和写指令之分。 函数 : void ReadTemp(void) 描述 :读取芯片的温度 . 函数 : void delay_18B20(unsigned int i) 描述 :延时函数 键盘子程序的实现 主要函数模块 : 函 数 名 : void key_count() 功能描述 :设置状态转换函数 ,根据变量 count 的不同值 ,对应不同的设置状态按下设置键,自动切换设置位 函 数 名 : void key_out() 功能描述 :跳出设置模式 .. 函 数 名 : uchar key_up(int temp,int max,int min) 功能描述 : 按键加函数,在最大值与最小值之间变化 函 数 名 : uchar key_down(int temp,int max,int min) 功能描述 : 按键减函数,在最大值与最小值之间变化 函 数 名 :void set_year()。 void set_month()。 void set_day()。 void 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 32 32 set_hour()。 void set_minute()。 功能描述 : 分别是用来设置 年 月 日 时 分 秒 函 数 名 : void key_al01() 功能描述 :设置定时报警功能 . 主程序的实现 主要函数模块 : 函 数 名 : Init_GUI() 功能描述 :进行界面初始化 .例如固定的年、星期、农历。 函 数 名 : void Show_NL() 功能描述 :根据算法 ,得出阴历 , 包括天干地支月日。 函 数 名 : void Show_YL() 功能描述 :根据算法 ,从时钟芯片读出阳历数据 ,显示出来。 函 数 名 : LCD_ShowWNL() 功能描述 :根据算法 ,显示电子万年历 ,其中时钟的”秒”位为每次循环刷新一次 ,”分”为在普通模式时每分钟刷新一次 ,在设置模式时每次循环刷新一次 ,”时” 为在普通模式时每小时刷新一次 ,在设置模式时每次循环刷新一次,公历农历的年、月、日、星期、温度 ,设置模式每次循环刷新一次。 函数名 :void LCD_showalarm() 功能描述 :显示定时报警的时间。 函 数 名 : void mian() 功能描述 :显示万年历,循环读取时间,并通过程序进行键盘检测。 基于 AT89S52 单片机和 DS1302 的多功能万年历设计 33 33 7 系统调试 系统调试包括软件调试和硬件调试。 硬件调试的任务是排除所焊接电路故障。 软件调试是利用开发工具进行在线仿真调试。 调试的一般过程如下所示: 系统调试的一般过程是上电运行后观察其运行状态,数码管 是否点亮等。 软件调试先是各个模块、各个子程序分别调试,最后进行系统联机调试。 软件调试 编程工具 — C51 语言 8051 单片机的应用程序设计,使用 C51 语言进行程序。基于at89s52的万年历设计
相关推荐
DS18B20 完成温度转换后,就把测得的温度值与 RAM 中的 TH、 TL字节内容作比较。 若T> TH 或 T< TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。 因此,可用多只 DS18B20 同时测量温度并进行报警搜索。 在 64 位 ROM 的最高有效字节中存储有循环冗余检验码( CRC)。 主机 ROM 的前 56 位来计算 CRC 值,并和存入
代价也会增加; 另一方面,随着时间的推移,对 IPv4 网络的投资和维护将持续增加,网络过渡代价将随之增 大。 s和 c成反比 : 参数 s 由各种过渡技术及过渡技术组合方案在实际部署中的效率所决定 , 效率越高, c 越小;反之越大; 随机量 r对 c的影响 : 随机量 r指某种可以刺激 IPv6 部署的应用, r的值越大, c 的值约小。 我认为,目前网络过渡的一个关键问题是寻找这个随机量
) 外围电路内装化 这也是单片机发展的主要方向。 随着集成度的不断提高,有可能把众多的各种处围功能器件集成在片内。 除了一般必须具有的 CPU、 ROM、 RAM、定时器 /计数器等以外,片内集成的部件还有模 /数转换器 、 DMA 控制 器、声音发生器、监视定时器、液晶显示驱动器、彩色电视机和录像机用的锁相电路等。 (8)串行扩展技术 在很长一段时间里
和 6 位的指令码 .本实验遥控器的起始位为 ”11”。 控制位为 ”0” 或 ”1”, 是随着按键交替出现的。 系统码为 ”00000”。 不同按键的指令码有所不同 . 图 323 SAA3010遥控器实物图 本 节 介绍了硬件的连接方法以及原理,并且包含了部分电路图,此电路已经试验证明可以 运行正常,可用。 其中应用了 红外遥控器 键盘来设定及更改时 间 , 节省了单片机的 I/O口 17
建设单位(章)建设单位项目负责人: 日 期: 竣工报告建设单位:XX县水利局监理单位:XX建设服务有限公司施工单位:XX建筑工程公司单位工程:土建工程开工日期2000年11月30日完工日期2011年 月 日工程内容:清水池(反应池、沉淀池),职工宿舍、设备房。 工程完成情况:完成100%施工单位:(章) 申报日期:监理单位代表(章)日 期: 建设单位代表(章)日 期: