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

📄 global.lst

📁 该程序是双色点阵程序
💻 LST
字号:
C51 COMPILER V8.02   GLOBAL                                                                08/22/2008 11:51:52 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE GLOBAL
OBJECT MODULE PLACED IN Global.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Global.c BROWSE DEBUG OBJECTEXTEND TABS(2)

line level    source

   1          #include "Global.H"
   2          
   3          
   4          //数码管显示缓冲区。改变此缓冲区中的字型码,即改变相应数码管的显示内容。
   5          //=====================================================================
   6          UNCHAR DisplayBuffer[8];//数码管显示缓冲区,低字节为左边数码管,高字节为右边数码管
   7          UNCHAR code HexChar[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
             -};  //0到f
   8          
   9          
  10          /////////////////////////////////////////////////////数码管显示与键盘扫描函数///////////////////////////
  11          
  12          UNCHAR KeyValue = 0;//按键值.有键按下置非0按键扫描码,应用程序读取按键扫描码后需清0.
  13          //显示控制程序内部使用的变量
  14          //--------------------------
  15          UNCHAR DisplayDigit = 0;//当前数码管显示位的编号,亦即显示数据在显示缓冲区中的偏移量
  16          //键盘扫描程序内部使用的变量
  17          //--------------------------
  18          UNCHAR KeyValueTemp = 0;//临时按键值变量,用于进行20ms延时检测
  19          UNCHAR Key20msDelay = 0;//有键按下时的20ms去抖动延时控制
  20          
  21          //显示键盘控制程序。在Timer1中断服务程序中被调用。
  22          //===============================================
  23          UNCHAR KeyDownFlag = 0;//有键按下标志。应用程序代码不能改变此变量的值,否则会影响键盘的正常工作。
  24          void DisplayKeyboardControl(void) using 3
  25          {   
  26   1        UNCHAR KeyScanCode;//按键扫描码,为0表示没有键按下
  27   1        UNCHAR i;
  28   1      
  29   1        //停止所有数码位的显示
  30   1        //====================
  31   1        XBYTE[DisplayDigitSelect] = 0xFF; 
  32   1        KeyScanCode = 0x00 ;//初始化为未检测到有键按下,为0表示没有键按下
  33   1        
  34   1        //按键识别
  35   1        //=================================
  36   1        for(i=0;i<8;i++)               
  37   1          {
  38   2          XBYTE[DisplaySegmentSelect]=~(0x1<<i);
  39   2          if(P1^0==0)
  40   2            {
  41   3             KeyScanCode=2*i+1;
  42   3           break;//退出键盘扫描循环
  43   3             }
  44   2           
  45   2           else if(P1^1==0)
  46   2             {
  47   3             KeyScanCode=2*i+2;
  48   3            break;//退出键盘扫描循环 
  49   3             }
  50   2          
  51   2           }
  52   1      
  53   1        ///////////////////////////////////////  //确定按键是否稳定按下或已经抬起 //////////////////////////////
             -/////////
C51 COMPILER V8.02   GLOBAL                                                                08/22/2008 11:51:52 PAGE 2   

  54   1        //确定按键是否稳定按下或已经抬起
  55   1        //==============================
  56   1        if(KeyScanCode)
  57   1        {//本次中断有键按下.如果按键已经稳定按下(KeyDownFlag非0)了,则不做任何事,否则处理20ms去抖动延时.
  58   2          if(!KeyDownFlag)
  59   2          {//如果未确定按键已经稳定按下时,处理20ms延时
  60   3            if(Key20msDelay)
  61   3            {//在20ms延时处理中,继续20ms延时处理
  62   4              Key20msDelay++;
  63   4              if(Key20msDelay>20)
  64   4              {//20ms延时时间到
  65   5                if(KeyScanCode == KeyValueTemp)
  66   5                {//本次按键扫描码与20ms延时开始时的按键扫描码相同,确定按键稳定按下
  67   6                  KeyDownFlag = 1;//标记按键稳定按下
  68   6                  KeyValue = KeyScanCode;//将按键扫描码送入按键缓冲区
  69   6                  Key20msDelay = 0;//结束20ms延时状态
  70   6                }
  71   5                else
  72   5                {//20ms延时前后的扫描码不相同,以最后一次的扫描码来启动新的20ms去抖动延时
  73   6                  KeyValueTemp = KeyScanCode;//记下20ms延时开始时的按键扫描码
  74   6                  Key20msDelay = 1;//重新进入20ms延时处理
  75   6                }
  76   5              }
  77   4            }
  78   3            else
  79   3            {//未进入20ms延时处理时,启动20ms延时处理
  80   4              KeyValueTemp = KeyScanCode;//记下20ms延时开始时的按键扫描码
  81   4              Key20msDelay = 1;//进入20ms延时处理
  82   4            }
  83   3          }
  84   2        }
  85   1        else
  86   1        {//本次中断无键按下
  87   2          if(Key20msDelay)
  88   2          {//在20ms延时处理中,继续20ms延时处理
  89   3            Key20msDelay++;
  90   3            if(Key20msDelay>8)
  91   3            {//20ms延时时间到,说明启动20ms延时的按键信号是干扰信号,直接结束20ms延时状态
  92   4              Key20msDelay = 0;//结束20ms延时状态
  93   4            }
  94   3          }
  95   2          else
  96   2          {//未进入20ms延时处理时
  97   3            KeyDownFlag = 0;//标记按键已经抬起
  98   3          }
  99   2        }  
 100   1      /*  
 101   1         XBYTE[DisplayDigitSelect]=~(0x01<<DisplayDigit);         //选择数码管显示位数    
 102   1          XBYTE[DisplaySegmentSelect]=DisplayBuffer[DisplayDigit];     //显示数字
 103   1        DisplayDigit++;
 104   1        if(DisplayDigit>=8)  
 105   1           DisplayDigit=0;
 106   1       */
 107   1      }
 108          
 109          /*
 110          //完成系统按键值转换成自定义按键值的功能.在main()的主循环中被调用
 111          //===============================================================
 112          void KeyConvert(void)
 113          {
 114            if(KeyValue)
 115            {
C51 COMPILER V8.02   GLOBAL                                                                08/22/2008 11:51:52 PAGE 3   

 116              switch(KeyValue)
 117              {
 118                case 1:  MyKey = 1; break;
 119                case 2:  MyKey = 2; break;
 120                case 3:  MyKey = 3; break;
 121                case 4:  MyKey = 4; break;
 122                case 5:  MyKey = 5; break;
 123                case 6:  MyKey = 6; break;
 124                case 7:  MyKey = 7; break;
 125                case 8:  MyKey = 8; break;
 126                case 9:  MyKey = 9; break;
 127                case 10: MyKey = 10;break;
 128                case 11: MyKey = 11;break;
 129                case 12: MyKey = 12;break;
 130                case 13: MyKey = 13;break;
 131                case 14: MyKey = 14;break;
 132                case 15: MyKey = 15;break;
 133                case 16: MyKey = 16;break;
 134              }
 135          
 136              KeyValue = 0;
 137            }
 138          }
 139          */
 140          
 141          /*
 142          ;==============================================================================
 143          ;|/
 144          ;  ----a----
 145          ; |     |
 146          ; f     b
 147          ; |     |
 148          ;  ----g----         显示字符编码区
 149          ; |     |
 150          ; e     c
 151          ; |     |
 152          ;  ----d----   .dp
 153          ;
 154          ;显示字节:7(dp),6(g),5(f),4(e),3(d),2(c),1(b),0(a)
 155          ;   
 156          ;带小数点显示时,只需将要显示的字符符号编码值或上0x80即可.
 157          ;
 158          */
 159          
 160          /*//十六进制数码字符编码
 161          //====================
 162          UNCHAR code HexChar[]={
 163            0x3F,//0: 00111111B
 164            0x06,//1: 00000110B
 165            0x5B,//2: 01011011B
 166            0x4F,//3: 01001111B
 167            0x66,//4: 01100110B
 168            0x6D,//5: 01101101B
 169            0x7D,//6: 01111101B
 170            0x07,//7: 00000111B
 171            0x7F,//8: 01111111B
 172            0x6F,//9: 01101111B
 173            0x77,//A: 01110111B
 174            0x7C,//B: 01111100B
 175            0x39,//C: 00111001B
 176            0x5E,//D: 01011110B
 177            0x79,//E: 01111001B
C51 COMPILER V8.02   GLOBAL                                                                08/22/2008 11:51:52 PAGE 4   

 178            0x71 //F: 01110001B
 179            };
 180          
 181          //其它字符编码
 182          //============
 183          UNCHAR code Char_H = 0x76;//01110110B
 184          UNCHAR code Char_L = 0x38;//00111000B
 185          UNCHAR code Char_O = 0x3F;//00111111B
 186          UNCHAR code Char_Colon = 0x09;//00001001B 冒号*/


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