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

📄 ds1302beta0.lst

📁 时钟芯片DS1302的使用,用LED显示的
💻 LST
字号:
C51 COMPILER V7.06   DS1302BETA0                                                           09/06/2008 18:49:08 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS1302BETA0
OBJECT MODULE PLACED IN DS1302Beta0.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE DS1302Beta0.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          
   3          sbit  DS_CLK=P3^5;
   4          sbit  DS_IO=P3^6;
   5          sbit  DS_RST=P3^7;
   6          sbit  BIT7=ACC^7;
   7          sbit  BIT0=ACC^0;
   8          char  curtime[7];
   9          unsigned  char  code num[10]={0x3F,0x06,0x5B,0x4F,0x66,
  10                                                  0x6D,0x7D,0x07,0x7F,0x6F
  11                                             };//0~9编码
  12          unsigned char key;
  13          
  14          //八位数据写入函数
  15          void  InputByte(unsigned char ucData)
  16          {
  17   1              unsigned char i;
  18   1              ACC=ucData;
  19   1              DS_RST=1;
  20   1              
  21   1              for (i=8;i>0;i--)
  22   1              {
  23   2                      DS_IO=BIT0;
  24   2                      DS_CLK=0;
  25   2                      DS_CLK=1;
  26   2                      ACC=ACC>>1;
  27   2              }
  28   1      }
  29          
  30          //八位数据读出函数
  31          unsigned char  OutputByte(void)
  32          {
  33   1              unsigned char i;
  34   1              DS_RST=1;
  35   1              
  36   1              for (i=8;i>0;i--)
  37   1              {
  38   2                      ACC=ACC>>1;
  39   2                      DS_IO=1;
  40   2                      DS_CLK=1;
  41   2                      DS_CLK=0;
  42   2                      BIT7=DS_IO;
  43   2              }
  44   1              
  45   1              return(ACC);
  46   1      }
  47          
  48          //将指令或数据写入指定寄存器
  49          void Write_1302(unsigned char add,unsigned char ucData)
  50          {
  51   1              DS_RST=0;
  52   1              DS_CLK=0;
  53   1              DS_RST=1;
  54   1              InputByte(add);
  55   1              InputByte(ucData);
C51 COMPILER V7.06   DS1302BETA0                                                           09/06/2008 18:49:08 PAGE 2   

  56   1              DS_RST=0;
  57   1              //DS_IO=1;////???没用
  58   1      }
  59          
  60          //读出对应寄存器数据
  61          unsigned char Read_1302(unsigned char add)
  62          {
  63   1              unsigned char  ucData;
  64   1      
  65   1              DS_RST=0;
  66   1              DS_CLK=0;
  67   1              DS_RST=1;
  68   1              InputByte(add);
  69   1              ucData=OutputByte();
  70   1              DS_RST=0;
  71   1              return(ucData);
  72   1      }
  73          
  74          //设置时间初值
  75          void SetTime(unsigned char *time)
  76          {
  77   1              unsigned char  i;
  78   1              unsigned char  add=0x80;
  79   1              
  80   1              Write_1302(0x8E,0x00);//禁止写保护
  81   1              for (i=7;i>0;i--)
  82   1              {
  83   2                      Write_1302(add,*time);
  84   2                      time++;
  85   2                      add+=2;
  86   2              }
  87   1              Write_1302(0x8E,0x80);//写保护
  88   1      }
  89          
  90          //获取时间值
  91          void GetTime(void)
  92          {
  93   1              unsigned char  i,j;
  94   1              unsigned char  add=0x81;
  95   1              unsigned char  temp;
  96   1      
  97   1              for (i=0;i<7;i++)
  98   1              {
  99   2                      curtime[i]=Read_1302(add);
 100   2                      temp=curtime[i];
 101   2                      j=temp>>4;
 102   2                      j*=10;
 103   2                      temp=temp&0x0F;
 104   2                      temp+=j;
 105   2                      curtime[i]=temp;
 106   2                      add+=2;
 107   2              }
 108   1      }
 109          
 110          //十进制时间转化成BCD码
 111          void convert(unsigned char *p)
 112          {
 113   1              unsigned char  i;
 114   1              unsigned char  temp;
 115   1      
 116   1              for (i=0;i<7;i++)
 117   1              {
C51 COMPILER V7.06   DS1302BETA0                                                           09/06/2008 18:49:08 PAGE 3   

 118   2                      temp=(*p)/10;
 119   2                      temp=temp<<4;
 120   2                      temp+=(*p)%10;
 121   2                      *p=temp;
 122   2                      p++;
 123   2              }
 124   1      }
 125          
 126          /*****判断键盘是否按下*****/  
 127          bit  JudgeKey(void) 
 128          {
 129   1              unsigned char i;
 130   1              P2=0xF0;
 131   1              if ((P2&0xF0)!=0xF0)
 132   1              {
 133   2                      for (i=100;i>0;i--);    //延时,消抖  
 134   2                      if ((P2&0xF0)!=0xF0)
 135   2                      {
 136   3                              return 1;//确实有键按下 
 137   3                      }
 138   2                      else
 139   2                      {
 140   3                              return 0;//实际无键按下 
 141   3                      } 
 142   2              }
 143   1              else
 144   1              {
 145   2                      return 0;    //无键按下  
 146   2              }
 147   1      }
 148          
 149          /*判断具体按下的是哪一个键*/  
 150          void  WhichKey(void) 
 151          {
 152   1              unsigned char col;
 153   1              unsigned char row;
 154   1              switch(P2)
 155   1              {
 156   2                      case  0x70:
 157   2                              col=1;  break;
 158   2                      case  0xB0:
 159   2                              col=2;  break;
 160   2                      case  0xD0:
 161   2                              col=3;  break;
 162   2                      case  0xE0:
 163   2                              col=4;  break;
 164   2                      default:
 165   2                              break;
 166   2              }
 167   1              P2=0x0F;
 168   1              switch(P2)
 169   1              {
 170   2                      case  0x07:
 171   2                              row=1;  break;
 172   2                      case  0x0B:
 173   2                              row=2;  break;
 174   2                      case  0x0D:
 175   2                              row=3;  break;
 176   2                      case  0x0E:
 177   2                              row=4;  break;
 178   2                      default:
 179   2                              break;
C51 COMPILER V7.06   DS1302BETA0                                                           09/06/2008 18:49:08 PAGE 4   

 180   2              }
 181   1              key=4*(col-1)+row;
 182   1      }
 183          
 184          
 185          /*LED显示时间*/ 
 186          void Display(void)
 187          {
 188   1              unsigned  int i;
 189   1              unsigned  char  Dspbuf[6];   //时间显示缓存数组 
 190   1              unsigned  char temp;   //临时变量,用于存编码的下标  
 191   1              char k;
 192   1              for (i=0;i<3;i++)
 193   1              {
 194   2                      temp=curtime[i]%10;
 195   2                      Dspbuf[2*i]=num[temp];//Dspbuf[2*i+0]
 196   2                      temp=curtime[i]/10;
 197   2                      Dspbuf[2*i+1]=num[temp];
 198   2              }
 199   1              for (k=0;k<=5;k++)        //动态显示 
 200   1              {
 201   2                      P0=Dspbuf[k];
 202   2                      for (i=300;i>0;i--);  //延时
 203   2                      if  (P1&0x20)          //位选循环左移 
 204   2                              P1=(P1<<1)+1; 
 205   2                      else
 206   2                      {
 207   3                              P1=P1<<1;
 208   3                              P0=Dspbuf[0];
 209   3                      }
 210   2              }
 211   1      }
 212          
 213          /*键盘动作*/
 214          void Keyscan(void)
 215          {
 216   1              bit flag;
 217   1              unsigned char  *p;
 218   1      
 219   1              if(JudgeKey())
 220   1              {
 221   2                      WhichKey();
 222   2                      if (key==4)
 223   2                      {
 224   3                              Write_1302(0x80,0x80);
 225   3                              flag=1;
 226   3                      }
 227   2                      while (flag==1)
 228   2                      {
 229   3                              if (JudgeKey())
 230   3                              {
 231   4                                      do
 232   4                                      {
 233   5                                              WhichKey();
 234   5                                              Display();
 235   5                                      }
 236   4                                      while(JudgeKey());//等待按键释放 
 237   4                                              
 238   4                                      switch (key)
 239   4                                      {
 240   5                                              case 1:
 241   5                                                      curtime[2]++;
C51 COMPILER V7.06   DS1302BETA0                                                           09/06/2008 18:49:08 PAGE 5   

 242   5                                                      if (curtime[2]==24)
 243   5                                                              curtime[2]=0;
 244   5                                                      break;
 245   5                                              case 2:
 246   5                                                      curtime[1]++;
 247   5                                                      if (curtime[1]==60)
 248   5                                                              curtime[1]=0;
 249   5                                                      break;
 250   5                                              case 3:
 251   5                                                      curtime[0]++;
 252   5                                                      if (curtime[0]==60)
 253   5                                                              curtime[0]=0;
 254   5                                                      break;
 255   5                                              case 5:
 256   5                                                      curtime[2]--;
 257   5                                                      if (curtime[2]<0)
 258   5                                                              curtime[2]=23;
 259   5                                                      break;
 260   5                                              case 6:
 261   5                                                      curtime[1]--;
 262   5                                                      if (curtime[1]<0)
 263   5                                                              curtime[1]=59;
 264   5                                                      break;
 265   5                                              case 7:
 266   5                                                      curtime[0]--;
 267   5                                                      if (curtime[0]<0)
 268   5                                                              curtime[0]=59;
 269   5                                                      break;
 270   5                                              case 8:
 271   5                                                      Write_1302(0x80,0x00);
 272   5                                                      flag=0;
 273   5                                                      p=&curtime[0];
 274   5                                                      convert(p);
 275   5                                                      p=&curtime[0];
 276   5                                                      SetTime(p);     
 277   5                                              break;
 278   5                                              default:
 279   5                                                              break;
 280   5                                      }
 281   4                              }
 282   3                              Display();
 283   3                      }
 284   2              }
 285   1      }
 286          
 287          void main()
 288          {
 289   1              unsigned char  *p;
 290   1              unsigned char  settime[7]={0,0,0,0,0,0,0};
 291   1      
 292   1              P0=0xFF;
 293   1              P1=0xFE;
 294   1              p=&settime[0];
 295   1              convert(p);
 296   1              p=&settime[0];
 297   1              SetTime(p);     
 298   1              do{
 299   2                      GetTime();
 300   2                      Display();
 301   2                      Keyscan();
 302   2              }while(1);
 303   1      }
C51 COMPILER V7.06   DS1302BETA0                                                           09/06/2008 18:49:08 PAGE 6   



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


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

⌨️ 快捷键说明

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