基于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 语言进行程序。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。