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

📄 system.lst

📁 单片机的温湿度测量系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   SYSTEM                                                               03/18/2009 08:40:16 PAGE 1   


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

line level    source

   1            //--------------------------------
   2            //-----湿度读取子程序 ------------
   3            //--------------------------------
   4            //----以下变量均为全局变量--------
   5            //----温度高8位== U8T_data_H------
   6            //----温度低8位== U8T_data_L------
   7            //----湿度高8位== U8RH_data_H-----
   8            //----湿度低8位== U8RH_data_L-----
   9            //----校验 8位 == U8checkdata-----
  10            //----调用相关子程序如下----------
  11            //---- Delay();, Delay_10us();,COM(); 
  12            //--------------------------------
  13          
  14          #include <reg51.h>
  15          #include <intrins.h> 
  16          #include <stdio.h>
  17          
  18          typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable    无符号8位整型变量  */
  19          typedef signed   char  S8;       /* defined for signed 8-bits integer variable      有符号8位整型变量  */
  20          typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable     无符号16位整型变量 */
  21          typedef signed   int   S16;      /* defined for signed 16-bits integer variable     有符号16位整型变量 */
  22          typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable     无符号32位整型变量 */
  23          typedef signed   long  S32;      /* defined for signed 32-bits integer variable     有符号32位整型变量 */
  24          typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长
             -度) */
  25          typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长
             -度) */
  26          //
  27          #define uchar unsigned char
  28          #define uint unsigned int
  29          #define   Data_0_time    4
  30          
  31          sbit DIN=P2^0;
  32          sbit LOAD=P2^1;
  33          sbit CLK=P2^2;
  34          sbit dout=P2^5;
  35          sbit nullio=P2^3;
  36          sbit sound =P3^2;
  37          sbit mode=P1^2;
  38          sbit set= P1^3;
  39          
  40          uchar mode_flag;
  41          uchar  set_flag; 
  42          
  43          
  44          U8  U8FLAG,k;
  45          U8  U8count,U8temp;
  46          U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  47          U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  48          U8  U8comdata;
  49          U8  outdata[5];  //定义发送的字节数    
  50          U8  indata[5];
  51          U8  count, count_r=0;
  52          U16 U16temp1,U16temp2;
  53          unsigned char th,tl,hh,hl;
C51 COMPILER V8.05a   SYSTEM                                                               03/18/2009 08:40:16 PAGE 2   

  54          unsigned char th0,tl0,hh0,hl0;
  55          bit time_flag;
  56          uchar criterion_hum;
  57          uchar criterion_temp;
  58          
  59          void RH(void);
  60          void s_seg(uchar ,uchar ,uchar, uchar );
  61          void send(uchar ,uchar);
  62          void  COM(void);
  63          void  process(void);
  64          void Delay(U16 );
  65          void  Delay_10us(void);
  66          void key_scan(void);
  67          void winkling(void);
  68          void delayMs(unsigned int i);
  69          void special(unsigned char i);
  70          void init(void);
  71          void main(void)
  72          {
  73   1        init();
  74   1        while(1)
  75   1        {
  76   2        RH();//读取数据
  77   2        process(); //数据处理
  78   2      
  79   2        s_seg(th,tl,hh,hl); //显示温湿度
  80   2      
  81   2        key_scan();//按键扫描
  82   2        winkling();
  83   2        criterion_temp=th0*10+tl0;
  84   2        criterion_hum=hh0*10+hl0;
  85   2        if ((U8T_data_H>criterion_temp)||(U8RH_data_H>criterion_hum)) sound=0;
  86   2      
  87   2        else sound =1;
  88   2      //  delayMs(150);
  89   2        special(180);//延时
  90   2      
  91   2        }
  92   1      
  93   1        
  94   1      }
  95          
  96          void init(void)
  97          {
  98   1      // s_seg(0x81,0x82,0x83,4,5,6,7,8);
  99   1         criterion_temp=19;
 100   1         criterion_hum=50;
 101   1         th0=criterion_temp/10;
 102   1         tl0=criterion_temp%10;
 103   1         hh0=criterion_hum/10;
 104   1         hl0=criterion_hum%10;
 105   1      }
 106          
 107          void special(unsigned char i)
 108          {
 109   1        unsigned int j;
 110   1           while(i--)
 111   1            {
 112   2               for(j = 0; j < 125; j++);
 113   2               key_scan();
 114   2             }
 115   1      }
C51 COMPILER V8.05a   SYSTEM                                                               03/18/2009 08:40:16 PAGE 3   

 116          
 117          void delayMs(unsigned int i)
 118            {
 119   1           unsigned int j;
 120   1           while(i--)
 121   1            {
 122   2               for(j = 0; j < 125; j++);
 123   2           }
 124   1       }
 125          
 126          
 127          void key_scan(void)
 128          {
 129   1        
 130   1          if(!set) 
 131   1          {
 132   2            delayMs(10);//延时10ms
 133   2              if(!set) {  set_flag ++ ;while(!set);}
 134   2              
 135   2           }
 136   1          if(!mode)
 137   1            {
 138   2            delayMs(10);//延时10ms
 139   2             if(!mode){      mode_flag ++ ; while(!mode) ;}
 140   2      }      }
 141          
 142               void  COM(void)
 143                {
 144   1           
 145   1                U8 i;
 146   1             for(i=0;i<8;i++)    
 147   1            {
 148   2          
 149   2                U8FLAG=2;
 150   2            //----------------------
 151   2                // P2_1=0 ;  //T
 152   2                // P2_1=1 ;  //T
 153   2            //---------------------- 
 154   2        
 155   2            while((!dout)&&U8FLAG++);
 156   2            Delay_10us();
 157   2            Delay_10us();
 158   2          //  Delay_10us();
 159   2              U8temp=0;
 160   2             if(dout)U8temp=1;
 161   2              U8FLAG=2;
 162   2           while((dout)&&U8FLAG++);
 163   2            
 164   2            //----------------------
 165   2                //  P2_1=0 ;  //T
 166   2               //   P2_1=1 ;  //T
 167   2           //----------------------
 168   2            //超时则跳出for循环     
 169   2             if(U8FLAG==1)break;
 170   2            //判断数据位是0还是1   
 171   2               
 172   2          // 如果高电平高过预定0高电平值则数据位为 1 
 173   2             
 174   2             U8comdata<<=1;
 175   2               U8comdata|=U8temp;        //0
 176   2             }//rof
 177   1           
C51 COMPILER V8.05a   SYSTEM                                                               03/18/2009 08:40:16 PAGE 4   

 178   1        }
 179          
 180          
 181          void send(uchar add,uchar dat)
 182          {
 183   1          uchar ADS,i,j;
 184   1          CLK=0;
 185   1        LOAD=0;
 186   1        DIN=0;
 187   1          i=4;
 188   1          while(i<16)
 189   1          {
 190   2             if(i<8)
 191   2            {
 192   3              ADS=add;
 193   3          }
 194   2          else
 195   2            {
 196   3            ADS=dat;
 197   3          }
 198   2          for(j=8;j>=1;j--)
 199   2            {
 200   3      
 201   3            if((ADS&0x80)==0)
 202   3            { DIN=0 ;}
 203   3            else 
 204   3            { DIN=1;}
 205   3                ADS=ADS<<1;
 206   3          
 207   3          CLK=1;
 208   3          CLK=0;  
 209   3           }
 210   2          i=i+8;
 211   2         }
 212   1         LOAD=1;
 213   1      }
 214          
 215          //void s_seg(uchar X1,uchar X2,uchar X3,uchar X4,uchar X5,uchar X6,uchar X7, uchar X8)
 216          void s_seg(uchar X5,uchar X6,uchar X7, uchar X8)
 217          {
 218   1         send(0x0c,0x01);//正常状态
 219   1         send(0x0b,0x07);//设置扫描范围DIG0-7
 220   1         send(0x0a,0x05);//设置亮度11/32
 221   1         send(0x09,0xff);//采用译码方式
 222   1      
 223   1        // send(0x01,X1);
 224   1        // send(0x02,X2);
 225   1        // send(0x03,X3);
 226   1        // send(0x04,X4);
 227   1         send(0x05,X5);
 228   1         send(0x06,X6);
 229   1         send(0x07,X7);
 230   1         send(0x08,X8); 
 231   1      }
 232          
 233          
 234          
 235          
 236          
 237          void RH(void)
 238            {
 239   1          //主机拉低18ms 

⌨️ 快捷键说明

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