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

📄 ps-2.lst

📁 单片机键盘控制程序
💻 LST
字号:
C51 COMPILER V7.06   PS_2                                                                  05/14/2005 04:46:42 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE PS_2
OBJECT MODULE PLACED IN PS-2.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil20\C51\BIN\C51.EXE PS-2.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //-----------------------函数声明,变量定义--------------------------------------------------------
   2          #include <reg51.h>
   3          #define KEY P1
   4          unsigned char key_code;           //键值
   5          unsigned char key_buf[8];         //按键缓冲区
   6          unsigned char key_COUNT;          //按键计数器
   7          unsigned char COUNT_TI;           //定时中断计数
   8          
   9          //-----------------------变量声明---------------------------------------------------------------------
  10          void system_init(void );         //初始化,设置定时器0的工作方式,供主程序调用
  11          void TIMER0_SCANkey();           //定时器0中断处理函数
  12          bit judge_hitkey();              //判断是否有键按下,有返回1,没有返回0
  13          unsigned char scan_key();             //扫描键盘,返回键值(高四位代表行,低四位代表列)
  14          void key_manage(unsigned char keycode); //按键处理
  15          //...........每个按键对应一个处理程序
  16          //--------------------------------------------------------------------------------------------------
  17          // 函数名称: scan_key
  18          // 函数功能: 扫描键盘,返回键值(高四位代表行,低四位代表列)
  19          //            无键按下返回0
  20          //--------------------------------------------------------------------------------------------------
  21          unsigned char scan_key()              //扫描键盘,返回键值(高四位代表行,低四位代表列)
  22            {
  23   1         unsigned char scancode,keycode,keycode_line,keycode_row;
  24   1         scancode=0xF0;                      //列置低,行置高
  25   1         KEY=scancode;                       //输入扫描码,扫描行
  26   1         keycode_line=KEY;
  27   1         scancode=0xF0;                        //列置高,行置低
  28   1         KEY=scancode;                       //输入扫描码,扫描列
  29   1         keycode_row=KEY;
  30   1         keycode=(((keycode_line<<4)&0xF0)|(keycode_row&0x0F));
  31   1         return(keycode);
  32   1         }
  33          //--------------------------------------------------------------------------------------------------
  34          // 函数名称: Timer0_init()
  35          // 函数功能: 初始化设置
  36          //            设定INT0的工作方式
  37          //--------------------------------------------------------------------------------------------------
  38          void Timer0_init(void )  
  39                       {
  40   1                    TMOD=0x20; //定时器0工作在方式2的定时模式
  41   1                    ET0=1;     //定时器0中断允许
  42   1                    TH0=0;
  43   1                    TL0=0;
  44   1                    TR0=1;     //定时器0开始计数
  45   1                    EA=1;      //系统中断允许
  46   1                    }
  47          //--------------------------------------------------------------------------------------------------
  48          // 函数名称: TIMER0_intrupt
  49          // 函数功能: 定时器0中断处理程序
  50          //--------------------------------------------------------------------------------------------------
  51          void TIMER0_SCANkey() interrupt 1 using 1
  52                        {
  53   1                     EA=0;                        //系统中断禁止
  54   1                                 if((++COUNT_TI)%30==0)
  55   1                                 {
C51 COMPILER V7.06   PS_2                                                                  05/14/2005 04:46:42 PAGE 2   

  56   2                                 switch(COUNT_TI/30)
  57   2                                 {
  58   3                                  case 1:if(scan_key()==0) 
  59   3                                          COUNT_TI=0;          //无键按下,计数值归零
  60   3                                                 break;
  61   3                                  case 2:break;
  62   3                                  case 3:if(scan_key()==0)
  63   3                                         COUNT_TI=0;           //无键按下,计数值归零,上次按键未扰动
  64   3                                                 else 
  65   3                                                 key_code=scan_key();  //又有效建,获取键值
  66   3                                                break;
  67   3                              default:if(scan_key()==0)    //等待按键释放
  68   3                                         key_manage(key_code);  //有一个有效按键,调用按键处理程序
  69   3                                         }
  70   2                                }
  71   1                      EA=1;
  72   1            }
  73          void key_manage(unsigned char keycode)
  74                {
  75   1            unsigned char i;
  76   1                for(i=7;i>=0;i--)
  77   1                {
  78   2                 key_buf[i]=key_buf[i-1];       //缓冲区内数据后移1位
  79   2                }
  80   1                key_buf[0]= keycode;            //将键值送入缓冲区
  81   1            key_COUNT++;                   //按键计数器加一
  82   1                }


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