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

📄 clock.lst

📁 2010年新增TX-1C程序
💻 LST
字号:
C51 COMPILER V8.02   CLOCK                                                                 06/22/2010 09:13:31 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE clock.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //该例程为数码管显示可调钟表,用到TX-1C开发板中矩阵键盘的上三排按键。
   2          //若要更改时钟初始值(即时钟校准),可先按下矩阵键盘中的S16键(第三排第三列),此时时钟会暂停。
   3          //然后按S6---S15中的键修改矫正当前值,S6--S15分别先后对应数字0到9。
   4          //矫正完后,按下S17(第三排最后一个),时钟可继续工作。
   5          //注意晶振需为11.0592M。
   6          //若为其他数值晶振,请改变TH0与TL0参数值,否则计时会有很大误差 。
   7          
   8          #include<reg51.h>
   9          
  10          #define uchar unsigned char
  11          
  12          sbit dula=P2^6;
  13          sbit wela=P2^7;
  14          sbit beep=P2^3;
  15          unsigned char j,k,a1,a0,b1,b0,c1,c0,s,f,m,key=10,temp,qq;
  16          uchar shi20,shi10,fen20,fen10,miao20,miao10,new,ok=1,wei;
  17          unsigned int pp;
  18          unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  19                                  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  20          
  21          void delay(unsigned char i)
  22          {
  23   1        for(j=i;j>0;j--)
  24   1          for(k=125;k>0;k--);
  25   1      }
  26          void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1)
  27          {
  28   1         dula=0;
  29   1         P0=table[shi2];
  30   1         dula=1;
  31   1         dula=0;
  32   1         
  33   1         wela=0;
  34   1         P0=0xfe;
  35   1         wela=1;
  36   1         wela=0;
  37   1         delay(5);
  38   1         
  39   1         P0=table[shi1]|0x80;
  40   1         dula=1;
  41   1         dula=0;
  42   1         
  43   1         P0=0xfd;
  44   1         wela=1;
  45   1         wela=0;
  46   1         delay(5);
  47   1      
  48   1         P0=table[fen2];
  49   1         dula=1;
  50   1         dula=0;
  51   1         
  52   1         P0=0xfb;
  53   1         wela=1;
  54   1         wela=0;
  55   1         delay(5);
C51 COMPILER V8.02   CLOCK                                                                 06/22/2010 09:13:31 PAGE 2   

  56   1         
  57   1         P0=table[fen1]|0x80;
  58   1         dula=1;
  59   1         dula=0;
  60   1         
  61   1         P0=0xf7;
  62   1         wela=1;
  63   1         wela=0;
  64   1         delay(5);
  65   1         
  66   1         P0=table[miao2];
  67   1         dula=1;
  68   1         dula=0;
  69   1         
  70   1         P0=0xef;
  71   1         wela=1;
  72   1         wela=0;
  73   1         delay(5);
  74   1         
  75   1         P0=table[miao1];
  76   1         dula=1;
  77   1         dula=0;
  78   1         
  79   1         P0=0xdf;
  80   1         wela=1;
  81   1         wela=0;
  82   1         delay(5);
  83   1      }
  84          
  85          void keyscan0()
  86          {
  87   1          P3=0xfb;
  88   1          temp=P3;
  89   1          temp=temp&0xf0;
  90   1          if(temp!=0xf0)
  91   1          {
  92   2            delay(10);
  93   2            if(temp!=0xf0)
  94   2            {
  95   3              temp=P3;
  96   3              switch(temp)
  97   3              {
  98   4                case 0xbb:
  99   4                     ok=0;
 100   4                     break;
 101   4      
 102   4                case 0x7b:
 103   4                     ok=1;
 104   4                     break;
 105   4               }
 106   3            }
 107   2            } 
 108   1      }
 109          
 110          
 111          void keyscan()
 112          {
 113   1        {     
 114   2          P3=0xfe;
 115   2          temp=P3;
 116   2          temp=temp&0xf0;
 117   2          if(temp!=0xf0)
C51 COMPILER V8.02   CLOCK                                                                 06/22/2010 09:13:31 PAGE 3   

 118   2          {
 119   3            delay(10);
 120   3            if(temp!=0xf0)
 121   3            { 
 122   4              temp=P3;
 123   4              switch(temp)
 124   4              {
 125   5                case 0xee:
 126   5                     key=0;
 127   5                                 wei++;
 128   5                     break;
 129   5      
 130   5                case 0xde:
 131   5                     key=1;
 132   5                                 wei++;
 133   5                     break;
 134   5      
 135   5                case 0xbe:
 136   5                     key=2;
 137   5                                 wei++;
 138   5                     break;
 139   5      
 140   5                case 0x7e:
 141   5                     key=3;
 142   5                                 wei++;
 143   5                     break;
 144   5               }
 145   4               while(temp!=0xf0) 
 146   4              {
 147   5                 temp=P3;
 148   5                 temp=temp&0xf0;
 149   5                 beep=0;
 150   5               }
 151   4               beep=1;
 152   4            }
 153   3          }
 154   2          P3=0xfd;
 155   2          temp=P3;
 156   2          temp=temp&0xf0;
 157   2          if(temp!=0xf0)
 158   2          {
 159   3            delay(10);
 160   3            if(temp!=0xf0)
 161   3            {
 162   4              temp=P3;
 163   4              switch(temp)
 164   4              {
 165   5                case 0xed:
 166   5                     key=4;
 167   5                                 wei++;
 168   5                     break;
 169   5      
 170   5                case 0xdd:
 171   5                     key=5;
 172   5                                 wei++;
 173   5                     break;
 174   5      
 175   5                case 0xbd:
 176   5                     key=6;
 177   5                                 wei++;
 178   5                     break;
 179   5      
C51 COMPILER V8.02   CLOCK                                                                 06/22/2010 09:13:31 PAGE 4   

 180   5                case 0x7d:
 181   5                     key=7;
 182   5                                 wei++;
 183   5                     break;
 184   5               }
 185   4               while(temp!=0xf0)
 186   4               {
 187   5                 temp=P3;
 188   5                 temp=temp&0xf0;
 189   5                 beep=0;
 190   5               }
 191   4               beep=1;
 192   4            }
 193   3            }
 194   2          P3=0xfb;
 195   2          temp=P3;
 196   2          temp=temp&0xf0;
 197   2          if(temp!=0xf0)
 198   2          {
 199   3            delay(10);
 200   3            if(temp!=0xf0)
 201   3            {
 202   4              temp=P3;
 203   4              switch(temp)
 204   4              {
 205   5                case 0xeb:
 206   5                     key=8;
 207   5                                 wei++;
 208   5                     break;
 209   5      
 210   5                case 0xdb:
 211   5                     key=9;
 212   5                                 wei++;
 213   5                     break;
 214   5               }
 215   4              while(temp!=0xf0)
 216   4               {
 217   5                 temp=P3;
 218   5                 temp=temp&0xf0;
 219   5                 beep=0;
 220   5               }
 221   4               beep=1;
 222   4            }
 223   3            }
 224   2      }
 225   1      }
 226          
 227          void main()
 228          {
 229   1              TMOD=0x01;
 230   1      
 231   1              TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
 232   1              TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
 233   1              ET0=1;
 234   1              EA=1;
 235   1              
 236   1              while(1)
 237   1              {       keyscan0();
 238   2                      
 239   2                      if(ok==1)
 240   2                      {       TR0=1;
 241   3                              wei=0;
C51 COMPILER V8.02   CLOCK                                                                 06/22/2010 09:13:31 PAGE 5   

 242   3                      
 243   3                      if(pp==20)
 244   3                      {       pp=0;
 245   4                              m++;
 246   4                              if(m==60)
 247   4                              {
 248   5                                      m=0;
 249   5                                      f++;
 250   5                                      if(f==60)
 251   5                                      {
 252   6                                              f=0;
 253   6                                              s++;
 254   6                                              if(s==24)  //为24h一个循环,若要12h,只需在此改为12即可。
 255   6                                              {
 256   7                                                      s=0;
 257   7                                              }
 258   6                                      }
 259   5                              }
 260   4                      }
 261   3                      
 262   3                      a0=s%10;
 263   3                      a1=s/10;
 264   3                      b0=f%10;
 265   3                      b1=f/10;
 266   3                      c0=m%10;
 267   3                      c1=m/10;
 268   3                      display(a1,a0,b1,b0,c1,c0);
 269   3              }
 270   2              else
 271   2              {       TR0=0;
 272   3                      keyscan();
 273   3                      if(key!=10)
 274   3                      {
 275   4                      
 276   4                      switch(wei)
 277   4                      {
 278   5                              case 1: if(key<3)               //小时最高位为2
 279   5                                              a1=key;
 280   5                                              else
 281   5                                              wei--;
 282   5                                              break;
 283   5                              case 2: if(a1==1|a1==0)
 284   5                                              a0=key;
 285   5                                              else
 286   5                                              if(key<5)
 287   5                                              a0=key;            //当小时最高位为2时,低位最高为4
 288   5                                              break;
 289   5                              case 3: if(key<7)               //分钟最高位为6
 290   5                                              b1=key;
 291   5                                              else
 292   5                                              wei--;
 293   5                                              break;
 294   5                              case 4: b0=key; break;
 295   5                              case 5: if(key<7)               //秒最高位为6
 296   5                                              c1=key; 
 297   5                                              else
 298   5                                              wei--;
 299   5                                              break;
 300   5                              case 6: c0=key; break;
 301   5                      }
 302   4                      key=10;
 303   4                      }
C51 COMPILER V8.02   CLOCK                                                                 06/22/2010 09:13:31 PAGE 6   

 304   3                              m=c1*10+c0;
 305   3                              f=b1*10+b0;
 306   3                              s=a1*10+a0;
 307   3                      display(a1,a0,b1,b0,c1,c0);
 308   3              }       
 309   2              }
 310   1      }
 311          
 312          void time0() interrupt 1
 313          {       TH0=(65536-46080)/256;
 314   1              TL0=(65536-46080)%256;
 315   1              pp++;
 316   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    759    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25       6
   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 + -