《手把手教你学单机6》由会员分享,可在线阅读,更多相关《手把手教你学单机6(17页珍藏版)》请在金锄头文库上搜索。
1、手把手教你学单片机 -51基础基础(C语言语言)金沙滩工作室金沙滩工作室 http:/www.kingst.org 作者:小宋老师作者:小宋老师 n第十六课:第十六课:n DS1302实时实时时钟学习时钟学习BCD码介绍码介绍n用用4位二进制数来表示位二进制数来表示1位十进制数中的位十进制数中的09这这10个数码,简称个数码,简称BCD码,即码,即BCD代码。代码。n12 0001 0010 45ntmp = timedatai / 10; tmp = 4ntimedatai = timedatai % 10; = 5ntimedatai = timedatai + tmp*16;n 69 0
2、100 0101英文手册阅读英文手册阅读n对对DS1302的操作包括读、写两个部分,我们根据程序来介绍芯的操作包括读、写两个部分,我们根据程序来介绍芯片操作。从上图看出,无论我们是读、还是写,数据都是以片操作。从上图看出,无论我们是读、还是写,数据都是以1个个字节(字节(8bit)为单位的,所以在程序的最底层我问要先写出字节)为单位的,所以在程序的最底层我问要先写出字节的读写程序:的读写程序:nvoid write_ds1302_byte(uint8 dat) nnuint8 i;nSCK = 0;nfor (i=0;i= 1;nSCK = 0;nnnuint8 read_ds1302_byt
3、e(void) nnuint8 i, dat=0;n nfor (i=0;i= 1;nif (SDA)ndat |= 0x80;nSCK = 1;nSCK = 0;nnreturn dat;nn在每次发起数据传输之前,要先复位在每次发起数据传输之前,要先复位DS1302:nvoid reset_ds1302(void)nnRST = 0;nSCK = 0;nRST = 1;nn由于上电之后由于上电之后WP的状态并不确定,所以我们每次写操的状态并不确定,所以我们每次写操作时都要打开写保护。写保护程序:作时都要打开写保护。写保护程序:n/*n * 清除写保护清除写保护n*/nvoid clear_
4、ds1302_WP(void) nnreset_ds1302();nRST = 1;nwrite_ds1302_byte(0x8E);nwrite_ds1302_byte(0);nSDA = 0;nRST = 0;nn/*n * 设置写保护设置写保护n*/nvoid set_ds1302_WP(void) nnreset_ds1302();nRST = 1;nwrite_ds1302_byte(0x8E);nwrite_ds1302_byte(0x80);nSDA = 0;nRST = 0;nn我我们们每每次次的的读读写写时时间间,时时间间上上是是对对DS1302的的相相应应地地址址进进行行操
5、操作作,图图中中列列出出了了各各个个信信息息的的读读写写地地址址,为为了了方方便对地址操作,我们封装了以下两个函数:便对地址操作,我们封装了以下两个函数:n/*n * 写入写入DS1302n*/nvoid write_ds1302(uint8 addr, uint8 dat) nnreset_ds1302();nRST = 1;nwrite_ds1302_byte(addr);nwrite_ds1302_byte(dat);nSDA = 0;nRST = 0;nn/*n * 读出读出DS1302数据数据n*/nuint8 read_ds1302(uint8 addr)nnuint8 temp=0;nreset_ds1302();nRST = 1;nwrite_ds1302_byte(addr);ntemp = read_ds1302_byte();nSDA = 0;nRST = 0;nreturn (temp);n作业作业n熟悉熟悉1302的资料,尝试阅读英文手册。的资料,尝试阅读英文手册。n尝试使用数码管或者尝试使用数码管或者1602液晶,将始终显示出液晶,将始终显示出来。来。