版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第十五章第十五章 实时时钟实时时钟DS13022vBCD码码(Binary-Coded Decimal) :即二:即二 十进制代码,是一种用二进制十进制代码,是一种用二进制编码十进制的代码。编码十进制的代码。BCD 码用四个位元来储存一个十进制的数码,使得二码用四个位元来储存一个十进制的数码,使得二进制和十进制之间的转换得以快捷进行。进制和十进制之间的转换得以快捷进行。v主要应用主要应用:时间、日期、年月(:时间、日期、年月(现实中用现实中用10进制表示进制表示)在单片机系统中的)在单片机系统中的存储、显示等。存储、显示等。3SPI :是一种高速的、全双工、同步通信:是一种高速的、全双工、同
2、步通信总线,是总线,是Motorola定义的,定义的,常用于单片常用于单片机和机和EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信、实时时钟、数字信号处理器等器件的通信。标准标准SPI使用使用4个个引脚:引脚: NSS: 片选,从设备片选使能信号片选,从设备片选使能信号 SCK: 时钟,由主机产生,和时钟,由主机产生,和SCL类似类似 MOSI:主机输出从机输入,:主机输出从机输入,Master Output/Slave Input,主机给从机发送指令或数据的通道,主机给从机发送指令或数据的通道 MISO:主机输入从机输出,:主机输入从机输出,Master Input/Slave
3、 Output,主机读取从机的状态或数据的通道,主机读取从机的状态或数据的通道4vCPOL:Clock Polarity,即时钟极性。空闲状态为,即时钟极性。空闲状态为高电平高电平,则,则CPOL=1; 空闲状态为空闲状态为低电平低电平,则,则CPOL=0。vCPHA:Clock Phase,即时钟相位。,即时钟相位。 CPHA=1表示数据的表示数据的输出输出在一个时钟周期的在一个时钟周期的第一个沿,第一个沿,采样采样在在第二个沿第二个沿; CPHA=0表示数据的表示数据的采样采样在一个时钟周期的在一个时钟周期的第一个沿,第一个沿,输出输出在在第二个沿第二个沿。数据未发送时以及发送完毕后, S
4、CK 都是高电平,因此 CPOL=1。在 SCK 第一个沿时MOSI 和 MISO发生变化, SCK 第二个沿的时候,数据是稳定的,此刻采样数据是合适的。561、实时时钟芯片、实时时钟芯片DS1302可以提供秒、分、小时、日期、月、年等信息,并可以提供秒、分、小时、日期、月、年等信息,并且还有软件自动调整的能力,可以通过配置且还有软件自动调整的能力,可以通过配置AM/PM来决定采用来决定采用24小时格式还小时格式还是是12小时格式。小时格式。2、拥有、拥有31字节的数据存储字节的数据存储RAM。7引脚编引脚编号号引脚名引脚名称称引脚功能引脚功能1 1Vcc2Vcc2主电源引脚主电源引脚2 2X
5、1X1这两个引脚需要接一个这两个引脚需要接一个32.768K32.768K的晶振,给的晶振,给DS1302DS1302提供一个基准提供一个基准3 3X2X24 4GNDGND接地接地5 5CECE使能输入引脚。读写使能输入引脚。读写DS1302DS1302的时候必须是高的时候必须是高电平电平6 6I/OI/O双向通信引脚双向通信引脚,读写数据都是通过这个引脚,读写数据都是通过这个引脚完成完成7 7SCLKSCLK输入引脚输入引脚,作为通信的时钟信号作为通信的时钟信号8 8Vcc1Vcc1备用电源引脚备用电源引脚8 第第 7 位(即最高位)固定为位(即最高位)固定为 1,这一位如果是,这一位如果
6、是 0 的话,那写进去也是无效的。的话,那写进去也是无效的。 第第 6 位是选择位是选择 RAM 还是还是 CLOCK ,第,第 6位是位是 0 选择选择 CLOCK 功能;第功能;第 6 位是位是 1表示要用表示要用 RAM; 从第从第 5 到第到第 1 位决定位决定寄存器的寄存器的 5 位地址位地址; 第第 0 位是读写位,这一位是位是读写位,这一位是 0 表示写;为表示写;为 1 表示要读。表示要读。当地址寄存器当地址寄存器的的5位地址为位地址为0时时,选择,选择CLOCK功能,则:功能,则: 读读地址为地址为81h(0b10000001),), 写写地址为地址为80h(0b100000
7、00)。)。9寄存器寄存器0:CH为时钟停止标志位,剩下为时钟停止标志位,剩下7位中高位中高3位是秒的十位,低位是秒的十位,低4位是秒的个位。位是秒的个位。寄存器寄存器2:bit7 是是1的话代表是的话代表是12小时制,小时制,0代表是代表是24小时制;小时制;bit6固定是固定是0,bit5 在在12小时制下小时制下0代表上午,代表上午,1代表下午,在代表下午,在24小时制下和小时制下和 bit4一起代表了小时的十位,一起代表了小时的十位,低低4位代表的是小时的个位。位代表的是小时的个位。 寄存器寄存器7:最高位为写保护位:最高位为写保护位WP,如是,如是1则禁止给其它寄存器或那则禁止给其它
8、寄存器或那31个字节的个字节的RAM写写数据。数据。10 CE和和SSEL的使能控制是反的;的使能控制是反的; 写数据时都是在写数据时都是在 SCK 的的上升沿从机进行采样上升沿从机进行采样,下降沿时主机发送数据下降沿时主机发送数据。 DS1302 时序中单片机要先写一个时序中单片机要先写一个字节指令字节指令,指明要写入寄存器的地址,指明要写入寄存器的地址及后续是写操作,再写入一个字节的数据。按及后续是写操作,再写入一个字节的数据。按低位在前低位在前的方式发送。的方式发送。DS1302通信是 SPI的变异种类DS1302 单字节写操作11 DS1302 时序图上的箭头都是针对时序图上的箭头都是
9、针对 DS1302的;的; 读操作时先写第一个字节指令,读操作时先写第一个字节指令,上升沿上升沿的时候的时候 DS1302 锁存数据,锁存数据,下降沿下降沿单片机单片机发送数据。发送数据。 第二个字节是第二个字节是 DS1302 下降沿下降沿输出数据,单片机输出数据,单片机上升沿上升沿进行读取,因此箭头从进行读取,因此箭头从 DS1302 角度来说,出现在下降沿。角度来说,出现在下降沿。 12将将2013年年10月月8号星期二号星期二12点点30分分00秒秒写到写到DS1302内部,并且随后以内部,并且随后以1秒的精度将时间显示到秒的精度将时间显示到1602液晶上。液晶上。voidvoid D
10、S1302ByteWriteDS1302ByteWrite( (unsignedunsigned charchar datdat) ) unsignedunsigned charchar mask; mask; forfor (mask=0 x01; mask!=0; mask=1) (mask=0 x01; mask!=0; mask=1) /低位在低位在前前 ifif (mask & (mask & datdat) != 0) ) != 0) /首先输出该位数首先输出该位数据据 DS1302_IO = 1; DS1302_IO = 1; elseelse DS1302_IO
11、 = 0; DS1302_IO = 0; DS1302_CK = 1; DS1302_CK = 1; /然后拉高时钟然后拉高时钟 DS1302_CK = 0; DS1302_CK = 0; /完成一个位的操作完成一个位的操作 DS1302_IO = 1; DS1302_IO = 1; /最后确保释放最后确保释放IOIO引引脚脚 voidvoid DS1302SingleWrite( DS1302SingleWrite(unsignedunsigned charchar regreg, , unsignedunsigned charchar datdat) ) / reg-/ reg-寄存器地址
12、寄存器地址 DS1302_CE = 1; DS1302_CE = 1; /使能片选信号使能片选信号 DS1302ByteWriteDS1302ByteWrite(regreg1)|0 x80); 1)|0 x80); /发送写寄存器指令发送写寄存器指令 DS1302ByteWriteDS1302ByteWrite( (datdat); ); /写入字节数据写入字节数据 DS1302_CE = 0; DS1302_CE = 0; /除能片选信号除能片选信号 sbit DS1302_CE = P17;sbit DS1302_CE = P17;sbit DS1302_CK = P35;sbit DS
13、1302_CK = P35;sbit DS1302_IO = P34;sbit DS1302_IO = P34;13unsignedunsigned charchar DS1302ByteReadDS1302ByteRead()() unsignedunsigned charchar mask; mask; unsignedunsigned charchar dat = 0; dat = 0; forfor (mask=0 x01; mask!=0; mask=1) (mask=0 x01; mask!=0; mask=1)/逐位读逐位读取取 ifif (DS1302_IO != 0)(DS1
14、302_IO != 0) dat |= mask; dat |= mask; DS1302_CK = 1; DS1302_CK = 1; /拉高时钟拉高时钟 DS1302_CK = 0; DS1302_CK = 0; returnreturn dat; dat; /最后返回读到的字节数据最后返回读到的字节数据 unsignedunsigned charchar DS1302SingleRead( DS1302SingleRead(unsignedunsigned charchar regreg) ) unsignedunsigned charchar dat; dat; DS1302_CE =
15、 1; DS1302_CE = 1; /使能片选信号使能片选信号 DS1302ByteWrite( DS1302ByteWrite(regreg1)|0 x81); 1)|0 x81); /发送读寄存器指令发送读寄存器指令 dat = dat = DS1302ByteReadDS1302ByteRead(); (); /读取字节数据读取字节数据 DS1302_CE = 0; DS1302_CE = 0; /除能片选信号除能片选信号 returnreturn dat; dat; 14voidvoid InitDS1302() InitDS1302() unsignedunsigned charc
16、har i; i; unsignedunsigned charchar code InitTime = code InitTime = /BCDBCD码表示的码表示的20132013年年1010月月8 8日星期二日星期二12:30:0012:30:00 0 x00,0 x30,0 x12, 0 x08, 0 x10, 0 x02, 0 x13 0 x00,0 x30,0 x12, 0 x08, 0 x10, 0 x02, 0 x13 ; DS1302_CE = 0; DS1302_CE = 0; /初始化初始化DS1302DS1302通信引脚通信引脚 DS1302_CK = 0; DS1302
17、_CK = 0; i = DS1302SingleRead(0); i = DS1302SingleRead(0); /读取秒寄存器读取秒寄存器 ifif (i & 0 x80) != 0) (i & 0 x80) != 0) /由秒寄存器最高位由秒寄存器最高位CHCH的值判断的值判断DS1302DS1302是否已停是否已停止止 DS1302SingleWrite(7, 0 x00); DS1302SingleWrite(7, 0 x00); /撤销写保护以允许写入数据撤销写保护以允许写入数据 forfor (i=0; i7; i+) (i=0; i= 200) (tmr200
18、ms = 200) /定时定时200ms200ms tmr200ms = 0; tmr200ms = 0; flag200msflag200ms = 1; = 1; 15voidvoid main() main() unsignedunsigned charchar i; i; unsignedunsigned charchar psec=0 xAA; psec=0 xAA; /秒备份,初值秒备份,初值AAAA确保确保首次读取时间后会刷新显示首次读取时间后会刷新显示 unsignedunsigned charchar time8; time8; /当前时间数组当前时间数组 unsignedun
19、signed charchar str12; str12; /字符串转换缓冲区字符串转换缓冲区 EA = 1; EA = 1; /开总中断开总中断 ConfigTimer0(1); ConfigTimer0(1); /T0/T0定时定时1ms1ms InitDS1302(); InitDS1302(); /初始化实时时钟初始化实时时钟 InitLcd1602(); InitLcd1602(); /初始化液晶初始化液晶 whilewhile (1) (1) ifif ( (flag200msflag200ms) ) /每每200ms200ms读取依次时间读取依次时间 flag200ms = 0;
20、 flag200ms = 0; forfor (i=0; i7; i+) (i=0; i 4) + str2 = (time6 4) + 00; ; /“/“年年”高位数字转换为高位数字转换为ASCIIASCII码,码,BCDBCD码码 str3 = (time6&0 x0F) + str3 = (time6&0 x0F) + 00; ; /“/“年年”低位数字转换为低位数字转换为ASCIIASCII码码 str4 = str4 = -; ; /添加日期分隔符添加日期分隔符 str5 = (time4 4) + str5 = (time4 4) + 00; ; /“/“月月”
21、str6 = (time4&0 x0F) + str6 = (time4&0 x0F) + 00; ; str7 = str7 = -; ; str8 = (time3 4) + str8 = (time3 4) + 00; ; /“/“日日” str9 = (time3&0 x0F) + str9 = (time3&0 x0F) + 00; ; str10 = str10 = 00; ; LcdShowStr(0, 0, str); LcdShowStr(0, 0, str); /显示第一行显示第一行 str0 = (time5&0 x0F) + st
22、r0 = (time5&0 x0F) + 00; ; /“/“星期星期” str1 = str1 = 00; ; LcdShowStr(11, 0, LcdShowStr(11, 0, weekweek);); LcdShowStr(15, 0, str); LcdShowStr(15, 0, str); /显示第一行显示第一行 str0 = (time2 4) + str0 = (time2 4) + 00; ; /“/“时时” str1 = (time2&0 x0F) + str1 = (time2&0 x0F) + 00; ; str2 = str2 = :; ;
23、 /添加时间分隔符添加时间分隔符 str3 = (time1 4) + str3 = (time1 4) + 00; ; /“/“分分” str4 = (time1&0 x0F) + str4 = (time1&0 x0F) + 00; ; str5 = str5 = :; ; str6 = (time0 4) + str6 = (time0 4) + 00; ; /“/“秒秒” str7 = (time0&0 x0F) + str7 = (time0&0 x0F) + 00; ; str8 = str8 = 00; ; LcdShowStr(4, 1, str
24、); LcdShowStr(4, 1, str); /显示第二行显示第二行 psec = time0; psec = time0; /用当前值更新上次秒数用当前值更新上次秒数 16 struct 结构体名结构体名 类型类型1 变量名变量名1; 类型类型2 变量名变量名2; 类型类型n 变量名变量名n; 结构体变量名结构体变量名1, 结构体变量名结构体变量名2, . 结构体变量名结构体变量名n; struct 结构体名结构体名 类型类型1 变量名变量名1; 类型类型2 变量名变量名2; 类型类型n 变量名变量名n; ; struct 结构体名结构体名 结构体变量名结构体变量名1, 结构体变量名结
25、构体变量名2, . 结构体变量名结构体变量名n;17struct sTime /日期时间结构体定义日期时间结构体定义 unsigned int year; /年年 unsigned char mon; /月月 unsigned char day; /日日 unsigned char hour; /时时 unsigned char min; /分分 unsigned char sec; /秒秒 unsigned char week; /星期星期;结构体成员赋值:结构体成员赋值: struct sTime bufTime; bufTime.year = 0 x2013; bufTime.mon = 0 x10;结构体数组元素成员赋值:结构体数组元素成员赋值: struct sTime bufTime3; bufTime0.year = 0 x2013; bufTime0.mon = 0 x10;结构体指针变量成员访问:结构体指针变量成员访问:struct sTime *pbufTime; pbufTime-year = 0 x2013; 或者是或者是 (*pbuf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政治教师个人工作总结五篇
- 消防安全教育课件
- 物业经理个人年终工作总结
- 精细化管理与食品安全
- -医生转正试用期工作总结
- 中学生心理健康课件
- 巡防工作总结
- 三年级数学教学计划15篇
- 学校宣传工作计划5篇
- 学生自我评价合集15篇
- 昆明理工大学《自然语言处理》2022-2023学年第一学期期末试卷
- 陈义小学进城务工人员随迁子女入学工作制度和措施
- 部编版六年级道德与法治上册第9课《知法守法 依法维权》精美课件(第2课时)
- 小儿急腹症观察和护理
- 统编版七年级上学期期末考试语文试卷(含答案)
- 《长江电力财务分析》课件
- 2023年中国铁路武汉局集团有限公司招聘大专(高职)学历笔试真题
- 中考英语复习听说模拟训练(一)课件
- 公立医院创新管理薪酬激励方案
- 药品经营使用和质量监督管理办法2024年宣贯培训课件
- 旅社承包合同样本
评论
0/150
提交评论