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

📄 text11.lst

📁 电压监控保护程序,多位数码显示,保护电压,和检测
💻 LST
字号:
C51 COMPILER V7.50   TEXT11                                                                07/27/2005 15:52:50 PAGE 1   


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

line level    source

   1          
   2          #include <stdio.h>
   3          #include <reg51.h>
   4          
   5          // 0 - 9 的编码
   6          unsigned char code table[] = { 0x11,0xb7,0x29,0x23,0x87,0x43,0x41,0x37,0x01,0x03,0x00 };
   7          unsigned int count2;
   8          
   9          //第1-6 位的片选线
  10          unsigned char code dig[] = { 0x7f,0xfd,0xdf,0xf7,0xef,0xfb };
  11          unsigned char buffer[8],val[6];
  12          unsigned char count1,scan,i,ch,KeyVal,modify,OverTime;
  13          bit fKey,fSec,Key1,Key2,Key3,OldKey1,OldKey2,OldKey3,blink,fTimer,fSTOP;
  14          unsigned long int cn,tmp;
  15          sbit P30=P3^0;
  16          
  17          void init(void); 
  18          void display(void);
  19          void Cal_cn(void);
  20          void Cal_val(void);
  21          
  22          main()
  23          {
  24   1      init();
  25   1      
  26   1      
  27   1      while(1) {
  28   2      
  29   2      
  30   2      if(fSec) { // 秒标志被置位?
  31   3      fSec = 0; // 清除秒标志
  32   3      if(!fSTOP && modify==0) {
  33   4      if(cn!=0) cn--; else { fTimer = 1; fSTOP = 1; }
  34   4      }
  35   3      display();
  36   3      }
  37   2      
  38   2      
  39   2      if(fKey) { // 有按键按下?
  40   3      fKey = 0; // 清除按件标志,并处理该按键
  41   3      
  42   3      if(KeyVal==1) { // 是调整按钮?
  43   4      fSTOP = 0; modify++; // 进入相应状态,并重置超时定时器
  44   4      if(modify==7) { modify = 0; OverTime = 0; } else OverTime = 10;
  45   4      }
  46   3      
  47   3      if(KeyVal==2 && modify!=0) { // +1按钮,相应位+1
  48   4      Cal_val();
  49   4      if(val[modify-1]<9) val[modify-1]++;
  50   4      Cal_cn();
  51   4      display(); OverTime = 10; // 刷新显示,并重置超时定时器
  52   4      }
  53   3      
  54   3      if(KeyVal==3 && modify!=0) { // -1按钮,相应位-1
  55   4      Cal_val();
C51 COMPILER V7.50   TEXT11                                                                07/27/2005 15:52:50 PAGE 2   

  56   4      if(val[modify-1]>0) val[modify-1]--;
  57   4      Cal_cn();
  58   4      display(); OverTime = 10; // 刷新显示,并重置超时定时器
  59   4      }
  60   3      
  61   3      }
  62   2      
  63   2      }
  64   1      }
  65          
  66          void init(void) {
  67   1      
  68   1      count1 = count2 = 0; scan = 0; KeyVal = 0;
  69   1      cn = 0; for(i=0;i<6;i++) val[i] = 0;
  70   1      fKey = 0; modify = 0; blink = 0; OverTime = 0; fTimer = 0; fSTOP = 0;
  71   1      Key1 = Key2 = Key3 = 0;
  72   1      OldKey1 = OldKey2 = OldKey3 = 1;
  73   1      
  74   1      for(i=0;i<6;i++) buffer[i] = 0;
  75   1      
  76   1      TCON &= 0xCF; // 初始化Timer0
  77   1      TMOD &= 0xF0; 
  78   1      TMOD |= 0x01; 
  79   1      TH0 = TL0 = 0; 
  80   1      EA = 1;
  81   1      ET0 = 1;
  82   1      TR0 = 1;
  83   1      
  84   1      }
  85          
  86          
  87          timerint () interrupt 1 {
  88   1      
  89   1      TR0 = 0;
  90   1      TL0 = 0x12;
  91   1      TH0 = 0xf7; // 0xf712 for 2.5ms
  92   1      TR0 = 1;
  93   1      
  94   1      
  95   1      if(scan==1 && !fKey) { // 扫描调整按钮
  96   2      Key1 = P30;
  97   2      if(!Key1 && OldKey1) { fKey = 1; KeyVal = 1; }
  98   2      }
  99   1      
 100   1      
 101   1      if(scan==3 && !fKey) { // 扫描+1按钮
 102   2      Key2 = P30;
 103   2      if(!Key2 && OldKey2) { fKey = 1; KeyVal = 2; }
 104   2      }
 105   1      
 106   1      if(scan==4 && !fKey) { // 扫描-1按钮
 107   2      Key3 = P30;
 108   2      if(!Key3 && OldKey3) { fKey = 1; KeyVal = 3; }
 109   2      }
 110   1      
 111   1      OldKey1 = Key1; OldKey2 = Key2; OldKey3 = Key3;
 112   1      
 113   1      
 114   1      P1 = 0xff; P3 = dig[scan];
 115   1      ch = buffer[scan]; // 依次显示6位
 116   1      
 117   1      if(modify==0) {
C51 COMPILER V7.50   TEXT11                                                                07/27/2005 15:52:50 PAGE 3   

 118   2      if(fTimer) P1 = table[ch] & 0xfe; // 倒计时结束,启动P10(P10低电平)
 119   2      else P1 = table[ch];
 120   2      }
 121   1      else if(modify==1 && blink && scan==0) P1 = 0xff;
 122   1      else if(modify==2 && blink && scan==1) P1 = 0xff;
 123   1      else if(modify==3 && blink && scan==2) P1 = 0xff; 
 124   1      else if(modify==4 && blink && scan==3) P1 = 0xff; 
 125   1      else if(modify==5 && blink && scan==4) P1 = 0xff;
 126   1      else if(modify==6 && blink && scan==5) P1 = 0xff;
 127   1      else P1 = table[ch];
 128   1      
 129   1      scan++; if(scan==6) scan = 0;
 130   1      
 131   1      count1++;
 132   1      if(count1==200) { count1 = 0; blink = ~blink; } // 0.5s闪烁定时器
 133   1      
 134   1      count2++; 
 135   1      if(count2==400) {
 136   2      count2 = 0; fSec = 1; fTimer = 0; // 秒脉冲标志置位,并关闭P10输出
 137   2      
 138   2      if(OverTime) { OverTime--; if(OverTime==0) modify = 0; } // 10s超时定时器
 139   2      
 140   2      }
 141   1      
 142   1      }
 143          
 144          void Cal_cn(void) {
 145   1      
 146   1      cn = 0;
 147   1      for(i=0;i<6;i++) {
 148   2      cn *= 10; cn += val[i];
 149   2      }
 150   1      
 151   1      }
 152          
 153          void Cal_val(void) {
 154   1      
 155   1      tmp = cn;
 156   1      for(i=0;i<6;i++) {
 157   2      val[5-i] =(unsigned char) ( tmp % 10 );
 158   2      tmp = tmp / 10;
 159   2      }
 160   1      
 161   1      }
 162          
 163          void display(void) {
 164   1      
 165   1      tmp = cn;
 166   1      for(i=0;i<6;i++) {
 167   2      buffer[5-i] =(unsigned char) ( tmp % 10 );
 168   2      tmp = tmp / 10;
 169   2      }
 170   1      
 171   1      }
 172           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    812    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.50   TEXT11                                                                07/27/2005 15:52:50 PAGE 4   

   DATA SIZE        =     31    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =     11    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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