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

📄 luminometer.lst

📁 KEIL C开发的光照度计
💻 LST
字号:
C51 COMPILER V7.20   LUMINOMETER                                                           06/15/2008 00:11:55 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE LUMINOMETER
OBJECT MODULE PLACED IN luminometer.OBJ
COMPILER INVOKED BY: D:\Program Files\KeilC\C51\BIN\C51.EXE luminometer.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <sst89x5x4.h>
   2          #include <intrins.h>
   3          
   4          sbit clk=P1^0;     //AD时钟
   5          sbit dout=P1^1;    //AD数据
   6          sbit csAd=P1^2;   //AD片选
   7          sbit csSeg=P1^3;  //段码锁存
   8          sbit csDig=P1^4;  //位码锁存
   9          sbit beep=P2^1;   //蜂鸣器
  10          sbit P22=P2^2;    //测量
  11          sbit P23=P2^3;    //循环查看
  12          
  13          #define STOP 0;
  14          #define one() (lex[measureTime+lookUpTime]%10) ;
  15          #define ten() ((lex[measureTime+lookUpTime]%100)/10) ;
  16          #define hundred()  ((lex[measureTime+lookUpTime]%1000)/100)     ;
  17          #define thousand() (lex[measureTime+lookUpTime]/1000) ;
  18          
  19          //段码表
  20          unsigned char code segCode[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,// 0--9
  21                                                                       0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,//带小数点0--9
  22                                                                           0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};   // A, b, C, d, E, F, 消隐
  23          //位码表
  24          unsigned char code csCode[] = {0x70,0xb0,0xd0,0xe0};     
  25          
  26          
  27          static unsigned char voltageTemp[5];
  28          static unsigned char measureTime;
  29          static char lookUpTime;
  30          static unsigned char number[4];
  31          static unsigned char digit;
  32          static unsigned int lex[5];
  33          
  34          static bit start;               // 开始测量
  35          static bit keyCurrent;  //当前按键判断,为1表示邮件按下
  36          static bit keyBefore;   //前一次是否有键按下
  37          
  38          void initSystem();
  39          void display(unsigned char seg,unsigned char cs);
  40          void adConvert();
  41          
  42          
  43          void main()
  44          {
  45   1              initSystem();
  46   1      
  47   1              TR0=1;      //开启定时器,系统开始工作
  48   1              TR1=1;
  49   1      
  50   1              while(1)
  51   1              {
  52   2                do{}while(!start); //开始键按下
  53   2                start=STOP;  
  54   2                TR0=0;                         //关中断以便开始AD采样
  55   2                TR1=0;
C51 COMPILER V7.20   LUMINOMETER                                                           06/15/2008 00:11:55 PAGE 2   

  56   2                adConvert();
  57   2                number[3]=one();
  58   2                number[2]=ten();
  59   2                number[1]=hundred();
  60   2                number[0]=thousand();
  61   2                TR0=1;
  62   2                TR1=1;
  63   2              }       
  64   1      }
  65          
  66          /**************************系统初始化***********************/
  67          
  68          void initSystem()
  69          {
  70   1              start=1;
  71   1              beep=0;
  72   1              measureTime=0;
  73   1              lookUpTime=0;
  74   1              keyCurrent=0;
  75   1              keyBefore=0;
  76   1              digit=0;
  77   1              TMOD=0X11;        //T0工作在定时模式
  78   1              TH0=0Xf5;         //TO定时3ms做数码管扫描
  79   1              TL0=0X33;
  80   1              TH1=0XB7;     //T1定时20ms做键盘扫描
  81   1              TL1=0XFF;
  82   1              IP=0X08;      //T1优先级高
  83   1              EA=1;
  84   1              ET0=1;
  85   1              ET1=1;
  86   1      }
  87          
  88          /*****************定时器T0做数码管扫描***********************/
  89          
  90          void processT0()interrupt 1 using 0
  91          {
  92   1              if(digit==4) digit=0;  
  93   1              display(number[digit],digit); 
  94   1              digit++;
  95   1              TH0=0Xf5;         //TO定时3ms,扫描频率为12ms
  96   1              TL0=0X33; 
  97   1          return;
  98   1      }
  99          
 100          /*******************定时器T1做键盘扫描*************************/
 101          
 102          void processT1()interrupt 3 using 1
 103          {
 104   1              keyBefore=keyCurrent;
 105   1              if(P22==0||P23==0)
 106   1                      keyCurrent=1;
 107   1              else
 108   1                  keyCurrent=0;
 109   1          if(keyCurrent==1&&keyBefore==0)
 110   1               {     
 111   2                 if(!P22)
 112   2                 { 
 113   3                   start =1;
 114   3                       measureTime++;
 115   3                       if(measureTime>4) measureTime=0;
 116   3                 }
 117   2                 if(!P23)
C51 COMPILER V7.20   LUMINOMETER                                                           06/15/2008 00:11:55 PAGE 3   

 118   2                 {
 119   3                   lookUpTime--;
 120   3                       if((measureTime+lookUpTime)<0) lookUpTime=0;
 121   3                 }
 122   2               }
 123   1               /*
 124   1           number[3]=one();
 125   1               number[2]=ten();
 126   1               number[1]=hundred();
 127   1               number[0]=thousand();                  */
 128   1               TH1=0XB7;     //T1定时20ms做键盘扫描
 129   1               TL1=0XFF;
 130   1               return;
 131   1      } 
 132          
 133          /************************************************************
 134          函数名:数码管显示
 135          入口参数:seg 欲显示的数,如段码表所示,1~26
 136                    cs  欲显示的位,0~3
 137          
 138          ************************************************************/
 139          
 140          void display(unsigned char seg,unsigned char cs)
 141          {
 142   1              if(seg>26) seg=26;
 143   1              P0=segCode[seg];  //将数据放在P0口
 144   1              _nop_();
 145   1              _nop_();
 146   1              csSeg=1;                
 147   1              _nop_();
 148   1              _nop_();
 149   1              csSeg=0;                //锁存数据
 150   1              P2&=0x0f;           //屏蔽P2口低四位
 151   1              P2|=csCode[cs]; //将地址放在P2口高四位
 152   1              _nop_();
 153   1              _nop_();
 154   1              csDig=1;
 155   1              _nop_();
 156   1              _nop_();
 157   1              csDig=0;
 158   1      }
 159          
 160          /*****************AD转换**********************************/
 161          
 162          void adConvert()
 163          {
 164   1          char i;
 165   1              csAd=0;
 166   1              clk=0;
 167   1              for(i=7;i>=0;i--)                 //8个时钟读一个数据,从高位读起
 168   1              {
 169   2                clk=1;
 170   2                if(dout)      voltageTemp[measureTime]|=(1<<i);
 171   2                clk=0;
 172   2              }
 173   1              csAd=1;
 174   1              lex[measureTime]=voltageTemp[measureTime] * 5.0/256;  //求光照度
 175   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    442    ----
C51 COMPILER V7.20   LUMINOMETER                                                           06/15/2008 00:11:55 PAGE 4   

   CONSTANT SIZE    =     31    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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