基于51系列单片机和时钟芯片ds1302的日历时钟设计与制作内容摘要:

如大写的英文字母 “ A” 的代码是 01000001B( 41H),显示时模块把地址 41H 中的点阵字符图形显示出来,我们就能看到字母 “ A”。 LCD1602 液晶模块内部的控制器共有 11 条控制指令。 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志 位是不是 为低电平 ,是低电平则 表示不忙,否则此指令失效。 要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。 按键电 路 如图, p3 按键开关为复位功能键, p4 按键开关为加一功能键, P5 按键开关为减一功能键, p6 按键开关为功能切换键。 P6 按键长按可分别切换年、月、日、时、分、秒、星期。 7 电路总原理图 总体工作原理 利用单片机 AT89S51 控制串行实时时钟芯片 DS1302 构成数字时钟电路,实现计时功能。 该电路使用简单的三线接口,为单片机节省大量的接口资源,时钟芯片 DS1302 带有后备电池,具备对后背电源进行涓细电流充电的能力,保证电路断电后仍保存时间和数据信息,这些优点解决了目前常用实时时钟占用 单片机资源多以及计时不可靠等缺点。 该时钟功能强大,性能优越,能为很多领域,特别是对时钟工作的精确性和可靠性有较高要求的场合,提供较好的实时时钟。 8 第 三 章 系统的软件设计 主程序 系统的主程序设计是用来控制整个系统运行时的时序工作状态,因此,完善的程序设计是本设计的重点内容。 下图是是本设计使用的主程序设计流程图。 软件 的 三个模块 : 一、 时钟程序模块 /*以下是 时钟 程序 */ uchar code digit[10]={0123456789}。 //定义字符数组显示数字 sbit RST=P1^3。 //位定义 1302 芯片的接口,复位端口定义 sbit DATA=P1^5。 //位定义 1302 芯片的接口,数据输出端定义 sbit SCLK=P1^4。 //位定义 1302 芯片的接口,时钟输出端口定义 char k=0,q=0,w=0,e=0,r=12,t=11,y=5,u=10。 /***函数功能:延时程序 ******/ void delaynus(uchar n) { unsigned char i。 for(i=0。 in。 i++)。 } /****函数功能:向 1302 写一个字节数据 ****/ void Write1302(uchar dat) { uchar i。 SCLK=0。 //拉低 SCLK,为脉冲上升沿写入数据做好准备 delaynus(2)。 //稍微等待,使硬件做好准备 for(i=0。 i8。 i++) //连续写 8 个二进制位数据 { DATA=datamp。 0x01。 //取出 dat 的第 0 位数据写入 1302 9 delaynus(2)。 //稍微等待,使硬件做好准备 SCLK=1。 //上升沿写入数据 delaynus(2)。 //稍微等待,使硬件做好准备 SCLK=0。 //重新拉低 SCLK,形成脉冲 dat=dat1。 //将 dat 的各数据位右移 1 位,准备写入下一个数据位 } } 二、按键程序模块 /*按键选择功能 */ sbit TAB=P3^2。 sbit ADD=P3^3。 sbit DEC=P3^4。 void ButtonSelect() { if(TAB==0) { k++。 if(k==8) k=0。 } if(ADD==0amp。 amp。 k==1) { q++。 Timeset1()。 } if(DEC==0amp。 amp。 k==1) { q。 Timeset1()。 } if(ADD==0amp。 amp。 k==2) { w++。 Timeset2()。 } if(DEC==0amp。 amp。 k==2) { w。 Timeset2()。 } if(ADD==0amp。 amp。 k==3) { e++。 Timeset3()。 } if(DEC==0amp。 amp。 k==3) { e。 Timeset3()。 } if(ADD==0amp。 amp。 k==4) { r++。 Timeset4()。 }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。