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

📄 -

📁 基于单片机实现LED读取遥控器键值(程序及电路图)
💻
字号:
C51 COMPILER V7.10   LED_KEY                                                               09/22/2011 23:54:41 PAGE 1   


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

line level    source

   1          
   2          /********************************************************************************
   3          *  描述:                                                                       *    
   4          *                   矩阵键盘数码管显示键值                                     *    
   5          *   排线连接方法:JP8(P1) 与JP4(矩阵键盘接口)连接  P0与JP3(静态数码管)连接 *    
   6          *         矩阵键盘定义:                                                       *
   7          *         P1.1-P1.3为行线,P1.4-P1.7为列线                                      *    
   8          *         喇叭接P1.5口  矩阵键盘P1口,                                         *    
   9          *  注意:请将JP165短路冒断开                                                   *                          
             -  
  10          ********************************************************************************/
  11          
  12          #include <reg51.h>
  13                                  
  14          #define uchar unsigned char      //宏的定义变量类型 uchar 代替 unsigned char
  15          #define uint  unsigned int       //宏的定义变量类型 uint  代替 unsigned int
  16          
  17          uchar  dis_buf;            //显示缓存
  18          uchar  temp;
  19          uchar  key;                //键顺序码
  20          void delay(uchar x);      //x*0.14MS
  21          
  22          // 此表为 LED 的字模               0      1             2        3         4     5              6        7              8        9        a               b        c    d         e              f
  23          unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~
             -0x39,~0x5E,~0x79,~0x71};
  24          
  25          /*************************************************************
  26          *                                                           *
  27          * 延时子程序                                                *
  28          *                                                           *
  29          *************************************************************/
  30          
  31          void  delay(uchar x)
  32          { uchar j;
  33   1          while((x--)!=0)  //CPU执行x*12次
  34   1          { for(j=0;j<125;j++)
  35   2               {;}
  36   2          }
  37   1      }
  38          
  39          /*************************************************************
  40          *                                                            *
  41          * 键扫描子程序  (3*4 的矩阵) P1.4 P1.5 P1.6 P1.7为列         *
  42          *                                                         P1.1 P1.2 P1.3为行             *
  43          *                                                                                        *
  44          *************************************************************/
  45          
  46           void  keyscan(void)
  47           {      temp = 0;
  48   1          P1=0xF0;                 //高四位输入   列为高电平  行为低电平
  49   1          delay(1);                            //延时
  50   1              temp=P1;                 //读P1口 
  51   1          temp=temp&0xF0;                      //屏蔽低四位
  52   1          temp=~((temp>>4)|0xF0);       
  53   1          if(temp==1)   // p1.4 被拉低
C51 COMPILER V7.10   LED_KEY                                                               09/22/2011 23:54:41 PAGE 2   

  54   1              key=1;  //第1个按键键值
  55   1          else if(temp==2)   // p1.5 被拉低
  56   1              key=2;    //第2个按键键值
  57   1          else if(temp==4)   // p1.6 被拉低
  58   1              key=3;   //第3个按键键值
  59   1          else if(temp==8)   // p1.7 被拉低
  60   1               key=4;   //第4个按键键值
  61   1              else
  62   1                 key = 16;
  63   1              
  64   1          P1=0x0F;             //低四位输入  行为高电平 列为低电平
  65   1          delay(1);                    //延时
  66   1              temp=P1;             //读P1口       
  67   1          temp=temp&0x0F;
  68   1          temp=~(temp|0xF0);
  69   1          if(temp==2)            //第一行  p1.1  被拉低(直接temp==2 是因为我们P1.0空的,是3*4的矩阵键盘)
  70   1              key=key+0; 
  71   1          else if(temp==4)   //第二行  p1.2  被拉低
  72   1              key=key+4;
  73   1          else if(temp==8)   //第三行 p1.3  被拉低
  74   1              key=key+8;
  75   1              else
  76   1                key = 16;
  77   1       
  78   1              
  79   1           dis_buf = key;         //键值入显示缓存
  80   1           dis_buf = dis_buf & 0x0f;
  81   1       
  82   1       }
  83          
  84          /*************************************************************
  85          *                                                           *
  86          *判断键是否按下                                             *
  87          *                                                           *
  88          *************************************************************/
  89          
  90           void  keydown(void)
  91           {  
  92   1              P1=0xF0;       //将高4位全部置1 低四位全部置0
  93   1              if(P1!=0xF0)  //判断按键是否按下 如果按钮按下 会拉低P1其中的一个端口
  94   1              {
  95   2                keyscan();  //调用按键扫描程序
  96   2          }
  97   1       }
  98           
  99          /*************************************************************
 100          *                                                            *
 101          * 主程序                                                     *
 102          *                                                            *
 103          *************************************************************/ 
 104          main()
 105           {
 106   1          P0=0xFF;                    //置P0口
 107   1          P1=0xFF;                    //置P1口  
 108   1          delay(10);                  //延时
 109   1          
 110   1          while(1)
 111   1          { 
 112   2             keydown();        //调用按键判断检测程序
 113   2                 P0 = LED7Code[dis_buf%16]&0x7f;     //LED7 0x7f为小数点 共阴和共阳此处也是不一样;  %16表示输出16进制
 114   2          
 115   2          }
C51 COMPILER V7.10   LED_KEY                                                               09/22/2011 23:54:41 PAGE 3   

 116   1        }   
 117          
 118          
 119          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    188    ----
   CONSTANT SIZE    =     16    ----
   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 + -