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

📄 key.lst

📁 64位键盘扫描程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   KEY                                                                   01/05/2006 17:21:44 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN E:\hex\key.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE key.c BROWSE DEBUG OBJECTEXTEND TABS(1) OBJECT(E:\hex\key.obj)

line level    source

   1          #include <reg51.h>
   2          #include <absacc.h>
   3          #include <intrins.h>
   4          #include <stdio.h>
   5          #include <string.h>
   6          #include <stdlib.h>
   7          #include <ctype.h>
   8          
   9          #define uchar unsigned char
  10          #define uint  unsigned int
  11          #define ulong unsigned long
  12          
  13          #define O   'O'
  14          #define K   'K'
  15          #define E   'E'
  16          #define R   'R'
  17          //--------------------------------------------------------
  18          #define Wait_ti while(TI==0);TI=0              /*等待一帧发送完毕*/ 
  19          #define Wait_ri while(RI==0);RI=0              /*等待一帧接收完毕*/
  20          /**************************************
  21           -------------芯片管脚定义--------------
  22           ***************************************/
  23          sbit   PowerLed=P1^4;
  24          sbit   SHIFTLED=P1^5;
  25          sbit   TestLED=P1^6;
  26          sbit   Beep=P1^7;
  27          sbit   KeyIn=P3^3;
  28          sbit   KeyOut=P3^4;   //0:有键按下
  29          //=====================================
  30          #define OK 0
  31          #define ER 1
  32          //=====================================
  33          /**********************************************
  34            -------------与主机通信命令名柄定义----------
  35            **********************************************/
  36          #define GetKey          0x90  //有键直接返回键值
  37          #define OpenBeep        0X91  //打开蜂鸣器,嘟... 嘟....,无返回值 
  38          #define TestKey         0x94  //检测主板与键盘板IC的通信,回送主板Finish命令句柄
  39          #define OpenMoneyBox    0x9a  //开钱箱命令句柄
  40          #define CloseCat        0x9c  //关机
  41          #define English         0x9d  //英文字母命令
  42          #define Number          0x9e  //数字命令
  43          //=====================================
  44          bit err_rxd_flag;  //串口接收数据错误
  45          bit rxd_flag;
  46          uchar uc0;
  47          uchar rs232buf[30];  //接收数据缓存
  48          //=====================================
  49          void rxd_order_232(); /*接收命令、数据*/
  50          //=====================================
  51          void ssio0(void) interrupt 4 using 1   //*串行中断0接收程序*
  52          {
  53   1          ES=0;                               //*关串行中断*
  54   1          rxd_order_232();
  55   1          rxd_flag=1;
C51 COMPILER V7.09   KEY                                                                   01/05/2006 17:21:44 PAGE 2   

  56   1          ES=1;
  57   1      }
  58          //=====================================
  59          void delayms(uint ti)                    //*延时程序~0.1ms,*
  60          {              //延时时间=[ti(100)+1]*1.08us~=ti*0.108ms
  61   1        uint i;
  62   1        uchar t;
  63   1        for (i=0;i<ti;i++)
  64   1        {   
  65   2            t=99;
  66   2            do{
  67   3              t--;
  68   3           }while(t!=0);
  69   2        } 
  70   1      }
  71          /*******************************************
  72           ---------- 初始化串行口来多机通信 ---------
  73           *******************************************/
  74          void InitSBUF(void)     
  75          {
  76   1           TMOD=0x21;           /* T/C1定义为方式2 */
  77   1           TL1=0xfd;            /* 9600时TH1,TL1=0xfd,1200时TH1,TL1=0XE8 */
  78   1           TH1=0xfd; 
  79   1           PCON=0x00;
  80   1           SCON=0x50;           /* 串行口为方式1,SM2=1,TB8=0,RB8=0 */
  81   1          /* SM0=0;*/
  82   1           TR1=1;   ES=0;  /*ET0=1; ES=1; TR0=1;*/
  83   1          /* SM2=1;   PS=1;*/
  84   1           RI=0;    TI=0; EA=1;
  85   1      }
  86          
  87          //===================================
  88          void sbuwork(uchar d)     /*发送一数据:c*/
  89          {  
  90   1         uchar c;
  91   1         SBUF=d;             /*发送数据*/
  92   1         Wait_ti;             /*等待一帧发送完毕*/
  93   1         for(c=0;c<=0x05;c++);
  94   1      }
  95          //===================================================
  96          /*void buzzer(uchar num,uchar on,uchar off)//蜂鸣器驱动
  97          {  //unm:次数;on:鸣时间;off:停时间
  98             uchar n;
  99             if((num==0)|(on==0)){return;}
 100             for(n=0;n<(num-1);n++)
 101             {
 102                Beep=0;
 103                delayms(on);
 104                Beep=1;
 105                delayms(off);
 106             }
 107             Beep=0;
 108             delayms(on);
 109             Beep=1;
 110          }*/
 111          //=================================================
 112          //
 113          //          key 键盘操作程序
 114          //
 115          //==================================================
 116          uchar key_press() //按键扫描程序
 117          { 
C51 COMPILER V7.09   KEY                                                                   01/05/2006 17:21:44 PAGE 3   

 118   1         uchar key_num;
 119   1         uchar n;
 120   1         uchar key_x;
 121   1         uchar keybuf[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
 122   1         key_num=0xff;
 123   1         if(P0==0xff){goto AD;}   //没键按下退出
 124   1         delayms(20);
 125   1         if(P0==0xff){goto AD;}   //没键按下
 126   1         KeyOut=1;                //消除按键标志
 127   1         Beep=0;
 128   1         for(n=0;n<8;n++)
 129   1         {
 130   2             P2=keybuf[n];
 131   2             if(P0<0xff){key_x=P0;key_num=n;goto AA;}
 132   2         }
 133   1         key_num=0xff;goto AD;//退出
 134   1      AA:
 135   1         for(n=0;n<8;n++)
 136   1         {
 137   2             if(key_x==keybuf[n])
 138   2             {
 139   3                  key_num=key_num*8;
 140   3                  key_num=key_num+n;
 141   3                  while(P0<0xff)//等待抬手
 142   3                  {
 143   4                     delayms(20);
 144   4                  }
 145   3                 // buzzer(1,120,2);
 146   3                  goto AD;
 147   3             }
 148   2         }
 149   1      AD:
 150   1         P0=0xff;
 151   1         P2=0x00;
 152   1         Beep=1;
 153   1         return key_num;
 154   1      }
 155          /********************************************************/ 
 156          void rxd_by_232()     /*从232接收一个数据,并保存到uc0变量中*/
 157          { 
 158   1          uchar counter; 
 159   1          counter=0xfe;
 160   1          do{
 161   2             if(counter==0x00)
 162   2             {RI=0;err_rxd_flag=1;return;}
 163   2             else{counter--;}
 164   2          }while(RI==0);
 165   1          RI=0;   
 166   1          uc0=SBUF;
 167   1          err_rxd_flag=0;
 168   1      }
 169          //===============================
 170          //--------------------------------------------------------------
 171          /*命令格式:0x1b+0x10+命令句柄+数据包序号+命令长度+(命令参数)+CS*/
 172          void rxd_order_232() /*接收命令、数据*/
 173          { 
 174   1          uchar k,n;

⌨️ 快捷键说明

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