ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:474.91KB ,
资源ID:7148054      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7148054.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DS1302+LCD1602时钟.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DS1302+LCD1602时钟.docx

1、DS1302+LCD1602时钟DS1302LCD1602时钟1. 实验目的效果:做一个不怕掉电的LCD显示时钟。学习DS1302时钟芯片的读写,加强字符型液晶LCD1602的应用。在LCD屏上显示格式:2007-04-02Week1Time:20:25:23 1)按一下SW1进入时间调整,关标会闪烁2)按一下SW2光标会在年份上闪烁,表明可以对年份进行调整,接着按SW3年份将加一,按SW4年份将减一;2)再按一下SW2,光标闪烁移到月份上,同样按SW3月份加一,按SW4月份减一;3)再按一下SW2,光标有下移到星期上,同样按SW3星期加一,按SW4星期减一;4)同样的道理可以调整时,分,秒。

2、5)调整完毕按一下SW1,光标闪烁退出,时间调整结束。 DS1302: 1)读写时序: 2)DS1302相关寄存器:(详细DS1302资料请查看ds1302.pdf文档)2原理图:DS1302连接原理图LCD1602连接原理图3实验板上操作:1)用三个短路冒将SCLKP3.5, I/OP3.6, CEP3.7短接起来。2)将板上的相应拨码开关拨到拨到ON上。(建议把原来做过数码管显示的那个拨码开关全部拨到OFF那边) 3)把LCD1602液晶插到实验板上的LCD1602液晶插槽上。 (提示:程序烧进单片机后,液晶上没有显示,请调节板子上左上角那个电位器) 4)按一下SW1进入时间调整,关标会闪

3、烁按一下SW2光标会在年份上闪烁,表明可以对年份进行调整,接着按SW3年份将加一,按SW4年份将减一;再按一下SW2,光标闪烁移到月份上,同样按SW3月份加一,按SW4月份减一;再按一下SW2,光标有下移到星期上,同样按SW3星期加一,按SW4星期减一;同样的道理可以调整时,分,秒。调整完毕按一下SW1,光标闪烁退出,时间调整结束。4实物连接图如下:5. C语言程序:#include AT89X51.h#include intrins.h #define HIGH 1#define LOW 0#define TRUE 1#define ZERO 0 #define MSB 0x80#defin

4、e LSB 0x01/ ds1302 PreDefinition#define DS1302_WP 0x8E#define DS1302_RESET RST=LOW;SCL=LOW;RST=HIGH#define DS1302_WP_ENABLE Write_Ds1302(DS1302_WP,0X00)#define DS1302_WP_DISENABLE Write_Ds1302(DS1302_WP,0x00)#define LCDPORT P0sbit SCL = P35;/ DS1302 Serial-Clock Input pin 5sbit SDA = P36;/ DS1302 Se

5、rial-Data Input pin 6sbit RST = P37;/ DS1302 Chip-Seclet Input pin 7sbit RS=P10;sbit RW=P11;sbit EN=P12;code unsigned char set_rtc_code7=0x07,0x03,0x29,0x02,0x21,0x07,0x40;code unsigned char write_rtc_address7=0x8c,0x88,0x86,0x8a,0x84,0x82,0x80; code unsigned char read_rtc_address7=0x8d,0x89,0x87,0x

6、8b,0x85,0x83,0x81;unsigned char read_rtc_code7; /DS1302读出信息(年份,星期,时间)暂存数组,/*1ms延时子程序*/delay_nms(unsigned int n) unsigned int i; unsigned char j; for(i=0;in;i+) for(j=0;j0;i-) lcd_delay(248); write_lcd_command(0x38); for(i=4;i0;i-) lcd_delay(248); write_lcd_command(0x38); for(i=4;i0;i-) lcd_delay(248

7、); write_lcd_command(0x0f); for(i=4;i0;i-) lcd_delay(248); write_lcd_command(0x06); for(i=4;i0;i-) lcd_delay(248);write_lcd_command(0x01); for(i=4;i0;i-) lcd_delay(248);/*lcd1602驱动程序到此完*/*ds1302读写程序*/void Write_Ds1302_Byte(unsigned char temp) /写一个字节 unsigned char i; for (i=0;i=1; SCL=HIGH; /*/void W

8、rite_Ds1302( unsigned char address,unsigned char dat ) /写ds1302 DS1302_RESET; Write_Ds1302_Byte(address); Write_Ds1302_Byte(dat); RST=LOW; /*/unsigned char Read_Ds1302 ( unsigned char address ) /读ds1302 unsigned char i,temp=0x00,temp_temp; DS1302_RESET; Write_Ds1302_Byte(address); for (i=0;i=1; SCL=

9、HIGH; RST=LOW; temp_temp=temp/16; temp=temp%16; temp=temp+temp_temp*10; return (temp);/*/void Read_RTC(void) /读出DS1302里的相关信息,存放在read_rtd_code数组中 unsigned char i,*p; p=read_rtc_address; for(i=0;i7;i+) read_rtc_codei=Read_Ds1302(*p); p+; /*/void Set_RTC(void) /初始化设置DS1302 unsigned char i,*p; p=write_r

10、tc_address; for(i=0;i7;i+) Write_Ds1302(*p,set_rtc_codei); p+; /*/void initial_ds1302(void) /初始化ds1302 DS1302_WP_ENABLE; Set_RTC(); /*ds1302读写程序到此完*/系统初始化void system_initial(void) initial_ds1302(); initial_lcd1602();/*/void main(void) unsigned char count,staus; system_initial(); /输出显示 lcd_displaystr

11、(0,0x00,20); delay_nms(10); lcd_displaystr(0,0x04,-); delay_nms(10); lcd_displaystr(0,0x07,-); lcd_displaystr(0,0x0b,Week:); lcd_displaystr(1,0x00,Time:); lcd_displaystr(1,0x07,:); lcd_displaystr(1,0x0a,:); while(1) /按键扫描,实现对时间的调整,对应实验板的独立按钮 /开始时间设置,staus1 if(P2_0=0) delay_nms(10); if(P2_0=0) staus=

12、1; count=0; while(P2_0=0); if(P2_1=0) delay_nms(10); if(P2_1=0) count+; /光标移位 if(count=8) count=1; while(P2_1=0); if(P2_2=0) /加按钮 delay_nms(10); if(P2_2=0) switch(count) case 0x01: read_rtc_code0+; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_address0,(read_rtc_code0+(read_rtc_code0/10)*6); LCD_write_ch

13、ar(0,0x02,(read_rtc_code0/10); /年十位 LCD_write_char(0,0x03,(read_rtc_code0%10); /年个位 break; case 0x02: read_rtc_code1+; if(read_rtc_code1=13) read_rtc_code1=1; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_address1,(read_rtc_code1+(read_rtc_code1/10)*6); LCD_write_char(0,0x05,(read_rtc_code1/10); /月十位 LCD

14、_write_char(0,0x06,(read_rtc_code1%10); /月个位 break; case 0x03: read_rtc_code2+; if(read_rtc_code2=31) read_rtc_code2=1; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_address2,(read_rtc_code2+(read_rtc_code2/10)*6); LCD_write_char(0,0x08,(read_rtc_code2/10); /日十位 LCD_write_char(0,0x09,(read_rtc_code2%10);

15、 /日个位 break; case 0x04: read_rtc_code3+; if(read_rtc_code3=8) read_rtc_code3=1; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_address3,(read_rtc_code3+(read_rtc_code3/10)*6); LCD_write_char(0,0x0f,(read_rtc_code3%10); /星期 break; case 0x05: read_rtc_code4+; if(read_rtc_code4=25) read_rtc_code4=0; DS1302_W

16、P_ENABLE; Write_Ds1302(write_rtc_address4,(read_rtc_code4+(read_rtc_code4/10)*6); LCD_write_char(1,0x05,(read_rtc_code4/10); /时十位 LCD_write_char(1,0x06,(read_rtc_code4%10); /时个位 break; case 0x06: read_rtc_code5+; if(read_rtc_code5=60) read_rtc_code5=0; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_addres

17、s5,(read_rtc_code5+(read_rtc_code5/10)*6); LCD_write_char(1,0x08,(read_rtc_code5/10); /分十位 LCD_write_char(1,0x09,(read_rtc_code5%10); /分个位 break; case 0x07: read_rtc_code6+; if(read_rtc_code6=60) read_rtc_code6=0; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_address6,(read_rtc_code6+(read_rtc_code6/10)*

18、6); LCD_write_char(1,0x0b,(read_rtc_code6/10); /秒十位 LCD_write_char(1,0x0c,(read_rtc_code6%10); /秒个位 break; default:break; while(P2_2=0); if(P2_3=0) /减按钮 delay_nms(10); if(P2_3=0) switch(count) case 0x01: if(read_rtc_code0=0) lcd_displaystr(0,0x00,19); read_rtc_code0=99; else read_rtc_code0-; DS1302_

19、WP_ENABLE; Write_Ds1302(write_rtc_address0,(read_rtc_code0+(read_rtc_code0/10)*6); LCD_write_char(0,0x02,(read_rtc_code0/10); /年十位 LCD_write_char(0,0x03,(read_rtc_code0%10); /年个位 break; case 0x02: if(read_rtc_code1=1) read_rtc_code1=12; else read_rtc_code1-; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_

20、address1,(read_rtc_code1+(read_rtc_code1/10)*6); LCD_write_char(0,0x05,(read_rtc_code1/10); /月十位 LCD_write_char(0,0x06,(read_rtc_code1%10); /月个位 break; case 0x03: if(read_rtc_code2=1) read_rtc_code2=30; else read_rtc_code2-; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_address2,(read_rtc_code2+(read_rtc

21、_code2/10)*6); LCD_write_char(0,0x08,(read_rtc_code2/10); /日十位 LCD_write_char(0,0x09,(read_rtc_code2%10); /日个位 break; case 0x04: if(read_rtc_code3=1) read_rtc_code3=7; else read_rtc_code3-; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_address3,(read_rtc_code3+(read_rtc_code3/10)*6); LCD_write_char(0,0x0

22、f,(read_rtc_code3%10); /星期 break; case 0x05: if(read_rtc_code4=0) read_rtc_code4=24; else read_rtc_code4-; DS1302_WP_ENABLE; Write_Ds1302(write_rtc_address4,(read_rtc_code4+(read_rtc_code4/10)*6); LCD_write_char(1,0x05,(read_rtc_code4/10); /时十位 LCD_write_char(1,0x06,(read_rtc_code4%10); /时个位 break; case 0x06: if(read_rtc_code5=00) read_rtc_code5=59; else read_rtc_code5-; DS1302_WP_ENABLE; Write_Ds

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1