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

📄 test024.lst

📁 51单片机全套学习资料 提供电路原理图 各种C语言实验程序 包括LED流水灯,数码管显示,中断,定时器,串口通信,DS18B20温度显示,液晶1602,12864显示,看门狗,按键检测,音乐播放等程序
💻 LST
字号:
C51 COMPILER V7.50   TEST024                                                               01/21/2007 14:19:15 PAGE 1   


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

line level    source

   1          /********************************************************************************************
   2          * 文 件 名:test024.c
   3          * 功    能:4*4行列式键盘驱动。
   4          * 硬件条件:1.CPU型号:AT89S52
   5          *           2.晶振:12.000MHz
   6          *           3.用跳线帽短接BEEP_P1.3
   7          *           4.用杜绑线将4*4行列式键盘模块与开发板的P2口相连,连接关系如下:
   8          *             ==============================================================
   9          *             ARMSKY-51Easy教学实验开发板                  4*4行列式键盘模块
  10          *  
  11          *                     P2.7                                      row1
  12          *                     P2.6                                      row2
  13          *                     P2.5                                      row3
  14          *                     P2.4                                      row4
  15          *                     P2.3                                      col1
  16          *                     P2.2                                      col2
  17          *                     P2.1                                      col3
  18          *                     P2.0                                      col4
  19          *                     +5V                                       VCC
  20          *                     GND                                       GND
  21          *             ==============================================================
  22          *             注意:用户可根据自己的情况,选择ARMSKY-51Easy教学实验开发板上
  23          *                   的其他引脚与4*4行列式键盘模块相连。
  24          *             
  25          * 作    者:POWER
  26          * 日    期:2006年12月12号
  27          * 斯凯科技主页:www.armsky.net
  28          * 斯凯科技论坛:www.armsky.net/bbs
  29          *********************************************************************************************/
  30          #include "reg52.h"                               // 包含头文件    
  31          
  32          /* 与编译器无关的数据类型定义 */
  33          /********************************************************************************************/
  34          typedef unsigned char      uint8;                // 无符号8位整型变量
  35          typedef signed   char      int8;                 // 有符号8位整型变量
  36          typedef unsigned short     uint16;               // 无符号16位整型变量
  37          typedef signed   short     int16;                // 有符号16位整型变量
  38          typedef unsigned int       uint32;               // 无符号32位整型变量
  39          typedef signed   int       int32;                // 有符号32位整型变量
  40          typedef float              fp32;                 // 单精度浮点数(32位长度)
  41          typedef double             fp64;                 // 双精度浮点数(64位长度)
  42          /********************************************************************************************/
  43          
  44          /* 定义位变量 */
  45          sbit P1_3 = P1 ^ 3;                                                   
  46          sbit row1 = P2 ^ 7;
  47          sbit row2 = P2 ^ 6;
  48          sbit row3 = P2 ^ 5;
  49          sbit row4 = P2 ^ 4;
  50          sbit col1 = P2 ^ 3;
  51          sbit col2 = P2 ^ 2;
  52          sbit col3 = P2 ^ 1;
  53          sbit col4 = P2 ^ 0;
  54          
  55          #define BEEP_ON()        (P1_3=0)                // 定义"BEEP_ON()"为P1.3输出低电平,控制蜂鸣器蜂鸣
C51 COMPILER V7.50   TEST024                                                               01/21/2007 14:19:15 PAGE 2   

  56          #define BEEP_OFF()       (P1_3=1)                // 定义"BEEP_OFF()"为P1.3输出高电平,控制蜂鸣器不蜂鸣
  57          
  58          
  59          /********************************************************************************************
  60          * 函数名称:Delay()
  61          * 功    能:软件延时
  62          * 入口参数:count    延时参数,值越大,延时越长
  63          * 出口参数:无
  64          *********************************************************************************************/
  65          void Delay(uint16 count)
  66          {
  67   1        uint8 i;                
  68   1      
  69   1        while(--count != 0)        
  70   1                {
  71   2                  for(i = 0; i < 125; i++);                // ";" 表示空语句,CPU空转。
  72   2                }                                                      // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
  73   1      }
  74          
  75          
  76          /********************************************************************************************
  77          * 函数名称:BeepCount()
  78          * 功    能:蜂鸣器按指定次数缝鸣
  79          * 入口参数:count
  80          * 出口参数:无
  81          *********************************************************************************************/
  82          void BeepCount(uint8 count)
  83          {
  84   1        for(;count>0;count--)
  85   1           {
  86   2             BEEP_ON(); Delay(120);
  87   2             BEEP_OFF();Delay(120);
  88   2           }
  89   1      }
  90          
  91          
  92          /********************************************************************************************
  93          * 函数名称:KeyDown()
  94          * 功    能:检测键盘是否按下
  95          * 入口参数:无
  96          * 出口参数:返回1表示键盘按下,返回0表示键盘未按下
  97          * 注    意:该函数有消抖功能
  98          *********************************************************************************************/
  99          uint8 KeyDown(void)
 100          {
 101   1        col1=0; col2=0; col3=0; col4=0;                              // 列线全部置低
 102   1        
 103   1        if((row1==0) || (row2==0) || (row3==0) || (row4==0))     // 若有任一行线读回状态为低
 104   1         {
 105   2           Delay(80);                                            // 延时消抖
 106   2           if((row1==0) || (row2==0) || (row3==0) || (row4==0))  // 再次读行线状态,若有任一行线读回状态为低
 107   2             return 1;                                                                               // 返回1,表明有键盘按下
 108   2           else
 109   2             return 0;                                                                           // 返回0,表明无键盘按下
 110   2              } 
 111   1        else 
 112   1          return 0;     
 113   1      }
 114          
 115          /********************************************************************************************
 116          * 函数名称:KeyUp()
 117          * 功    能:检测键盘是否弹起
C51 COMPILER V7.50   TEST024                                                               01/21/2007 14:19:15 PAGE 3   

 118          * 入口参数:无
 119          * 出口参数:返回1表示键盘弹起,返回0表示键盘未弹起
 120          * 注    意:该函数有消抖功能
 121          *********************************************************************************************/
 122          uint8 KeyUp(void)
 123          {
 124   1        col1=0; col2=0; col3=0; col4=0;                          // 列线全部置低
 125   1      
 126   1        if((row1==1) && (row2==1) && (row3==1) && (row4==1))     // 若全部行线读回状态都为高 
 127   1         {
 128   2           Delay(80);                                                                                    // 延时消抖
 129   2           if((row1==1) && (row2==1) && (row3==1) && (row4==1))  // 再次读行线状态,若全部行线读回状态都为高
 130   2             return 1;                                                                                   // 返回1,表明所有键盘都处于弹起状态
 131   2           else
 132   2             return 0;                                                                                   // 返回0,表明有键盘处于按下状态
 133   2         }
 134   1        else 
 135   1          return 0;
 136   1      }
 137           
 138          /********************************************************************************************
 139          * 函数名称:KeyNum()
 140          * 功    能:检测用户按下的键盘所对应的键盘号
 141          * 入口参数:无
 142          * 出口参数:返回0表示没有键盘被按动,返回1~16对应被按动的键盘
 143          * 说    明:用户可根据自己的键盘编号修改该函数。
 144          *********************************************************************************************/
 145          uint8  KeyNum(void)
 146          {
 147   1      
 148   1        uint8 KeyTemp;
 149   1        
 150   1        KeyTemp=0;
 151   1      
 152   1        if(KeyDown()==1)                                              // 若键盘被按下
 153   1         {
 154   2           col1=0; col2=1; col3=1; col4=1;                                            // 将列线1置低,其他列线置高
 155   2           
 156   2           if (row1==0) KeyTemp=1;                                                            // 若行线1读回状态为低,则表明按键1被按下
 157   2           if (row2==0) KeyTemp=5;                                // 若行线2读回状态为低,则表明按键5被按下
 158   2           if (row3==0) KeyTemp=9;                                                            // 若行线3读回状态为低,则表明按键9被按下
 159   2           if (row4==0) KeyTemp=13;                                                           // 若行线4读回状态为低,则表明按键13被按下
 160   2           
 161   2           col1=1; col2=0; col3=1; col4=1;                                // 将列线2置低,其他列线置高
 162   2            
 163   2           if (row1==0) KeyTemp=2;                                // 若行线1读回状态为低,则表明按键2被按下
 164   2           if (row2==0) KeyTemp=6;                                // 若行线2读回状态为低,则表明按键6被按下
 165   2           if (row3==0) KeyTemp=10;                                           // 若行线3读回状态为低,则表明按键10被按下
 166   2           if (row4==0) KeyTemp=14;                                                       // 若行线4读回状态为低,则表明按键14被按下
 167   2           
 168   2           col1=1; col2=1; col3=0; col4=1;
 169   2           
 170   2           if (row1==0) KeyTemp=3; 
 171   2           if (row2==0) KeyTemp=7; 
 172   2           if (row3==0) KeyTemp=11; 
 173   2           if (row4==0) KeyTemp=15;             
 174   2           
 175   2           col1=1; col2=1; col3=1; col4=0;
 176   2           
 177   2           if (row1==0) KeyTemp=4; 
 178   2           if (row2==0) KeyTemp=8; 
 179   2           if (row3==0) KeyTemp=12; 
C51 COMPILER V7.50   TEST024                                                               01/21/2007 14:19:15 PAGE 4   

 180   2           if (row4==0) KeyTemp=16;
 181   2            
 182   2           while ( KeyUp()!=1);                                      // 等待按下的键盘被释放
 183   2            
 184   2           return KeyTemp;                                       // 返回被按下并被释放的键盘的编号 
 185   2      
 186   2          }
 187   1        else
 188   1            return 0;
 189   1      }
 190          
 191          
 192          
 193          /********************************************************************************************
 194          * 函数名称:main()
 195          * 功    能:4*4行列式键盘驱动。当发现用户按下并释放键盘,则检测出相应键盘号,并控制蜂鸣器蜂鸣
 196          *           相应次数。
 197          *********************************************************************************************/          
 198          void main (void)                
 199          {
 200   1                                                                                                                         
 201   1        BEEP_OFF();                                                                                      // 蜂鸣器不蜂鸣
 202   1      
 203   1        while(1)                                                 // 死循环
 204   1            {
 205   2                  BeepCount(KeyNum());
 206   2                }  
 207   1      }
 208          


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