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

📄 key.lst

📁 51单片机串口键盘程序
💻 LST
字号:
C51 COMPILER V7.50   KEY                                                                   09/13/2007 18:47:03 PAGE 1   


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

line level    source

   1          #include <stdio.h>
   2          #include "STC89C51RC.H"
   3          
   4          sbit  ACC_0 = ACC^0;
   5          sbit  ACC_1 = ACC^1;
   6          
   7          sbit  SPEAK = P3^6;
   8          
   9          unsigned char  UartStauts;
  10          unsigned char  SpeakOn;
  11          
  12          unsigned char code keynum[8][8]={
  13          
  14          /* A~Z*/
  15          0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,
  16          0x17,0x24,0x25,0x26,0x32,0x31,0x18,0x19,
  17          0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,
  18          0x15,0x2C,
  19          
  20          /* 0......9*/
  21          0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,
  22          /*F1..….f10*/
  23          0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,
  24          /* . ; + - /  */
  25          0x34,0x27,0x0D,0x0C,0x35,
  26          /* ↑↓←→空格 */
  27          0x1E,0x1F,0x20,0x21,0x22,
  28          /* Ctrl Alt Shift Esc Del */
  29          0x23,0x24,0x25,0x1E,0x1F,
  30          /* Insert BackSpace 回车 Pageup Pagedown  End */
  31          0x52,0x0E,0x1C,0x49,0x51,0x4F,
  32          
  33          
  34          }; //key1~key5,enter,right,left.
  35          
  36          unsigned char code keynum1[3]={0x01,0x02,0x03};
  37          
  38          unsigned char Key_flag;  //有键按下标志
  39          unsigned char Key_num;   //按下键盘值
  40          
  41          
  42          /******************************************************************************
  43          
  44          ******************************************************************************/
  45          void Delay()
  46          {
  47   1        unsigned int i;
  48   1        for(i=0;i<1000;i++){i=i;}
  49   1      }
  50          /******************************************************************************
  51          
  52          ******************************************************************************/
  53          void Delay20ms()
  54          {
  55   1        unsigned int i;
C51 COMPILER V7.50   KEY                                                                   09/13/2007 18:47:03 PAGE 2   

  56   1        for(i=0;i<500;i++){i=i;}
  57   1      }
  58          /******************************************************************************
  59          
  60          ******************************************************************************/
  61          void mcu_int()
  62          {
  63   1        SCON = 0x50; //串口方式1,允许接收
  64   1        TMOD = 0x20; //定时器1定时方式2
  65   1        TCON = 0x40; //设定时器1开始计数
  66   1        TH1 = 0xFC; //14.3184MHz 9600波特率
  67   1        TL1 = 0xFC;
  68   1        PS = 1;
  69   1      
  70   1        ES=1;                            //Enable serial
  71   1        EA=1;
  72   1      
  73   1        TI = 0;
  74   1        TR1 = 1; //启动定时器  
  75   1      }
  76          
  77          
  78          /******************************************************************************
  79          
  80          ******************************************************************************/
  81          void Char_send(unsigned char chr)
  82          {
  83   1      
  84   1          SBUF=chr;
  85   1          while(!TI);
  86   1              TI=0;
  87   1       
  88   1      }
  89          
  90          char Getdata(unsigned char num)
  91          {
  92   1         switch(num)
  93   1         {
  94   2           case 0x01 : return 0; break;
  95   2               case 0x02 : return 1; break;
  96   2               case 0x04 : return 2; break;
  97   2               case 0x08 : return 3; break;
  98   2               case 0x10 : return 4; break;
  99   2               case 0x20 : return 5; break;
 100   2               case 0x40 : return 6; break;
 101   2               case 0x80 : return 7; break;
 102   2      
 103   2         }
 104   1      }
 105          /******************************************************************************
 106          
 107          ******************************************************************************/
 108          void Key_scan()
 109          {
 110   1       unsigned char temp,i=0;
 111   1       unsigned char line,col,s1,s2;
 112   1        P2 = 0;
 113   1        if((P0 != 0xff)||((P1&0x1c)!=0x1c))
 114   1        { 
 115   2          if(SpeakOn == 1)
 116   2            SPEAK = 1;
 117   2          Delay20ms();
C51 COMPILER V7.50   KEY                                                                   09/13/2007 18:47:03 PAGE 3   

 118   2              
 119   2          if(P0 != 0xff)
 120   2               {
 121   3                  Key_flag=1; 
 122   3                      
 123   3                  line = 0xfe;
 124   3                        for(i=0;i<8;i++)
 125   3                          {
 126   4                             P2 = line;
 127   4                             if(P0 != 0xff)
 128   4                               {
 129   5                                          col = P0;
 130   5                                          s1=Getdata(~line);
 131   5                                              s2=Getdata(~col);                               
 132   5                                              Key_num = keynum[s1][s2];
 133   5                           break;
 134   5                                }else 
 135   4                                 line=(line<<1)|0x01;
 136   4                              
 137   4                      } 
 138   3      
 139   3                       while(P0 != 0xff);             
 140   3               }
 141   2          
 142   2           if ((P1&0x1c)!=0x1c)
 143   2               {
 144   3                 Key_flag=1; 
 145   3                  temp = P1&0x1c ;
 146   3                      switch(temp)
 147   3                   {  
 148   4      
 149   4                              case 0x0c: Key_num=keynum1[0];  //enter
 150   4                              break;
 151   4      
 152   4                   case 0x14: Key_num=keynum1[1];  //right
 153   4                              break;
 154   4      
 155   4                               case  0x18: Key_num=keynum1[2];  //left
 156   4                              break;
 157   4      
 158   4                              default :
 159   4                              break;
 160   4                       }
 161   3               }
 162   2      
 163   2         }
 164   1         else SPEAK = 0;
 165   1      }
 166          
 167          /******************************************************************************
 168          
 169          ******************************************************************************/
 170          void Key_send()
 171          {
 172   1         while(P1!=0xff);
 173   1         Char_send(0xeb); //包头
 174   1         Delay();
 175   1         Char_send(0x67);
 176   1         Delay();
 177   1         Char_send(Key_num);
 178   1         Delay();
 179   1         Char_send(0xfb);      
C51 COMPILER V7.50   KEY                                                                   09/13/2007 18:47:03 PAGE 4   

 180   1      }
 181          
 182          
 183          
 184          
 185          /*******************UART 中断处理程序*****************************/
 186          void serial0_process(void)  interrupt  4 using 1
 187          {
 188   1       unsigned char  temp;  
 189   1       if(RI)
 190   1       {
 191   2        EA=0;RI=0;
 192   2        
 193   2        switch(UartStauts)
 194   2         {
 195   3          case  0 :       
 196   3                              if(SBUF != 0xeb)UartStauts=0x00;
 197   3                              else UartStauts=0x01;
 198   3                                  break;
 199   3      
 200   3              case  1 :       
 201   3                              temp = SBUF;
 202   3                              if(temp == 0x66)
 203   3                          
 204   3                  UartStauts=0X02;
 205   3                                  break;
 206   3      
 207   3              case  2 :       
 208   3                     temp = SBUF;
 209   3                         if (temp == 1) 
 210   3                         SpeakOn = 1;
 211   3                                         if (temp == 0) 
 212   3                         SpeakOn = 0;
 213   3                         UartStauts=0x03;               
 214   3                        
 215   3                                  break;
 216   3                                              
 217   3               case  3 :       
 218   3                     temp = SBUF;
 219   3                         UartStauts=0x00;      
 220   3                        
 221   3                              break;
 222   3         }
 223   2        
 224   2        EA=1;
 225   2        }
 226   1      }
 227          
 228          
 229          /******************************************************************************
 230          
 231          ******************************************************************************/
 232          
 233          void main(void)
 234          {
 235   1       SPEAK = 0;
 236   1        mcu_int();
 237   1      
 238   1        while(1)
 239   1        { 
 240   2         
 241   2          Key_scan();
C51 COMPILER V7.50   KEY                                                                   09/13/2007 18:47:03 PAGE 5   

 242   2          if(Key_flag == 1)   
 243   2              {
 244   3                Key_flag = 0; 
 245   3          
 246   3                Key_send();
 247   3                
 248   3              }
 249   2        }
 250   1      }


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