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

📄 keyboard.lst

📁 麦迪工作室51单片机开发板键盘的驱动代码。设计了抬键监听机制
💻 LST
字号:
C51 COMPILER V7.00  KEYBOARD                                                               12/02/2008 21:28:29 PAGE 1   


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

stmt level    source

   1          #include "ATMEL89X51.H"
   2          #define LED_SET P2_6                            //使能LED灯端口
   3          #define KEY_data P1                             //设定P1口为按键输出端口
   4          #define LED_data P0                             //设定P0口为数据输入端口
   5          #define ON 0                                            //设0为开
   6          #define OFF 1                                           //设1为关
   7          unsigned char key_velual;
   8          unsigned char key_flag=0;
   9          
  10          void delay(unsigned char temp)//延时函数
  11          {       
  12   1              unsigned char i;
  13   1         for(i=0;i<temp;i++);
  14   1      }
  15          
  16          void Read_key_code(void)
  17          {
  18   1              KEY_data |= 0x0f;               //把所有的按键端口置1,等待按键按下
  19   1              if(key_flag==0)
  20   1              {
  21   2                      if((KEY_data & 0x0f) != 0x0f)                   //防抖动
  22   2                      {
  23   3                              KEY_data |= 0x0f;
  24   3                              delay(10);
  25   3                              if((KEY_data&0x0f) != 0x0f)             //判断是否有键按下
  26   3                              {
  27   4                                      key_velual = KEY_data & 0x0f;//读键值
  28   4                                      key_flag=1;                     //按键标志位置1
  29   4                              }
  30   3                      }
  31   2               }
  32   1                      else if(key_flag!=0)
  33   1                      {       
  34   2                              key_velual=0;           //键值清零
  35   2                              if((KEY_data & 0x0f) == 0x0f)
  36   2                                      key_flag=0;             //清按键标志位
  37   2                      }               
  38   1      }
  39          
  40          void Key_set(unsigned char sw)                  //按键判断程序
  41          {
  42   1              switch(sw)
  43   1         {
  44   2                      case 0x07:      LED_data = 0x08;        break;  //S5被按下,对应的D18亮
  45   2                      case 0x0b:      LED_data = 0x04;        break;  //S4被按下,对应的D17亮
  46   2                      case 0x0d:      LED_data = 0x02;        break;  //S3被按下,对应的D16亮
  47   2                      case 0x0e:      LED_data = 0x01;        break;  //S2被按下,对应的D15亮
  48   2                      default:                                                                break;
  49   2              }
  50   1      }
  51          
  52          void time_interrupt_init(void)                          //定时器初始化,50mS
  53          {
  54   1              TMOD = 0x01;
  55   1              TH0 = -(50000/256);
C51 COMPILER V7.00  KEYBOARD                                                               12/02/2008 21:28:29 PAGE 2   

  56   1              TL0 = -(50000%256);
  57   1              ET0     =       1;
  58   1              TR0     =       1;
  59   1              EA = 1;
  60   1      }
  61          
  62          void time0(void)        interrupt 1                             //设定定时器按键扫描,50mS
  63          {
  64   1              TH0 = -(50000/256);
  65   1              TL0 = -(50000%256);
  66   1              Read_key_code();                                //读键值
  67   1              Key_set(key_velual);                    //判断键值
  68   1      }  
  69          
  70          main()
  71          {       
  72   1              LED_SET = ON;           //选通LED灯端口
  73   1              LED_data = 0;   
  74   1              time_interrupt_init();
  75   1              while(1)
  76   1              {
  77   2                      Key_set(key_velual);
  78   2              }
  79   1      }


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