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

📄 keyscan.lst

📁 通过C语言控制数码管动态扫描显示
💻 LST
字号:
C51 COMPILER V7.50   KEYSCAN                                                               04/05/2009 01:09:53 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE KEYSCAN
OBJECT MODULE PLACED IN keyscan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE keyscan.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #define uchar unsigned char
   3          #define uint  unsigned int
   4          
   5          uchar code dutable[]={    //段选表
   6          0xc0,0xf9,0xa4,0xb0,0x99,
   7          0x92,0x82,0xf8,0x80,0x90,
   8          0x88,0x83,0xc6,0xa1,0x86,0xbf}; 
   9          //uchar code wetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xfd};    //位选表
  10          uchar code wetable[]={0xfe,0xfd,0xfb,0xf7};    //位选表
  11          
  12          uchar Time_num;
  13          uint fen,miao;
  14          uint Set_key_num;         //设置按钮的按下次数
  15          sbit Set_key=P1^5;   //设置按钮
  16          sbit Inc_key=P1^6;   //增1按钮
  17          sbit Dec_key=P1^7;   //减1按钮
  18          
  19          uchar num,temp;
  20          uchar keyscan();
  21          
  22          void delay(uchar z)
  23          {
  24   1              uchar x,y;
  25   1              for(x=110;x>0;x--)
  26   1                      for(y=z;y>0;y--);
  27   1      }
  28          
  29          ////////////////////
  30          //  数码管显示函数
  31          void display(uint ifen,uint imiao)
  32          {
  33   1              uint shi_fen,ge_fen,shi_miao,ge_miao;
  34   1      
  35   1              shi_fen = ifen/10;
  36   1              ge_fen = ifen%10;
  37   1              shi_miao = imiao/10;
  38   1              ge_miao = imiao%10;
  39   1      
  40   1              P2=wetable[0];
  41   1              P0=dutable[shi_fen];
  42   1              delay(1);
  43   1              
  44   1              P2=wetable[1];
  45   1              P0=dutable[ge_fen];
  46   1              delay(1);
  47   1              
  48   1              P2=wetable[2];
  49   1              P0=dutable[shi_miao];
  50   1              delay(1);
  51   1      
  52   1              P2=wetable[3];
  53   1              P0=dutable[ge_miao];
  54   1              delay(1);       
  55   1      }
C51 COMPILER V7.50   KEYSCAN                                                               04/05/2009 01:09:53 PAGE 2   

  56          
  57          
  58          void init()
  59          {
  60   1              P2 = 0xff;
  61   1              Time_num=0;
  62   1      
  63   1              fen = 12;
  64   1              miao = 02;
  65   1      
  66   1              TMOD=0X01;
  67   1              TH0=(65536-50000)/256;
  68   1              TL0=(65536-50000)%256;
  69   1              EA=1;
  70   1              ET0=1;
  71   1              TR0=0;  
  72   1      
  73   1              
  74   1      }
  75          
  76          
  77          void main()
  78          {
  79   1              init();
  80   1              while(1)
  81   1              {
  82   2                      ////////////////////
  83   2                      //倒计时处理
  84   2                      if(Time_num == 20)
  85   2                      {
  86   3                              Time_num = 0;
  87   3                              if(fen==0)
  88   3                              {
  89   4                                      if(miao==0)
  90   4                                              ;       /////////////////////////
  91   4                              }
  92   3                              miao--; 
  93   3                              if(miao==-1)
  94   3                              {
  95   4                                      miao=59;
  96   4                                      fen--;
  97   4                              }
  98   3                                      
  99   3                      }
 100   2      
 101   2                      keyscan();
 102   2      
 103   2                      ////////////////////
 104   2                      //  "设置"键按下
 105   2                      if(num==1)
 106   2                      {
 107   3                                      TR0=0; 
 108   3                                      if(Set_key_num>=3)   //按了3次
 109   3                                      {
 110   4                                              Set_key_num = 0;
 111   4                                              TR0=1;//开始倒计时      
 112   4                                      }
 113   3                                      Set_key_num++;       //次数加
 114   3                      }
 115   2              
 116   2                      ////////////////////
 117   2                      //  "增加"键按下
C51 COMPILER V7.50   KEYSCAN                                                               04/05/2009 01:09:53 PAGE 3   

 118   2                      if(num==2)              
 119   2                      {   
 120   3                              if(Set_key==1)  //按了1次,调分钟
 121   3                              {
 122   4                                      if(fen==60)
 123   4                                              fen=0;
 124   4                                      else
 125   4                                              fen++;
 126   4                              }
 127   3                              if(Set_key==2)
 128   3                              {
 129   4                                      if(miao==60)
 130   4                                              miao=0;
 131   4                                      else
 132   4                                              miao++;
 133   4                              }
 134   3                              
 135   3                      }   
 136   2                      ////////////////////
 137   2                      //  "降低"键按下
 138   2                      if(num==3)               
 139   2                      {   
 140   3                              if(Set_key==1)  //按了1次,调秒钟
 141   3                              { 
 142   4                                      if(fen==-1)
 143   4                                              fen=60;
 144   4                                      else
 145   4                                              fen--;                                                          
 146   4                              }
 147   3                              if(Set_key==2)
 148   3                              {
 149   4                                      if(miao==-1)
 150   4                                              miao=0;
 151   4                                      else
 152   4                                              miao--; 
 153   4                              }
 154   3                              
 155   3                      }
 156   2      
 157   2                      display(fen,miao);      
 158   2              }
 159   1              
 160   1      
 161   1      }
 162          
 163          
 164          void timer0() interrupt 1
 165          {
 166   1              TH0=(65536-50000)/256;
 167   1              TL0=(65536-50000)%256;
 168   1              Time_num++;     
 169   1      }
 170          
 171          
 172          uchar keyscan()   //4*4举证键盘接到P1口,进行以此循环判断
 173          {
 174   1          P1=0xfe;
 175   1          temp=P1;
 176   1          temp=temp&0xf0;
 177   1          while(temp!=0xf0)
 178   1              {
 179   2                      delay(5);
C51 COMPILER V7.50   KEYSCAN                                                               04/05/2009 01:09:53 PAGE 4   

 180   2                      temp=P1;
 181   2                      temp=temp&0xf0;
 182   2                      while(temp!=0xf0)
 183   2                      {
 184   3                              temp=P1;
 185   3                              switch(temp)
 186   3                              {
 187   4                              case 0xee:num=1;
 188   4                                      break;
 189   4                              case 0xde:num=2;
 190   4                                      break;
 191   4                              case 0xbe:num=3;
 192   4                                      break;
 193   4                              case 0x7e:num=4;
 194   4                                      break;
 195   4                              }
 196   3                              while(temp!=0xf0)
 197   3                              {
 198   4                                      temp=P1;
 199   4                                      temp=temp&0xf0;
 200   4                              }
 201   3                      }
 202   2              }
 203   1              
 204   1          P1=0xfd;
 205   1          temp=P1;
 206   1          temp=temp&0xf0;
 207   1          while(temp!=0xf0)
 208   1              {
 209   2                      delay(5);
 210   2                      temp=P1;
 211   2                      temp=temp&0xf0;
 212   2                      while(temp!=0xf0)
 213   2                      {
 214   3                              temp=P1;
 215   3                              switch(temp)
 216   3                              {
 217   4                              case 0xed:num=5;
 218   4                                      break;
 219   4                              case 0xdd:num=6;
 220   4                                      break;
 221   4                              case 0xbd:num=7;
 222   4                                      break;
 223   4                              case 0x7d:num=8;
 224   4                                      break;
 225   4                              }
 226   3                              while(temp!=0xf0)
 227   3                              {
 228   4                                      temp=P1;
 229   4                                      temp=temp&0xf0;
 230   4                              }
 231   3                      }
 232   2              }
 233   1              
 234   1              
 235   1          P1=0xfb;
 236   1          temp=P1;
 237   1          temp=temp&0xf0;
 238   1          while(temp!=0xf0)
 239   1              {
 240   2                      delay(5);
 241   2                      temp=P1;
C51 COMPILER V7.50   KEYSCAN                                                               04/05/2009 01:09:53 PAGE 5   

 242   2                      temp=temp&0xf0;
 243   2                      while(temp!=0xf0)
 244   2                      {
 245   3                              temp=P1;
 246   3                              switch(temp)
 247   3                              {
 248   4                              case 0xeb:num=9;
 249   4                                      break;
 250   4                              case 0xdb:num=10;
 251   4                                      break;
 252   4                              case 0xbb:num=11;
 253   4                                      break;
 254   4                              case 0x7b:num=12;
 255   4                                      break;
 256   4                              }
 257   3                              while(temp!=0xf0)
 258   3                              {
 259   4                                      temp=P1;
 260   4                                      temp=temp&0xf0;
 261   4                              }
 262   3                      }
 263   2              }
 264   1              
 265   1              
 266   1          P1=0xf7;
 267   1          temp=P1;
 268   1          temp=temp&0xf0;
 269   1          while(temp!=0xf0)
 270   1              {
 271   2                      delay(5);
 272   2                      temp=P1;
 273   2                      temp=temp&0xf0;
 274   2                      while(temp!=0xf0)
 275   2                      {
 276   3                              temp=P1;
 277   3                              switch(temp)
 278   3                              {
 279   4                              case 0xe7:num=13;
 280   4                                      break;
 281   4                              case 0xd7:num=14;
 282   4                                      break;
 283   4                              case 0xb7:num=15;
 284   4                                      break;
 285   4                              case 0x77:num=16;
 286   4                                      break;
 287   4                              }
 288   3                              while(temp!=0xf0)
 289   3                              {
 290   4                                      temp=P1;
 291   4                                      temp=temp&0xf0;
 292   4                              }
 293   3                      }
 294   2              }
 295   1              return num;     
 296   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    741    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.50   KEYSCAN                                                               04/05/2009 01:09:53 PAGE 6   

   DATA SIZE        =      9       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 + -