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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Microsoft Word 文档.docx

1、Microsoft Word 文档#include #define uchar unsigned char#define uint unsigned intsbit CLK_166=P31;sbit SHLD_166=P34;unsigned char dat;unsigned char K1,H2,K3;sbit SDA=P10; /DS1302数据线sbit CLK=P11; /DS1302时钟线sbit RST=P12; /DS1302复位线/sbit K1=P35; / 小时调整/sbit K2=P36; / 分钟调整/sbit K3=P37; / 确定sbit LED_DS=P23;

2、 /数据输入SI sbit LED_ST=P21; /显示控制RCKsbit LED_SH=P22; /数据控制SCK/ 数码管字形码uchar code DSY_shuma=0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF; /共阳/显示缓冲:23-57-18 ;2011年04月16日uchar DSY_BUFFER=0,0,0xBF,0,0;/显示缓冲00-00-00(12-04-10)uchar Current_Time7;/通过DS1302读取的日期和时间就放在这个数

3、组中。bit Adjust_Flag;/*-子程序声明-*/void delay(uint K); /延时子程序void Display(); / 显示子程序, 主要显示小时、分钟和void Initialization(); /初始化子程序void Write_Byte_TO_DS1302(uchar x) ; / 向DS1302写入一个字节uchar Read_Byte_FROM_DS1302(); / 从DS1302读取一个字节void Write_Data_TO_DS1302(uchar addr,uchar dat); /向DS1302中的寄存器中写入数据uchar Read_Dat

4、a_FROM_DS1302(uchar addr); /从DS1302的某个寄存器中读取数据void GET_Time(); /读取当前时间,年月日,小时、分钟、秒钟void SET_Time(); /当调整时间时需要设置时间/-/主程序/- void main() Initialization(); while(1) if(Adjust_Flag=0) GET_Time(); Display(); / while(1) SHLD_166=0; CLK_166=0; CLK_166=1; delay(1000); SHLD_166=1; SCON=0X10; while(RI=0); dat=

5、SBUF; switch(dat)case 0Xfe: K1=0; break; case 0Xfd: H2=0; break; case 0Xfb: K3=0; break; case 0Xf7: P0=0x1f; break; case 0Xef: P0=0X2f; break; case 0Xdf: P0=0xff; break; /- /键盘中断服务程序(INT0) /-void EX_INT0()interrupt 0 if(K1=0) / 小时调整 Adjust_Flag=1; /正在调整 Current_Time2=(Current_Time2+1)%24; else if(H2

6、=0) / 分钟调整 Adjust_Flag=1; /正在调整 Current_Time1=(Current_Time1+1)%60; else if(K3=0) SET_Time(); /将调整后的时间写入DS1302 Adjust_Flag=0; /结束调整,时间继续正常显示 /*-延时子程序-*/void delay(uint K) uchar i,p=120; for(i=K;i0;i-) for(;p0;p-); /*-写字节函数,向DS1302写入一个字节-*/ void Write_Byte_TO_DS1302(uchar X) / 向DS1302写入一个字节 uchar i;

7、for(i=0;i=1; /*-读字节函数,从DS1302读取一个字节-*/uchar Read_Byte_FROM_DS1302() uchar i,byte,t; for(i=0;i=1; t=SDA; byte|=t7; CLK=1; CLK=0; /BCD码转换 return byte/16*10+byte%16; /- /从DS1302指定位置读取数据 , 读数据 /- uchar Read_Data_FROM_DS1302(uchar addr) uchar dat; RST=0; CLK=0; RST=1; Write_Byte_TO_DS1302(addr); /向DS1302

8、写入一个地址 dat=Read_Byte_FROM_DS1302(); /在上面写入的地址中读取数据 CLK=1; RST=0; return dat; /- /向DS1302指定位置写入数据, 写数据 /- void Write_Data_TO_DS1302(uchar addr,uchar dat) CLK=0; RST=1; Write_Byte_TO_DS1302(addr); Write_Byte_TO_DS1302(dat); CLK=1; RST=0; /- /读取当前时间,年月日,小时、分钟、秒钟 /- void GET_Time() Current_Time0 =Read_D

9、ata_FROM_DS1302(0x81); /读取当前时间秒 Current_Time1 =Read_Data_FROM_DS1302(0x83); /读取当前时间分钟 Current_Time2 =Read_Data_FROM_DS1302(0x85); /读取当前时间时钟 Current_Time3 =Read_Data_FROM_DS1302(0x87); /读取当前时间日 Current_Time4 =Read_Data_FROM_DS1302(0x89); /读取当前时间月 Current_Time5 =Read_Data_FROM_DS1302(0x8B); /读取当前时间秒星期

10、 Current_Time6 =Read_Data_FROM_DS1302(0x8D); /读取当前时间秒年 /- /设置时间函数,当需要调整时间时,需要把调整好的时间写入时间缓冲数组中 /- void SET_Time() Write_Data_TO_DS1302(0x8e,0x00) ; /写控制字,取消写保护 Write_Data_TO_DS1302(0x82,(Current_Time1/104)|( Current_Time1%10); /写入分钟 Write_Data_TO_DS1302(0x84,(Current_Time2/104)|( Current_Time2%10); /

11、写入时钟 Write_Data_TO_DS1302(0x8e,0x80); /加保护 /-/初始化子程序/-void Initialization() Adjust_Flag=0; IE=0x81; IT0=0x01; /- / 显示 /- void Display() char j,j1,j2,j3,mask; mask=0x01; delay(1000); for(j=0;j8;j+) LED_SH=0;/数据控制 LED_DS=(DSY_shumaCurrent_Time1%10&mask); /数据输入 LED_SH=1;/数据控制 mask=mask1; mask=0x01; /de

12、lay(10); for(j1=0;j18;j1+) LED_SH=0;/数据控制 LED_DS=(DSY_shumaCurrent_Time1/10&mask); /数据输入 & 同一则一,有零则零 LED_SH=1;/数据控制 mask=mask1; mask=0x01; /delay(10); for(j2=0;j28;j2+) LED_SH=0;/数据控制 LED_DS=(DSY_shumaCurrent_Time2%10&mask); /数据输入 & 同一则一,有零则零 LED_SH=1;/数据控制 mask=mask1; mask=0x01; /delay(10); for(j3=

13、0;j38;j3+) LED_SH=0;/数据控制 LED_DS=(DSY_shumaCurrent_Time2/10&mask); /数据输入 & 同一则一,有零则零 LED_SH=1;/数据控制 mask=mask1; LED_ST=0;/显示控制 LED_ST=1;/显示控制/-#include #define uchar unsigned char#define uint unsigned intsbit CLK_166=P31;sbit SHLD_166=P32;unsigned char dat;unsigned char K1,K2,K3,K4=0,K5,K6;sbit SDA=

14、P10; /DS1302数据线sbit CLK=P11; /DS1302时钟线sbit RST=P12; /DS1302复位线/sbit K1=P35; / 小时调整/sbit K2=P36; / 分钟调整/sbit K3=P37; / 确定sbit LED_clk=P20;sbit LED_st=P21;sbit LED=P22; /数据控制SCK/ 数码管字形码uchar code DSY_shuma=0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF; /共阳/显示缓冲:

15、23-57-18 ;2011年04月16日uchar DSY_BUFFER=0,0,0xBF,0,0;/显示缓冲00-00-00(12-04-10)uchar Current_Time7;/通过DS1302读取的日期和时间就放在这个数组中。bit Adjust_Flag;/*-子程序声明-*/void delay(uint K); /延时子程序void Display(); / 显示子程序, 主要显示小时、分钟和void Initialization(); /初始化子程序void Write_Byte_TO_DS1302(uchar x) ; / 向DS1302写入一个字节uchar Read

16、_Byte_FROM_DS1302(); / 从DS1302读取一个字节void Write_Data_TO_DS1302(uchar addr,uchar dat); /向DS1302中的寄存器中写入数据uchar Read_Data_FROM_DS1302(uchar addr); /从DS1302的某个寄存器中读取数据void GET_Time(); /读取当前时间,年月日,小时、分钟、秒钟void SET_Time(); /当调整时间时需要设置时间/-/主程序/- void main() Initialization(); while(1) if(Adjust_Flag=0) GET_

17、Time(); Display(); / while(1) SHLD_166=0; CLK_166=0; CLK_166=1; delay(1000); SHLD_166=1; SCON=0X10; while(RI=0); dat=SBUF; switch(dat)case 0Xfe:P0=0x03; K1=0; break; case 0Xfd: K2=0; break; case 0Xfb: K3=0; break; case 0Xf7: K4+; break; case 0Xef: K5+; break; case 0Xdf: K6+; break; /- /键盘中断服务程序(INT0

18、) /-void EX_INT0()interrupt 0 if(K1=0) / 小时调整 Adjust_Flag=1; /正在调整 Current_Time2=(Current_Time2+1)%24; else if(K2=0) / 分钟调整 Adjust_Flag=1; /正在调整 Current_Time1=(Current_Time1+1)%60; else if(K3=0) SET_Time(); /将调整后的时间写入DS1302 Adjust_Flag=0; /结束调整,时间继续正常显示 /* if(K4%2=1) / 小时调整 / Adjust_Flag=1; /正在调整 if

19、(K5=1) Current_Time2=(Current_Time2+1)%24; if(K6=1) Current_Time2=(Current_Time2-1)%24; Else /if(K4=2) 分钟调整 Adjust_Flag=1; /正在调整 if(K5=1) Current_Time1=(Current_Time1+1)%60; if(K6=1) Current_Time1=(Current_Time1-1)%60; /*else if(K4=0) SET_Time(); /将调整后的时间写入DS1302 Adjust_Flag=0; /结束调整,时间继续正常显示 */*-延时

20、子程序-*/void delay(uint K) uchar i,p=120; for(i=K;i0;i-) for(;p0;p-); /*-写字节函数,向DS1302写入一个字节-*/ void Write_Byte_TO_DS1302(uchar X) / 向DS1302写入一个字节 uchar i; for(i=0;i=1; /*-读字节函数,从DS1302读取一个字节-*/uchar Read_Byte_FROM_DS1302() uchar i,byte,t; for(i=0;i=1; t=SDA; byte|=t7; CLK=1; CLK=0; /BCD码转换 return byt

21、e/16*10+byte%16; /- /从DS1302指定位置读取数据 , 读数据 /- uchar Read_Data_FROM_DS1302(uchar addr) uchar dat; RST=0; CLK=0; RST=1; Write_Byte_TO_DS1302(addr); /向DS1302写入一个地址 dat=Read_Byte_FROM_DS1302(); /在上面写入的地址中读取数据 CLK=1; RST=0; return dat; /- /向DS1302指定位置写入数据, 写数据 /- void Write_Data_TO_DS1302(uchar addr,ucha

22、r dat) CLK=0; RST=1; Write_Byte_TO_DS1302(addr); Write_Byte_TO_DS1302(dat); CLK=1; RST=0; /- /读取当前时间,年月日,小时、分钟、秒钟 /- void GET_Time() Current_Time0 =Read_Data_FROM_DS1302(0x81); /读取当前时间秒 Current_Time1 =Read_Data_FROM_DS1302(0x83); /读取当前时间分钟 Current_Time2 =Read_Data_FROM_DS1302(0x85); /读取当前时间时钟 Current_Time3 =Read_Data_FROM_DS1302(0x87); /读取当前时间日 Current_Time4 =Read_Data_FROM_DS1302(0x89); /读取当前时间月 Current_Time5 =Read_Data_FROM_DS1302(0x8B); /读取当前时间秒星期 Current_Time6 =Read_Data_FROM_DS1302(0x8D); /读取当前时间秒年 /

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

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