怎么理解ds1302的读数据和写数据( 二 )

>4; lcdshow_u(6,0x30+x); y=y&0x0f; lcdshow_u(7,0x30+y); lcdshow_u(8,':'); x=RDS1302(MINUTE); y=x; x=x>>4; lcdshow_u(9,0x30+x); y=y&0x0f; lcdshow_u(0x0a,0x30+y); lcdshow_u(0x0b,':'); x=RDS1302(SECOND); y=x; x=x>>4; lcdshow_u(0x0c,0x30+x); y=y&0x0f; lcdshow_u(0x0d,0x30+y); x=RDS1302(0x8d); y=x; x=x>>4; lcdshow_d(8,0x30+x); y=y&0x0f; lcdshow_d(9,0x30+y); lcdshow_d(0x0a,'-'); x=RDS1302(0x89); y=x; x=x>>4; lcdshow_d(0x0b,0x30+x); y=y&0x0f; lcdshow_d(0 。
3.如何读出DS1302里面的时钟数据一个例子 重点看DS1302_Read()#include #include#define uchar unsigned char#define uint unsigned int#define SECOND 0x81 #define MINUTE 0x83 #define HOUR 0x85 sbit rs=P2^0;sbit rw=P2^1;sbit ep=P2^2;sbit DS1302_SCLK = P1^0; sbit DS1302_IO= P1^1; sbit DS1302_RST = P1^2; sbit M=P3^2;sbit U=P3^3;sbit D=P3^4;unsigned char sel=0;uchar code DIS1[]={“abcdef"};uchar code DIS2[]={"abcdef"};/////////////////////////延时////////////////////////////////void delay(uint ms){ unsigned int a,b; for(a=0;a>1; } }////////////////////////////////////////////////////////////uchar DS1302_Read(){ uchar TempDat=0,i; for(i=0;i<8;i++) { TempDat>>=1; if(DS1302_IO) TempDat=TempDat|0x80; DS1302_SCLK=1; DS1302_SCLK=0; } return TempDat;}////////////////////////////////////////////////////////////void WDS1302(uchar ucAddr, uchar ucDat) { DS1302_RST = 0; DS1302_SCLK = 0; DS1302_RST = 1; DS1302_Write(ucAddr); DS1302_Write(ucDat); DS1302_SCLK = 1; DS1302_RST = 0;} ////////////////////////////////////////////////////////////uchar RDS1302(uchar ucAddr){ uchar ucDat; DS1302_RST = 0; DS1302_SCLK = 0; DS1302_RST = 1; DS1302_Write(ucAddr); ucDat=DS1302_Read(); DS1302_SCLK = 1; DS1302_RST = 0; return ucDat;}//////////////////////////////////////////////////////////void init_1302() { WDS1302(0x8e,0x00);//开保护寄存器 WDS1302(0x80,0x55);//秒 WDS1302(0x82,0x59);//分 WDS1302(0x84,0x23);//时 WDS1302(0x8A,0x07);//星期 WDS1302(0x86,0x02);//日 WDS1302(0x88,0x08);//月 WDS1302(0x8C,0x09);//年 WDS1302(0x90,0xab);//卷电流充电 WDS1302(0x8e,0x80);//关保护寄存器 } ///////////////////////////////////////////////////////////************************1602驱动************************///////////////////////////////////////////////////////////bit lcd_bz(){ bit result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0 & 0x80); ep = 0; return result; } //////////////////////////////////////////////////////// void lcd_wcmd(unsigned char cmd) { while(lcd_bz()); rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep= 0; } /////////////////////////////////////////////////////////void lcd_pos(unsigned char pos) { lcd_wcmd(pos | 0x80); } /////////////////////////////////////////////////////////void lcd_wdat(unsigned char dat) { while(lcd_bz()); rs = 1; rw = 0; ep = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } //////////////////////////////////////////////////////////void lcd_init() { lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x06); delay(1); lcd_wcmd(0x01); delay(1); }///////////////////////////////////////////////////////// /*********************调时函数*************************////////////////////////////////////////////////////////// void set_time(){ signed char address,item; signed char max,mini; if(M==0) { sel++; delay(300); if(sel==6) sel=0; if(sel==2) {address=0x82; max=59;mini=0; } if(sel==1) {address=0x84; max=23;mini=0; } if(sel==3) {address=0x8c; max=99;mini=9;} if(sel==4) {address=0x88; max=12;mini=1; } if(sel==5) {address=0x86; max=31;mini=1; } M=1; } item=((RDS1302(address+1))/16)*10 + (RDS1302(address+1))%16; if(U == 0) { delay(200); U=1; item++; } if(D == 0) { delay(200); D=1; item--; } if(item>max) item=mini; if(item