我用LCD1602读取DS1302怎么显示出来的数不对啊
时间:10-02
整理:3721RD
点击:
显示的是2013-08-17(FF) SUN第二行00(FF)-10(FF)-00
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #include<intrins.h>
- sbit dsrs=P2^6;
- sbit dsrw=P2^5;
- sbit lcde=P2^7;
- sbit DSIO=P3^4;
- sbit SCLK=P3^6;
- sbit RST=P3^5;
- sbit ACC0=ACC^0;
- sbit ACC7=ACC^7;
- uchar num;
- uchar code table2[]="0123456789ABCDEF";
- uchar data table3[]={0x00,0x59,0x23,0x16,0x08,0x05,0x13};//秒-分-时-日-月-周-年
- uchar data table[]="2013-08-16 FRI";
- uchar data table1[]="00-00-00";
- uchar code weeks[][3]={{"SUN"},{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void write_com(uchar com)
- {
- dsrs=0;
- dsrw=0;
- lcde=0;
- P0=com;
- delay(5);
- lcde=1;
- delay(5);
- lcde=0;
- }
- void write_date(uchar date)
- {
- dsrs=1;
- P0=date;
- delay(10);
- lcde=1;
- delay(5);
- lcde=0;
- }
- void init()
- {
- lcde=0;
- write_com(0x38);
- write_com(0x0c);
- write_com(0x06);
- write_com(0x01);
- write_com(0x80);
- }
- void lcd_busy_wait() /*LCD1602 忙等待*/
- {
- dsrs = 0;
- dsrw = 1;
- lcde= 1;
- P0= 0xff;
- while (P0&0x80);
- lcde= 0;
- }
- void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符写入*/
- {
- P0=0xff;
- x_pos &= 0x0f; /* X位置范围 0~15 */
- y_pos &= 0x01; /* Y位置范围 0~ 1 */
- if(y_pos==1) x_pos += 0x40+3;
- x_pos += 0x80+1;
- write_com(x_pos);
- lcd_busy_wait();
- dsrs = 1;
- dsrw = 0;
- lcde= 0;
- P0=lcd_dat;
- lcde= 1;
- lcde=0;
- }
- //-----DS1302-----
- void write1302_com(uchar date)
- {
- uchar i;
- ACC=date;
- for(i=8;i>0;i--)
- {
- DSIO=ACC0;
- SCLK=1;
- SCLK=0;
- ACC>>=1;
- }
- }
- uchar Rdate(void)
- {
- uchar i;
- for(i=8;i>0;i--)
- {
- ACC>>=1;
- ACC7=DSIO;
- SCLK=1;
- SCLK=0;
- }
- return ACC;
- }
- void W1302(uchar add,uchar date)
- {
- RST=0;
- SCLK=0;
- RST=1;
- write1302_com(add);
- write1302_com(date);
- SCLK=1;
- RST=0;
- }
- uchar R1302(uchar add)
- {
- uchar date;
- RST=0;
- SCLK=0;
- RST=1;
- write1302_com(add);
- date=Rdate();
- SCLK=1;
- RST=0;
- return date;
- }
- void Set(uchar *table3)
- {
- uchar i;
- uchar add=0x80;
- EA=0;
- W1302(0x8E,0x00);
- for(i=7;i>0;i--)
- {
- W1302(add,*table3);
- table3++;
- add+=2;
- }
- W1302(0x8E,0x80);
- EA=1;
- }
- void Get(uchar add[])
- {
- uchar i;
- uchar add1=0x81;
- EA=0;
- for(i=0;i<7;i++)
- {
- add[i]=R1302(add1);
- add1+=2;
- }
- EA=1;
- }
- void main()
- {
- init();
- // Set(table3);
- while(1)
- {
- Get(table3);
- table[2]=table2[table3[6]/0x10];
- table[3]=table2[table3[6]%0x10]; //年
-
- table[5]=table2[table3[4]/0x10];
- table[6]=table2[table3[4]%0x10];//月
-
- table[8]=table2[table3[3]/0x10];
- table[9]=table2[table3[3]%0x10];//日
- //
- table1[0]=table2[table3[2]/0x10];
- table1[1]=table2[table3[2]%0x10];//时
-
- table1[3]=table2[table3[1]/0x10];
- table1[4]=table2[table3[1]%0x10];//分
-
- table1[6]=table2[table3[0]/0x10];
- table1[7]=table2[table3[0]%0x10];//秒
- for(num=0;num<3;num++) table[12+num]=weeks[table3[5]&0x07][num];
- for(num=0;num<16;num++)
- {
- lcd_char_write(num,0,table[num]);
- }
- for(num=0;num<8;num++)
- {
- lcd_char_write(num,1,table1[num]);
- }
- }
- }