⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.lst

📁 VB上位机程序控制DS1302时钟的proteus仿真
💻 LST
字号:
C51 COMPILER V7.20   TEXT1                                                                 03/11/2007 08:52:38 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          
   3          sbit T_CLK = P2^4; /*实时时钟时钟线引脚 */
   4          sbit T_IO = P2^3; /*实时时钟数据线引脚 */
   5          sbit T_RST = P2^2; /*实时时钟复位线引脚 */
   6          sbit ACC0=ACC^0;
   7          sbit ACC7=ACC^7;
   8          sbit rs=P2^0;
   9          sbit rw=P2^1;
  10          sbit e=P2^7;
  11          sbit setd=P3^2;
  12          sbit sett=P3^3;
  13          sbit add=P2^5;
  14          sbit enter=P2^6;
  15          sbit speaker=P3^7;
  16          unsigned char code tab[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  17          
  18          
  19          void v_RTInputByte(unsigned char ucDa) 
  20          { 
  21   1      unsigned char i;
  22   1      ACC = ucDa;
  23   1      for(i=8; i>0; i--)
  24   1      {
  25   2      T_IO = ACC0; /*相当于汇编中的 RRC */
  26   2      T_CLK = 1;
  27   2      T_CLK = 0;
  28   2      ACC = ACC >> 1; 
  29   2      } 
  30   1      }
  31          
  32          unsigned char uc_RTOutputByte(void) 
  33          { 
  34   1      unsigned char i;
  35   1      for(i=8; i>0; i--)
  36   1      {
  37   2      ACC = ACC >>1; /*相当于汇编中的 RRC */
  38   2      ACC7 = T_IO;
  39   2      T_CLK = 1;
  40   2      T_CLK = 0;
  41   2      } 
  42   1      return(ACC); 
  43   1      }
  44          
  45          void v_W1302(unsigned char ucAddr, unsigned char ucDa)
  46          {
  47   1      T_RST = 0;
  48   1      T_CLK = 0;
  49   1      T_RST = 1;
  50   1      v_RTInputByte(ucAddr); /* 地址,命令 */
  51   1      v_RTInputByte(ucDa); /* 写1Byte数据*/
  52   1      T_CLK = 1;
  53   1      T_RST =0;
  54   1      } 
  55          
C51 COMPILER V7.20   TEXT1                                                                 03/11/2007 08:52:38 PAGE 2   

  56          unsigned char uc_R1302(unsigned char ucAddr)
  57          {
  58   1      unsigned char ucDa;
  59   1      T_RST = 0;
  60   1      T_CLK = 0;
  61   1      T_RST = 1;
  62   1      v_RTInputByte(ucAddr); /* 地址,命令 */
  63   1      ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
  64   1      T_CLK = 1;
  65   1      T_RST =0;
  66   1      return(ucDa);
  67   1      }
  68          
  69          void v_BurstW1302T(unsigned char *pSecDa)
  70          {
  71   1      unsigned char i;
  72   1      v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
  73   1      T_RST = 0;
  74   1      T_CLK = 0;
  75   1      T_RST = 1;
  76   1      v_RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */
  77   1      for (i=8;i>0;i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
  78   1      {
  79   2      v_RTInputByte(*pSecDa);/* 写1Byte数据*/
  80   2      pSecDa++;
  81   2      }
  82   1      T_CLK = 1;
  83   1      T_RST =0;
  84   1      } 
  85          
  86          void v_BurstR1302T(unsigned char *pSecDa)
  87          {
  88   1      unsigned char i;
  89   1      T_RST = 0;
  90   1      T_CLK = 0;
  91   1      T_RST = 1;
  92   1      v_RTInputByte(0xbf); /* 0xbf:时钟多字节读命令 */
  93   1      for (i=8; i>0; i--) 
  94   1      {
  95   2      *pSecDa = uc_RTOutputByte(); /* 读1Byte数据 */
  96   2      pSecDa++;
  97   2      }
  98   1      T_CLK = 1;
  99   1      T_RST =0;
 100   1      }
 101          
 102          void v_BurstW1302R(unsigned char *pReDa)
 103          {
 104   1      unsigned char i;
 105   1      v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
 106   1      T_RST = 0;
 107   1      T_CLK = 0;
 108   1      T_RST = 1;
 109   1      v_RTInputByte(0xfe); /* 0xbe:时钟多字节写命令 */
 110   1      for (i=31;i>0;i--) /*31Byte 寄存器数据 */
 111   1      {
 112   2      v_RTInputByte(*pReDa); /* 写1Byte数据*/
 113   2      pReDa++;
 114   2      }
 115   1      T_CLK = 1;
 116   1      T_RST =0;
 117   1      } 
C51 COMPILER V7.20   TEXT1                                                                 03/11/2007 08:52:38 PAGE 3   

 118          
 119          void v_BurstR1302R(unsigned char *pReDa)
 120          {
 121   1      unsigned char i;
 122   1      T_RST = 0;
 123   1      T_CLK = 0;
 124   1      T_RST = 1;
 125   1      v_RTInputByte(0xff); /* 0xbf:时钟多字节读命令 */
 126   1      for (i=31; i>0; i--) /*31Byte 寄存器数据 */
 127   1      {
 128   2      *pReDa = uc_RTOutputByte(); /* 读1Byte数据 */
 129   2      pReDa++;
 130   2      }
 131   1      T_CLK = 1;
 132   1      T_RST =0;
 133   1      }
 134          
 135          void v_setd1302(unsigned char *pSecDa) 
 136          {
 137   1      unsigned char i;
 138   1      unsigned char ucAddr = 0x80; 
 139   1      v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
 140   1      for(i =7;i>0;i--)
 141   1      { 
 142   2      v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
 143   2      
 144   2      pSecDa++;
 145   2      ucAddr +=2;
 146   2      }
 147   1      v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
 148   1      }
 149          
 150          
 151          void delay()
 152          { unsigned char y;
 153   1       for(y=0;y<0xff;y++)
 154   1       {;}
 155   1      }
 156          
 157          
 158          void wc51r(unsigned char j)//写命令
 159          {
 160   1      e=0;rs=0;rw=0;
 161   1      e=1;
 162   1      P1=j;
 163   1      e=0;
 164   1      delay();
 165   1      }
 166          
 167          void init()//初始化
 168          {
 169   1      wc51r(0x01);
 170   1      wc51r(0x38);
 171   1      wc51r(0x38);
 172   1      wc51r(0x0e);
 173   1      wc51r(0x06);
 174   1      wc51r(0x0c);
 175   1      }
 176          
 177          
 178          void wc51ddr(unsigned char j)//写数据
 179          {
C51 COMPILER V7.20   TEXT1                                                                 03/11/2007 08:52:38 PAGE 4   

 180   1      e=0;rs=1;rw=0;
 181   1      e=1;
 182   1      P1=j;
 183   1      e=0;
 184   1      delay();
 185   1      }
 186          
 187          void write1602(unsigned char add,unsigned char da)//写入显示数据
 188          {wc51r(add);wc51ddr(da);}
 189           
 190          
 191          
 192          void main(void)
 193          {
 194   1      unsigned char ucCurtime[7];
 195   1      unsigned char i,yearh,yearl,monh,monl,dah,dal,hoh,hol,mih,mil,seh,sel;
 196   1      unsigned char ucAddr;
 197   1      unsigned int c;
 198   1      
 199   1      init();
 200   1      write1602(0x85,0x35);
 201   1      for(c=0;c<30000;c++);
 202   1      write1602(0x86,0x32);
 203   1      for(c=0;c<30000;c++);
 204   1      write1602(0x87,0x4D);
 205   1      for(c=0;c<30000;c++);
 206   1      write1602(0x88,0x43);
 207   1      for(c=0;c<30000;c++);
 208   1      write1602(0x89,0x55);
 209   1      for(c=0;c<30000;c++);
 210   1      write1602(0xC2,0x51);
 211   1      write1602(0xC3,0x51);
 212   1      write1602(0xC4,0x3A);
 213   1      write1602(0xC5,0x35);
 214   1      write1602(0xC6,0x39);
 215   1      write1602(0xC7,0x37);
 216   1      write1602(0xC8,0x33);
 217   1      write1602(0xC9,0x38);
 218   1      write1602(0xCA,0x35);
 219   1      write1602(0xCB,0x33);
 220   1      write1602(0xCC,0x36);
 221   1      write1602(0xCD,0x39);
 222   1      for(c=0;c<50000;c++);
 223   1      init();//LCD初始化
 224   1      
 225   1      
 226   1      
 227   1      
 228   1      
 229   1      TMOD=0X20;
 230   1      TH1=0XF3;
 231   1      TL1=0XF3;
 232   1      SCON=0X50;
 233   1      PCON=0X00;
 234   1      IT0=1;
 235   1      EX0=1;
 236   1      IT1=1;
 237   1      EX1=1;
 238   1      TR1=1;
 239   1      EA=1;
 240   1      ES=1;
 241   1      while(1)
C51 COMPILER V7.20   TEXT1                                                                 03/11/2007 08:52:38 PAGE 5   

 242   1      {ucAddr = 0x81;
 243   2      for (i=0;i<7;i++)
 244   2      {
 245   3      ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 246   3      ucAddr += 2;
 247   3      }
 248   2      
 249   2      
 250   2      yearh=ucCurtime[6]/16;
 251   2      yearl=ucCurtime[6]%16;
 252   2      monh=ucCurtime[4]/16;
 253   2      monl=ucCurtime[4]%16;
 254   2      dah=ucCurtime[3]/16;
 255   2      dal=ucCurtime[3]%16;
 256   2      
 257   2      hoh=ucCurtime[2]/16;
 258   2      hol=ucCurtime[2]%16;
 259   2      mih=ucCurtime[1]/16;
 260   2      mil=ucCurtime[1]%16;
 261   2      seh=ucCurtime[0]/16;
 262   2      sel=ucCurtime[0]%16;
 263   2      
 264   2      
 265   2      
 266   2      write1602(0x80,0x44);
 267   2      write1602(0x81,0x61);
 268   2      write1602(0x82,0x74);
 269   2      write1602(0x83,0x65);
 270   2      write1602(0x84,0x3a);//显示date:
 271   2      
 272   2      write1602(0x85,tab[yearh]);
 273   2      write1602(0x86,tab[yearl]);
 274   2      write1602(0x87,0x2d);//显示年
 275   2      write1602(0x88,tab[monh]);
 276   2      write1602(0x89,tab[monl]);
 277   2      write1602(0x8a,0x2d);//显示月
 278   2      write1602(0x8b,tab[dah]);
 279   2      write1602(0x8c,tab[dal]);
 280   2      
 281   2      write1602(0xc0,0x54);
 282   2      write1602(0xc1,0x69);
 283   2      write1602(0xc2,0x6d);
 284   2      write1602(0xc3,0x65);
 285   2      write1602(0xc4,0x3a);//显示time:
 286   2      
 287   2      write1602(0xc5,tab[hoh]);
 288   2      write1602(0xc6,tab[hol]);
 289   2      write1602(0xc7,0x3a);//显示小时
 290   2      write1602(0xc8,tab[mih]);
 291   2      write1602(0xc9,tab[mil]);
 292   2      write1602(0xca,0x3a);//显示小时
 293   2      write1602(0xcb,tab[seh]);
 294   2      write1602(0xcc,tab[sel]);
 295   2      
 296   2      if((ucCurtime[1]==0)&(ucCurtime[0]==0|ucCurtime[0]==1|ucCurtime[0]==2))//3秒整点报时
 297   2        speaker=0;
 298   2      else speaker=1;
 299   2      
 300   2      }
 301   1      }
 302          
 303          
C51 COMPILER V7.20   TEXT1                                                                 03/11/2007 08:52:38 PAGE 6   

 304          
 305          
 306          serint() interrupt 4
 307          { //EA=0;
 308   1        static unsigned char k;
 309   1        unsigned char temp,year,month,date,hour,min,sec,week;
 310   1        unsigned char stemp[7]={0};
 311   1        RI=1;
 312   1        temp=SBUF;
 313   1        RI=0;
 314   1        k++;
 315   1        switch (k)
 316   1        { case 1:sec=temp;
 317   2                 break;
 318   2              case 2:min=temp;
 319   2                     break;
 320   2              case 3:hour=temp;
 321   2                     break;
 322   2              case 4:date=temp;
 323   2                     break;
 324   2              case 5:month=temp;
 325   2                     break;
 326   2              case 6:week=temp;
 327   2                     break;
 328   2              case 7:year=temp;
 329   2                     stemp[0]=(sec/10)*16+sec%10;
 330   2                         stemp[1]=(min/10)*16+min%10;
 331   2                         stemp[2]=(hour/10)*16+hour%10;
 332   2                         stemp[3]=(date/10)*16+date%10;
 333   2                         stemp[4]=(month/10)*16+month%10;
 334   2                         stemp[5]=(week/10)*16+week%10;
 335   2                         stemp[6]=(year/10)*16+year%10;
 336   2                 v_setd1302(stemp);//设定值
 337   2                         k=0;
 338   2                     break;
 339   2        }
 340   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1250    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      29
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -