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

📄 k1-k4-move-shuma-c51.lst

📁 单片机中LED显示/数码管显示/键盘控制/蜂鸣器输出/中断应用/定时器和计数器/串口通信/键控看门狗/数据交换
💻 LST
字号:
C51 COMPILER V8.02   K1_K4_MOVE_SHUMA_C51                                                  12/23/2006 12:19:09 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE K1_K4_MOVE_SHUMA_C51
OBJECT MODULE PLACED IN K1-K4-MOVE-SHUMA-C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE K1-K4-MOVE-SHUMA-C51.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************
   2          *                                                                  *
   3          * ME500单片机开发系统演示程序 - 计按键次数                         *
   4          *                                                                  *
   5          * 8位数码管显示                                                    *
   6          *                                                                  *
   7          * 版本: V1.0 (2006/11/20)                                         *
   8          * 作者: gguoqing (Email: gguoqing@willar.com)                     *
   9          * 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界)  *
  10          * 时间: 2006/07/21                                                *
  11          *                                                                  *
  12          *【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved  *
  13          *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!        *
  14          *                                                                  *
  15          ********************************************************************
  16          *                                                                  * 
  17          *  对独立键进行按键次数计数,8位数码管显示。                       *
  18          *  K1按下后,进行加1计数,逐个增加显示位。                         *
  19          *  K2按下后,进行减1计数,逐个减少显示位。                         *
  20          *  K3暂时没有定义功能。                                            *
  21          *  K4按下后,清计数单元,只有第一位数码管显示0。                   *
  22          *  数码管显示的位数随K1和K2按下的次数,增加与减少。                *
  23          *                                                                  *
  24          *******************************************************************/
  25          
  26          #include < reg52.h >
  27          unsigned char k_scan();
  28          unsigned char k_pro();
  29          unsigned char k_new,k_old;
  30          unsigned char k,num,x,n;
  31          unsigned char k_count=0;
  32          
  33          unsigned char k1_prog();
  34          unsigned char k2_prog();
  35          unsigned char k4_prog();
  36          
  37          void  delay(unsigned char m);
  38          void  disp_count();
  39          
  40          sbit k1=P1^4;   sbit k2=P1^5;
  41          sbit k3=P1^6;   sbit k4=P1^7; 
  42          
  43          unsigned char code  LEDData[ ]  = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
  44                                              0x80,0x90,0xff};
  45                                              
  46          unsigned char data  display[8]  = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  47          
  48          unsigned char code  scan_bit[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  49          
  50          /********************************************************/
  51          //主程序
  52          /********************************************************/
  53          void main(void)
  54          {  
  55   1         P0=0xff;
C51 COMPILER V8.02   K1_K4_MOVE_SHUMA_C51                                                  12/23/2006 12:19:09 PAGE 2   

  56   1         P1=0xff;
  57   1         P2=0xff;
  58   1         k_old=0x00;      
  59   1         k=0x00;
  60   1      
  61   1         while(1)
  62   1        {
  63   2           disp_count();
  64   2           k_new=k_scan();
  65   2          
  66   2           if(k_new!=k_old)
  67   2           { 
  68   3                 for(num=0;num<10;num++)   //调显示来做键延时,去抖动
  69   3                 disp_count();           
  70   3           }
  71   2           if(k_new!=k_old)
  72   2           {
  73   3             k=k_pro();        
  74   3               }
  75   2                 
  76   2           switch(k)
  77   2            {
  78   3             case 1:  k1_prog();  break;
  79   3             case 2:  k2_prog();  break;
  80   3             case 3:              break;
  81   3             case 4:  k4_prog();  break;
  82   3      
  83   3             default:             break;
  84   3            }
  85   2               k=0x00;
  86   2        }
  87   1      }
  88          /********************************************************/
  89          //K1键功能子程序
  90          /********************************************************/
  91          unsigned char k1_prog()
  92          { 
  93   1         k_count++;       //加计数
  94   1        
  95   1         switch(k_count)
  96   1          {
  97   2            case 1: display[0]=0x01; break;
  98   2            case 2: display[1]=0x02; break;
  99   2            case 3: display[2]=0x03; break;
 100   2            case 4: display[3]=0x04; break;
 101   2            case 5: display[4]=0x05; break;
 102   2            case 6: display[5]=0x06; break;
 103   2            case 7: display[6]=0x07; break;
 104   2            case 8: display[7]=0x08; break;
 105   2      
 106   2            default: 
 107   2                  k_count=8; break;
 108   2           }
 109   1          k=0x00;
 110   1          return(k_count); 
 111   1      }
 112          
 113          /********************************************************/
 114          //K2键功能子程序
 115          /********************************************************/
 116          unsigned char k2_prog()
 117          { 
C51 COMPILER V8.02   K1_K4_MOVE_SHUMA_C51                                                  12/23/2006 12:19:09 PAGE 3   

 118   1         if(k_count==0)
 119   1         { ; }
 120   1         else
 121   1         {
 122   2           switch(k_count)
 123   2           {
 124   3            case 1: display[0]=0x00; break;
 125   3            case 2: display[1]=0x0a; break;
 126   3            case 3: display[2]=0x0a; break;
 127   3            case 4: display[3]=0x0a; break;
 128   3            case 5: display[4]=0x0a; break;
 129   3            case 6: display[5]=0x0a; break;
 130   3            case 7: display[6]=0x0a; break;
 131   3            case 8: display[7]=0x0a; break;
 132   3      
 133   3            default: 
 134   3                 k_count=0;       //键计数单元清零
 135   3                 break;
 136   3           }
 137   2            k=0x00;
 138   2                k_count--;       //键计数
 139   2            return(k_count); 
 140   2         }
 141   1      }
 142          
 143          /********************************************************/
 144          //K4键功能子程序
 145          /********************************************************/
 146          unsigned char k4_prog()
 147          {
 148   1          display[0]=0x00;   //第一位数码管显示0
 149   1      
 150   1              for(n=1;n<8;n++)
 151   1          { 
 152   2           display[n]=0x0a;  //关闭7个数码管
 153   2          }
 154   1      
 155   1          k_count=0;         //键计数单元清零
 156   1      
 157   1          return(k_count); 
 158   1      }
 159          
 160          /********************************************************/
 161          //显示子程序
 162          /********************************************************/
 163          void  disp_count()
 164          {   
 165   1          for(n=0;n<8;n++)
 166   1          {
 167   2                for(x=1;x<8;x++)           //如果高位为0,不显示
 168   2                {
 169   3                  if(display[x]==0x00)
 170   3                       display[x]=0x0a;
 171   3            }
 172   2      
 173   2            P0 =LEDData[display[n]] ;  //显示段码
 174   2            P2 =scan_bit[n];           //输出位码
 175   2            delay(1);
 176   2                P2 = 0xff;                 //关闭显示
 177   2          } 
 178   1      }
 179          
C51 COMPILER V8.02   K1_K4_MOVE_SHUMA_C51                                                  12/23/2006 12:19:09 PAGE 4   

 180          /********************************************************/
 181          //判键值子程序
 182          /********************************************************/
 183          unsigned char k_pro()
 184          {
 185   1          switch (k_new)
 186   1          {
 187   2            case 0x01: k=1;  break;   //K1按下  
 188   2            case 0x02: k=2;  break;   //K2按下
 189   2            case 0x04: k=3;  break;   //K3按下
 190   2            case 0x08: k=4;  break;   //K4按下
 191   2              
 192   2            default:  break;
 193   2          }
 194   1           return(k);
 195   1      }
 196          
 197          /********************************************************/
 198          //扫描键子程序
 199          /********************************************************/
 200          unsigned char k_scan()
 201          {  
 202   1          P1=0xff;
 203   1          k_new=0x00;
 204   1          k_new=(~P1 & 0xf0)>>4;
 205   1      
 206   1          return(k_new);    //无键按下

⌨️ 快捷键说明

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