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

📄 main.lst

📁 基于51系列单片机的一个移位显示矩阵键盘源码
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  07/30/2008 23:55:01 PAGE 1   


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

line level    source

   1          #include <reg51.h>
   2          #include <absacc.h>
   3          //code ledyang[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
   4          //                  0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};     //0~9,A~F
   5          unsigned char code seg_7[]={//定义数码管字型数据
   6              0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,  //0123456789
   7              0x77,0x7C,0x39,0x5E,0x79,0x71,  //AbCdEF
   8              0x40,   //-
   9              0x00    //空白
  10          };
  11          unsigned char code choose[]={0xfe,0xfd,0xfb,0xf7}; //位选
  12          unsigned char data counter[]={0,0,0,0};
  13          unsigned char data buffer[]={0,0,0,0};
  14          unsigned char k, c=0;
  15          unsigned int num=0,KT=0;         
  16          void delay(unsigned char m)
  17             {
  18   1              unsigned char i,j;
  19   1                        for(i=0;i<m;i++)
  20   1                          for(j=0;j<120;j++);
  21   1                }
  22          void getch()
  23          {
  24   1               unsigned char X,Y,Z,cc;
  25   1                P2=0xff;
  26   1                P2=0x0f; //行置1
  27   1                if(P2!=0x0f) //可能有键按下
  28   1                {
  29   2                 delay(20);
  30   2                 if(P2!=0x0f) //确实有键按下
  31   2                  {
  32   3                   X=P2;     //保存P2的值
  33   3                       P2=0xf0;       //列置1
  34   3                       Y=P2;
  35   3                       Z=X|Y;  //取键盘值
  36   3                       c++;           //标志位
  37   3                       //if(c==17) c=0;
  38   3                       if(c==9) c=0;
  39   3                       switch(Z)
  40   3                        {
  41   4                          case 0x7e: k=0;break;
  42   4                          case 0x7d: k=1;break;
  43   4                          case 0x7b: k=2;break;
  44   4                          case 0x77: k=3;break;
  45   4                          case 0xbe: k=4;break;
  46   4                          case 0xbd: k=5;break;
  47   4                          case 0xbb: k=6;break;
  48   4                          case 0xb7: k=7;break;
  49   4                          case 0xde: k=8;break;
  50   4                          case 0xdd: k=9;break;
  51   4                          case 0xdb: KT=10;break;
  52   4                          case 0xd7: KT=11;break;
  53   4                          case 0xee: KT=12;break;
  54   4                          case 0xed: KT=13;break;
  55   4                          case 0xeb: KT=14;break;
C51 COMPILER V7.50   MAIN                                                                  07/30/2008 23:55:01 PAGE 2   

  56   4                          case 0xe7: KT=15;break;                                              
  57   4                         }
  58   3      
  59   3                       for(cc=c;cc-1>0;cc--)
  60   3                         counter[cc-1]=counter[cc-2];
  61   3                         counter[0]=k; 
  62   3      
  63   3                       while(P2!=0xf0);//检测案件是否弹起
  64   3                  }
  65   2          }
  66   1       }
  67          
  68          void display_number()
  69             {
  70   1          unsigned char i;
  71   1          for(i=0;i<4;i++)
  72   1           {                                          
  73   2           P0=seg_7[counter[i]];
  74   2               P1=choose[i];
  75   2               delay(1);
  76   2               P1=0xff;
  77   2           }
  78   1      }       
  79          
  80          void display()
  81          {
  82   1       unsigned int i;
  83   1       num=counter[0]*1000+counter[1]*100+counter[2]*10+counter[3];
  84   1       buffer[0]=num/1000;   buffer[1]=num%1000/100;
  85   1       buffer[2]=num%100/10; buffer[3]=num%10;
  86   1       for(i=0;i<4;i++)
  87   1       { 
  88   2        num--;
  89   2        P0=seg_7[buffer[i]];
  90   2        P1=choose[i];
  91   2        delay(1);
  92   2        P1=0xff;
  93   2        
  94   2       }
  95   1      } 
  96             
  97          void main(void)
  98           {
  99   1         while(1)
 100   1          {   
 101   2              unsigned char c=0;
 102   2              P2=0xff;
 103   2              getch();
 104   2              display_number();
 105   2              if(KT>=10&&KT<=15) 
 106   2                goto loop;
 107   2            } 
 108   1                loop:
 109   1            while(1)
 110   1             {
 111   2              display();
 112   2             }        
 113   1      }
 114          


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.50   MAIN                                                                  07/30/2008 23:55:01 PAGE 3   

   CODE SIZE        =    491    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14       1
   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 + -