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

📄 test.lst

📁 电话机的经典高效键盘扫描
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.15   TEST                                                                  10/28/2008 11:00:32 PAGE 1   


C51 COMPILER V8.15, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN TEST.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE TEST.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //#include <reg52.h>
   2          #include <intrins.h>
   3          #include <STC12.h>
   4          #define   uchar unsigned char   /*宏定义*/      
   5          #define   DIALNUM_LEN  20
   6          
   7          sbit P1_7=P1^7;
   8          sbit P1_6=P1^6;
   9          sbit P1_5=P1^5;
  10          sbit P1_4=P1^4;
  11          sbit P1_3=P1^3;
  12          sbit P1_2=P1^2;
  13          sbit P1_1=P1^1;
  14          sbit P1_0=P1^0; 
  15          
  16          sbit P2_1=P2^1;
  17          sbit P2_0=P2^0;
  18          sbit HOOK_OFF_IN=P2^4;
  19          sbit P2_6=P2^6;
  20          sbit FREE_HAND=P2^2;
  21          sbit PSTN_CIN=P2^3;
  22          sbit MAN_CIN=P2^7;
  23          sbit USB_CIN=P2^6;
  24          sbit KEYPAD_INT=P3^2;
  25          sbit FSK_R_DATA=P3^4;
  26          
  27          sbit P3_0=P3^0;
  28          sbit P3_1=P3^1;
  29          sbit P3_2=P3^2;
  30          sbit P3_3=P3^3;
  31          sbit P3_4=P3^4;
  32          sbit P3_5=P3^5;
  33          sbit P3_6=P3^6;
  34          sbit P3_7=P3^7;
  35          
  36                  uchar i = 0; 
  37                  bit  temp_0 = 0;
  38                  bit  temp_1 = 0;
  39                  bit  temp_2 = 0;
  40                  bit  temp_3 = 0;
  41                  bit  temp_4 = 0;
  42          
  43          
  44          char dialNum[DIALNUM_LEN];
  45          uchar  SumNum = 0;
  46          uchar index = 0;
  47          uchar ch;
  48          uchar record = 0;
  49          uchar temp;
  50          uchar GetKey;
  51          uchar key_test =0x00 ;
  52          void dial(uchar dialNum);
  53          void dial_all_num(void);
  54          void dial_dtmf(void);
  55          void send_char_com(uchar ch);
C51 COMPILER V8.15   TEST                                                                  10/28/2008 11:00:32 PAGE 2   

  56          void delay(unsigned int n);     
  57          void dial_pause(void);
  58          uchar scan(void);
  59          
  60          
  61          
  62          void init_serialcomm()
  63          {
  64   1              SCON=0x50;      //SCON:serial mode 1,8-bit UART,enable ucvr       设置成串口1方式
  65   1              TMOD|=0x20;     //TMOD:timer 1,mode 2,8-bit reload 波特率发生器T1工作在模式2上
  66   1      
  67   1      //      SMOD=0
  68   1              IP=0X10;                //串口优先级为1
  69   1          PCON|=0x00;   //    波特率翻倍设置
  70   1              TH1 = 0xFC;  //3.579545 external osc
  71   1              IE|=0x90;       //Enable Serial Interrupt
  72   1              TR1=1;          //timer 1 run
  73   1              
  74   1      }
  75          void init_interruptcomm()
  76          {
  77   1              IT0 = 0; //      INI0 低电平有效
  78   1              IT1 = 0; //      INI1 低电平有效
  79   1              IE|=0x81; //Enable INI0 Interrup
  80   1              IE|=0x84; //Enable INI1 Interrup
  81   1      }
  82          
  83          
  84          //INI0中断
  85          void Int0_Routine(void) interrupt 0
  86          {
  87   1              if(IE0 == 1) {    //INT0中断请求标志位,进入中断执行时,硬件清0
  88   2                      EX0 = 0;           //关闭中断
  89   2                      delay(500);       //1000
  90   2                      GetKey = scan();
  91   2                      delay(500);                //1000
  92   2                      if(GetKey == scan())
  93   2                      {                
  94   3                              if(ch != 0X00 )
  95   3                              {
  96   4                              send_char_com(GetKey);
  97   4                              } 
  98   3                      }
  99   2                      delay(50000);   //must delay 1500000,防止按一次键两次进入中断                          
 100   2                      EX0 = 1;                  //打开中断
 101   2                      //delay(1000);//add just now              
 102   2          }
 103   1      }
 104          
 105          
 106          
 107          //向串口发送一个字符
 108          void send_char_com(uchar ch)
 109          {       
 110   1              SBUF = ch;
 111   1          while(TI==0);
 112   1              TI=0;
 113   1      }
 114          
 115          //向串口发送一个字符串
 116          
 117          void send_char_string(void)
C51 COMPILER V8.15   TEST                                                                  10/28/2008 11:00:32 PAGE 3   

 118          {       
 119   1              uchar i;
 120   1              for(i=0;i<SumNum;i++)
 121   1              {
 122   2                      SBUF = dialNum[i];
 123   2                  while(TI==0);
 124   2                      TI=0;
 125   2              }
 126   1      
 127   1      }
 128          
 129          //串口接收中断 
 130           
 131            
 132          void serial() interrupt 4 using 3               //字符串!ASCD1234$以'!'开始,以'$'结束
 133          {
 134   1              
 135   1              if(RI)
 136   1              { 
 137   2                      RI=0;
 138   2                      ch = SBUF;
 139   2                      
 140   2                      if(ch=='$') 
 141   2                 {
 142   3                              record=1;
 143   3                              SumNum = index;
 144   3                              index=0;
 145   3                      }
 146   2                      else if(ch=='!') 
 147   2                      { 
 148   3                              record = 0;
 149   3                              index=0;
 150   3                              SumNum =0;
 151   3                      }
 152   2                      else 
 153   2                      { 
 154   3                              record = 0;
 155   3                              dialNum[index++] = ch;
 156   3      
 157   3                      }       
 158   2                      if(record)
 159   2                      {
 160   3                      //      send_char_string();
 161   3                              dial_all_num(); 
 162   3                              SumNum = 0 ;
 163   3                              record = 0;     
 164   3                      }
 165   2          }
 166   1      
 167   1      
 168   1      
 169   1      } 
 170                  
 171          
 172          void uart_test(void)
 173          { 
 174   1              if(record)  
 175   1              {
 176   2                              //send_char_string();
 177   2      
 178   2                              //dial_all_num();       
 179   2                      //      send_char_string();
C51 COMPILER V8.15   TEST                                                                  10/28/2008 11:00:32 PAGE 4   

 180   2      
 181   2      
 182   2                              
 183   2                      SumNum = 0 ;
 184   2                      record = 0;                     
 185   2              }
 186   1       }                                                                                                                                                                                              
 187                                                                                                                                                                                                  
 188          
 189          
 190          void delay(unsigned int n)
 191          {
 192   1          unsigned i;
 193   1              i=0;
 194   1          while(i<n)i++;
 195   1      }
 196          //各行键盘扫描
 197          void port(p1m0)
 198          {   
 199   1              uchar chTest; 
 200   1          P1=0;
 201   1              P1M0=p1m0;
 202   1              P1M1=0X00;
 203   1          switch(p1m0)
 204   1              {
 205   2                       case 0X7C:{P1_1=1;     delay(100); ch=P1;         //500
 206   3                                  switch(ch){
 207   4                                                         case 0x42: chTest = 'U';break;
 208   4                                                         case 0x22: chTest = '1';break;
 209   4                                                         case 0x12: chTest = '5';break;
 210   4                                                         case 0x0A: chTest = '8';break;
 211   4                                                         case 0x06: chTest = '0';break;
 212   4                                                         default:break;       
 213   4                                                            } 
 214   3                                               break; }
 215   2               case 0X7A:{ P1_2=1;delay(100); ch=P1;
 216   3                                              switch(ch){
 217   4                                                         case 0x44: chTest = 'V';break;
 218   4                                                         case 0x24: chTest = '2';break;
 219   4                                                         case 0x14: chTest = '6';break;
 220   4                                                         case 0x0C: chTest = '9';break;
 221   4                                                         case 0x06: chTest = 'F';break;
 222   4                                                         default:break;       
 223   4                                                            }  
 224   3                                               break; }
 225   2                       case 0X76:{ P1_3=1;delay(100); ch=P1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -