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

📄 key4x4.lst

📁 一个很好的按键扫描程序
💻 LST
字号:
C51 COMPILER V7.06   KEY4X4                                                                12/07/2007 01:02:52 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE KEY4X4
OBJECT MODULE PLACED IN key4X4.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key4X4.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          
   3          sfr P4=0xe8;
   4          sbit P42=P4^2;
   5          sbit P43=P4^3;
   6          
   7          #define DELAYTIME  40
   8          
   9          sbit a=P0^0;
  10          sbit b=P0^1;
  11          sbit c=P0^2;
  12          sbit d=P0^3;
  13          
  14          char test[4]={0x7f,0xbf,0xdf,0xef};
  15          
  16          void delay(unsigned long time)
  17          {
  18   1       while(time--);
  19   1      }
  20          
  21          unsigned char code code_table[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; 
  22          #define WEISHU 8     //修改该处可以做到不同位数的动态显示,本程序可以做到最多8个
  23          
  24          /*************************
  25          硬件描述
  26          **************************/
  27          #define WEI_LE P43 
  28          #define DUAN_LE P42
  29          /*************************
  30          全局变量
  31          **************************/
  32          unsigned char xdata DISP[8];
  33          
  34          
  35          /****************************************************************
  36          * 将int型转换为4位BCD码
  37          ****************************************************************/
  38          void bianhuan(unsigned long x)//
  39          {
  40   1       unsigned long temp=x;
  41   1       DISP[0]=code_table[temp/10000000];temp=x%10000000;
  42   1       DISP[1]=code_table[temp/1000000] ;temp=x%1000000 ;
  43   1       DISP[2]=code_table[temp/100000]  ;temp=x%100000  ;
  44   1       DISP[3]=code_table[temp/10000]   ;temp=x%10000   ;
  45   1       DISP[4]=code_table[temp/1000]    ;temp=x%1000    ;
  46   1       DISP[5]=code_table[temp/100]     ;temp=x%100     ;
  47   1       DISP[6]=code_table[temp/10]      ;temp=x%10      ;
  48   1       DISP[7]=code_table[temp/1]       ;temp=x%1       ;
  49   1      }
  50          
  51          /*************************
  52          Timer 0 定时中断处理
  53          **************************/ //timer init
  54          void initTimer(void)
  55          {
C51 COMPILER V7.06   KEY4X4                                                                12/07/2007 01:02:52 PAGE 2   

  56   1       TMOD=0x01;
  57   1       TH0=0xef;
  58   1       TL0=0x80;
  59   1       TR0=1;
  60   1       ET0=1;
  61   1       EA=1;
  62   1      } //timer0/counter0 interrupt
  63          
  64          void timer0(void) interrupt 1
  65          {
  66   1       static unsigned char wei=0;
  67   1       unsigned char weixuan=0x80;
  68   1       TH0=0xef;
  69   1       TL0=0x80;
  70   1       P1=DISP[wei];
  71   1       DUAN_LE=1;
  72   1       DUAN_LE=0;
  73   1       P1=(~(weixuan>>wei));
  74   1       WEI_LE=1;
  75   1       WEI_LE=0;
  76   1       wei++;
  77   1       if(wei>=WEISHU)
  78   1       wei=0;
  79   1      } 
  80          
  81          
  82          void LED_Disp(unsigned long dat)
  83          {
  84   1       WEI_LE=0;
  85   1       DUAN_LE=0;//锁存复位
  86   1       EA=0;
  87   1       bianhuan(dat);
  88   1       EA=1;
  89   1      }
  90          
  91          void main()
  92          {
  93   1       int i=0;
  94   1      
  95   1       P0=0xff;
  96   1       delay(400);
  97   1       initTimer();
  98   1       LED_Disp(0);
  99   1       while(1)
 100   1       {
 101   2        P0=0xff;
 102   2        for(i=0;i<4;i++)
 103   2        {
 104   3         P0=0xff;
 105   3         P0=P0&test[i];
 106   3         delay(DELAYTIME);
 107   3         if(a!=1) 
 108   3           {
 109   4            delay(DELAYTIME);
 110   4            if(a!=1)
 111   4            {
 112   5             LED_Disp((3-i)*4+1);
 113   5            }
 114   4           }
 115   3         if(b!=1) 
 116   3           {
 117   4            delay(DELAYTIME);
C51 COMPILER V7.06   KEY4X4                                                                12/07/2007 01:02:52 PAGE 3   

 118   4            if(b!=1)
 119   4            {
 120   5             LED_Disp((3-i)*4+2);
 121   5            }
 122   4           }
 123   3         if(c!=1) 
 124   3           {
 125   4            delay(DELAYTIME);
 126   4            if(c!=1)
 127   4            {
 128   5             LED_Disp((3-i)*4+3);
 129   5            }
 130   4           }
 131   3         if(d!=1) 
 132   3           {
 133   4            delay(DELAYTIME);
 134   4            if(d!=1)
 135   4            {
 136   5             LED_Disp((3-i)*4+4);
 137   5            }
 138   4           }
 139   3       }
 140   2      }
 141   1      
 142   1      while(1);
 143   1      }
 144          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    868    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =     13      10
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -