微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我用LCD1602读取DS1302怎么显示出来的数不对啊

我用LCD1602读取DS1302怎么显示出来的数不对啊

时间:10-02 整理:3721RD 点击:
显示的是2013-08-17(FF)  SUN第二行00(FF)-10(FF)-00

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define         uint unsigned int
  4. #include<intrins.h>
  5. sbit dsrs=P2^6;
  6. sbit dsrw=P2^5;
  7. sbit lcde=P2^7;
  8. sbit DSIO=P3^4;
  9. sbit SCLK=P3^6;
  10. sbit RST=P3^5;
  11. sbit ACC0=ACC^0;
  12. sbit ACC7=ACC^7;
  13. uchar num;
  14. uchar code table2[]="0123456789ABCDEF";
  15. uchar data table3[]={0x00,0x59,0x23,0x16,0x08,0x05,0x13};//秒-分-时-日-月-周-年
  16. uchar data table[]="2013-08-16   FRI";
  17. uchar data table1[]="00-00-00";
  18. uchar code weeks[][3]={{"SUN"},{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};

  19. void delay(uint z)
  20. {
  21.         uint x,y;
  22.         for(x=z;x>0;x--)
  23.                 for(y=110;y>0;y--);
  24. }
  25. void write_com(uchar com)
  26. {
  27.         dsrs=0;
  28.         dsrw=0;
  29.         lcde=0;
  30.         P0=com;
  31.         delay(5);
  32.         lcde=1;
  33.         delay(5);
  34.         lcde=0;
  35. }
  36. void write_date(uchar date)
  37. {
  38.         dsrs=1;
  39.         P0=date;
  40.         delay(10);
  41.         lcde=1;
  42.         delay(5);
  43.         lcde=0;
  44. }

  45. void init()
  46. {
  47.         lcde=0;
  48.         write_com(0x38);
  49.         write_com(0x0c);
  50.         write_com(0x06);
  51.         write_com(0x01);
  52.         write_com(0x80);
  53. }
  54. void lcd_busy_wait() /*LCD1602 忙等待*/
  55. {
  56.     dsrs = 0;
  57.     dsrw = 1;
  58.     lcde= 1;
  59.     P0= 0xff;
  60.     while (P0&0x80);
  61.     lcde= 0;

  62. }
  63. void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符写入*/
  64. {
  65.     P0=0xff;
  66.         x_pos &= 0x0f; /* X位置范围 0~15 */
  67.     y_pos &= 0x01; /* Y位置范围 0~ 1 */
  68.     if(y_pos==1) x_pos += 0x40+3;
  69.     x_pos += 0x80+1;
  70.     write_com(x_pos);
  71.         lcd_busy_wait();
  72.     dsrs = 1;
  73.     dsrw = 0;
  74.     lcde= 0;
  75.     P0=lcd_dat;
  76.     lcde= 1;
  77.     lcde=0;
  78. }
  79. //-----DS1302-----
  80. void write1302_com(uchar date)
  81. {
  82.         uchar i;
  83.         ACC=date;
  84.         for(i=8;i>0;i--)
  85.         {
  86.                 DSIO=ACC0;
  87.                 SCLK=1;
  88.                 SCLK=0;
  89.                 ACC>>=1;
  90.         }               
  91. }
  92. uchar Rdate(void)
  93. {
  94.         uchar i;
  95.         for(i=8;i>0;i--)
  96.         {
  97.                 ACC>>=1;
  98.                 ACC7=DSIO;
  99.                 SCLK=1;
  100.                 SCLK=0;
  101.         }
  102.         return ACC;
  103. }
  104. void W1302(uchar add,uchar date)
  105. {
  106.         RST=0;
  107.         SCLK=0;
  108.         RST=1;
  109.         write1302_com(add);
  110.         write1302_com(date);
  111.         SCLK=1;
  112.         RST=0;
  113. }
  114. uchar R1302(uchar add)
  115. {
  116.         uchar date;
  117.         RST=0;
  118.         SCLK=0;
  119.         RST=1;
  120.         write1302_com(add);
  121.         date=Rdate();
  122.         SCLK=1;
  123.         RST=0;
  124.         return date;
  125. }
  126. void Set(uchar *table3)
  127. {
  128.         uchar i;
  129.         uchar add=0x80;
  130.         EA=0;
  131.         W1302(0x8E,0x00);
  132.         for(i=7;i>0;i--)
  133.         {
  134.                 W1302(add,*table3);
  135.                 table3++;
  136.                 add+=2;
  137.         }
  138.         W1302(0x8E,0x80);
  139.         EA=1;
  140. }
  141. void Get(uchar add[])
  142. {
  143.         uchar i;
  144.         uchar add1=0x81;
  145.         EA=0;
  146.         for(i=0;i<7;i++)
  147.         {
  148.                 add[i]=R1302(add1);
  149.                 add1+=2;
  150.         }
  151.         EA=1;
  152. }
  153. void main()
  154. {
  155.         init();
  156. //        Set(table3);

  157.         while(1)
  158.         {
  159.                 Get(table3);
  160.                 table[2]=table2[table3[6]/0x10];
  161.                 table[3]=table2[table3[6]%0x10]; //年
  162.        
  163.                 table[5]=table2[table3[4]/0x10];
  164.                 table[6]=table2[table3[4]%0x10];//月
  165.        
  166.                 table[8]=table2[table3[3]/0x10];
  167.                 table[9]=table2[table3[3]%0x10];//日
  168.                 //
  169.                 table1[0]=table2[table3[2]/0x10];
  170.                 table1[1]=table2[table3[2]%0x10];//时
  171.        
  172.                 table1[3]=table2[table3[1]/0x10];
  173.                 table1[4]=table2[table3[1]%0x10];//分
  174.        
  175.                 table1[6]=table2[table3[0]/0x10];
  176.                 table1[7]=table2[table3[0]%0x10];//秒
  177.                 for(num=0;num<3;num++) table[12+num]=weeks[table3[5]&0x07][num];

  178.                 for(num=0;num<16;num++)
  179.                 {
  180.                         lcd_char_write(num,0,table[num]);
  181.                 }
  182.                 for(num=0;num<8;num++)
  183.                 {
  184.                         lcd_char_write(num,1,table1[num]);
  185.                 }
  186.         }
  187. }

复制代码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top