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

📄 key_ch451.lst

📁 CH451键盘程序,C51编写,支持长按功能
💻 LST
字号:
C51 COMPILER V7.00  KEY_CH451                                                              04/13/2006 09:51:47 PAGE 1   


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

stmt level    source

   1          
   2          #include "config.h"
   3          
   4          sbit  KeyCom =P1^0;
   5          sbit  clk       = P1^2;   // clk 连接于 P3.5
   6          sbit  dat       = P1^1;   // dat 连接于 P3.7
   7          sbit  keyout    = P3^2;   // key 连接于 P3.3(INT0)
   8          unsigned char KeyValue;
   9          uint keyint;//key time
  10          sbit bee =P1^7;
  11          
  12          //-----------------------------------------------------系统时钟
  13                    void Int1_systick(void) interrupt 1  //
  14            {
  15   1        uchar buf;
  16   1      //  TH0 = 0x8a;                 //32ms初值装载
  17   1      //  TL0 = 0x44;
  18   1        TH0 = 0xFF;                 //32ms初值装载
  19   1        TL0 = 0x44;
  20   1      //-------------------------
  21   1        buf=GetKeyvalue(); 
  22   1        keyint++;
  23   1        if(buf!=KeyValue)
  24   1        {
  25   2        ET0=0;
  26   2        EX0=1;
  27   2        keyint=0;
  28   2        }
  29   1        }
  30          
  31                    void Int0_key(void) interrupt 0  //
  32            {
  33   1          KeyValue=GetKeyvalue();
  34   1              ET0=1;
  35   1              EX0=0;
  36   1              nop;
  37   1      
  38   1        }
  39          //-----------------------------------------------------------
  40          void KeyInit(void)  // 键盘初始化
  41          {       
  42   1        TMOD=0x21 ;TH0=0;TL0=0;TR0=1;ET0=0;  //T0作为系统时钟 
  43   1        IT0=0;EX0=1; //外部中断0  电平触发方式  用于键盘中断  
  44   1       Sendkeycom(0x04,0x02); //仅键盘使能
  45   1      }
  46          
  47          void Sendkeycom(unsigned char syscom,unsigned char sysdat)
  48          {
  49   1       uchar i;
  50   1       clk=0;
  51   1       KeyCom=0;                              //时钟线置0
  52   1       for(i=0;i<8;i++)
  53   1       {
  54   2        if(sysdat&1) {dat=1;} else {dat=0;}
  55   2        sysdat>>=1;  clk=1;  clk=0;
C51 COMPILER V7.00  KEY_CH451                                                              04/13/2006 09:51:47 PAGE 2   

  56   2       }
  57   1       for(i=0;i<4;i++)
  58   1       {
  59   2        if(syscom&1) {dat=1;} else {dat=0;}
  60   2        syscom>>=1;  clk=1;  clk=0;
  61   2       }
  62   1       dat=1;
  63   1       KeyCom=1;
  64   1      
  65   1      }
  66          
  67          unsigned char GetKeyvalue(void)
  68          {
  69   1       uchar i, Keybuf=7;
  70   1       clk=0;
  71   1       KeyCom=0;                                      //发出一 clk 脉冲
  72   1       for(i=0;i<4;i++)    //发送读键命令
  73   1       {
  74   2        if(Keybuf&1) {dat=1;} else {dat=0;}
  75   2        Keybuf>>=1;  clk=1;  clk=0;
  76   2       }
  77   1       KeyCom=1;
  78   1       Keybuf=0;
  79   1       for(i=0;i<7;i++)    //接收7位数据
  80   1       {
  81   2        clk=1;  Keybuf<<=1;
  82   2        if(keyout)  { Keybuf=Keybuf|0x01;}    // bit0=1
  83   2        clk=0;                // 输出一 clk 脉冲
  84   2       }
  85   1      
  86   1       return(Keybuf);
  87   1      }
  88          
  89          /****************************************************************************
  90          * 名称:WaitKey()
  91          * 功能:等待一个有效按键,并返回按键值。本函数有去抖功能。
  92          * 入口参数:无
  93          * 出口参数:返回按键盘值。
  94          ****************************************************************************/
  95          uchar  WaitKey(void)
  96          { // uchar k;  
  97   1         KeyValue = 0;                                                        
  98   1         while(!KeyValue);  //接收一个键值
  99   1      //   k=KeyValue;
 100   1      //   while(KeyValue!=k);
 101   1         while(keyint!=0);
 102   1         return(KeyValue);
 103   1      }


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