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

📄 ps2.lst

📁 智能家居系统。。。包括PS2键盘
💻 LST
字号:
C51 COMPILER V7.06   PS2                                                                   05/18/2008 14:29:18 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE PS2
OBJECT MODULE PLACED IN PS2.OBJ
COMPILER INVOKED BY: E:\My Electronic\Tools\Design tools\keil7.06\C51\BIN\C51.EXE PS2.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <REG52.H>
   2          #include "intrins.h"
   3          //#include "ku.h" //按键通码与ascii对照表
   4          #include <string.h>
   5          
   6          #define uchar unsigned char
   7          
   8          sbit sda= P2^5; //键盘数据线
   9          
  10          extern uchar inbuf1[];
  11          //extern uchar PS2_Busy;
  12          extern uchar PS2_ok;
  13          
  14          uchar PS2_ok;
  15          //uchar PS2_Busy;
  16          uchar Ps2_Data=0x00;                            //最终按键值(第二套键扫码)
  17          uchar PS2_Dat_Temp=0x00;                        //接收键盘数据临时变量
  18          uchar count=0,num;//shu;                                //控制标志
  19          Ps2_Receice_Data[2]={0x00,0x00};        //临时接收按键值(第二套键扫码)
  20          
  21          
  22          /*******LCD函数调用声明******/
  23          void sent_string(uchar x,uchar y,uchar *sent_data,uchar length);
  24          void LCD_clr_pic();
  25          
  26          void init_PS2(void)
  27          {
  28   1              EX0=1;
  29   1              IT0=1;
  30   1              EA=1;
  31   1      
  32   1              //shu=0;
  33   1              PS2_Dat_Temp=0x00;
  34   1              num=9; 
  35   1              count=0;
  36   1              PS2_ok=0;   
  37   1      }
  38          
  39          
  40          //外部中断0 用来接收键盘发来的数据
  41          void zhongduan() interrupt 0 
  42          {
  43   1              EX1=0;                          //关外部中断0,防止红外中断同时发生,串口优先
  44   1              PS2_Dat_Temp>>=1;   //接收数据 低->高
  45   1              if(sda) 
  46   1              {
  47   2                      PS2_Dat_Temp|=0x80;
  48   2              }
  49   1              
  50   1              count++;
  51   1                      if(count==num)
  52   1                      {
  53   2                              if(count==9)
  54   2                              {
  55   3                                      if((PS2_Dat_Temp==0xE0)||(PS2_Dat_Temp==0xF0))          //忽略0xE0和0xF0
C51 COMPILER V7.06   PS2                                                                   05/18/2008 14:29:18 PAGE 2   

  56   3                                      {       
  57   4                                              count=0;                                                                                //重新记录第一个数据
  58   4                                              PS2_Dat_Temp=0x00;
  59   4                                      }
  60   3                                      else //if(                                                                              
  61   3                                      {
  62   4                                              Ps2_Receice_Data[0]=PS2_Dat_Temp;                       //保存第一个数据
  63   4                                              PS2_Dat_Temp=0x00;
  64   4                                              num=20;                                                                                 //使中断可以继续中断11次
  65   4                                              //shu++;
  66   4                                              //Ps2_Data=Ps2_Receice_Data[0];
  67   4                                      }
  68   3                              }
  69   2                              if(count==20)
  70   2                              {
  71   3                                      if((PS2_Dat_Temp==0xE0)||(PS2_Dat_Temp==0xF0))          //忽略0xE0和0xF0
  72   3                                      {       
  73   4                                              count=9;                                                                                //重新记录第二个数据
  74   4                                              PS2_Dat_Temp=0x00;
  75   4                                      }
  76   3                                      else                                                                            
  77   3                                      {                               
  78   4                                              Ps2_Receice_Data[1]=PS2_Dat_Temp;                       //保存第二个数据
  79   4                                              PS2_Dat_Temp=0x00;
  80   4                                              if(Ps2_Receice_Data[0]!=Ps2_Receice_Data[1])    //如果两组数据错位
  81   4                                              {
  82   5                                                      Ps2_Receice_Data[0]=Ps2_Receice_Data[1];        //以最新的一次按键为准
  83   5                                              }
  84   4                                              Ps2_Data=Ps2_Receice_Data[0];                                   //确认最终按键并保存到Ps2_Data中
  85   4                                              
  86   4                                              //shu=0;
  87   4                                              num=9; 
  88   4                                              count=0;
  89   4                                              PS2_ok=1;   
  90   4                                      }
  91   3                              }
  92   2                      }
  93   1              EX1=1;
  94   1      }
  95          
  96          //译码函数,用来处理缓冲区里的数据
  97          void Ps2_Getkey(void)
  98          {
  99   1              unsigned char i=0;
 100   1      
 101   1              EX0=0;  EX1=0;          //关外部中断
 102   1              if(PS2_ok==1)                   //若有按键解出
 103   1              {
 104   2                      if(Ps2_Receice_Data[0]==Ps2_Receice_Data[1])
 105   2                      {               
 106   3                              switch (Ps2_Data)
 107   3                              {
 108   4                                      case 0x16:init_PS2();   if(inbuf1[19]=='1')inbuf1[19]='0';else inbuf1[19]='1';break;            // 1
 109   4                                      case 0x1E:init_PS2();   if(inbuf1[20]=='1')inbuf1[20]='0';else inbuf1[20]='1';break;            // 2
 110   4                                      case 0x26:init_PS2();   if(inbuf1[21]=='1')inbuf1[21]='0';else inbuf1[21]='1';break;            // 3
 111   4                                      case 0x25:init_PS2();   if(inbuf1[22]=='1')inbuf1[22]='0';else inbuf1[22]='1';break;            // 4
 112   4                                      case 0x2E:init_PS2();   if(inbuf1[23]=='1')inbuf1[23]='0';else inbuf1[23]='1';break;            // 5
 113   4                                      case 0x36:init_PS2();   if(inbuf1[24]=='1')inbuf1[24]='0';else inbuf1[24]='1';break;            // 6
 114   4                                      case 0x3D:init_PS2();   if(inbuf1[25]=='1')inbuf1[25]='0';else inbuf1[25]='1';break;            // 7
 115   4                                      case 0x3E:init_PS2();   if(inbuf1[26]=='1')inbuf1[26]='0';else inbuf1[26]='1';break;            // 8
 116   4                                      default:init_PS2();     break;
 117   4                              }
C51 COMPILER V7.06   PS2                                                                   05/18/2008 14:29:18 PAGE 3   

 118   3                      }
 119   2                      //Ps2_Data=0;                                                           
 120   2              }
 121   1              PS2_ok=0;
 122   1              EX0=1;EX1=1;    //开外部中断
 123   1      } 


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