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

📄 wsd.lst

📁 湿度采集模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   WSD                                                                   10/19/2004 21:04:48 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE WSD
OBJECT MODULE PLACED IN wsd.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE wsd.c BROWSE DEBUG OBJECTEXTEND SRC(.\wsd.SRC)

line level    source

   1          /*-----------------------------------------
   2          编者:吴威  04.09.16
   3          -----------------------------------------*/
   4          #include <REGX52.H>
   5          #define  uchar unsigned char
   6          #define  fchar signed char
   7          #define  uint  unsigned int
   8          /*--------------------------------*/
   9          sbit K1=P1^0;               
  10          sbit K2=P1^1;               
  11          sbit K3=P1^2;               
  12          sbit K4=P1^3;     
  13          
  14          sbit SER=P2^5;           //14,8位串行输入
  15          sbit RCLK1=P2^6;           //12琐存
  16          sbit SRCLK=P2^7;           //11时钟   
  17          
  18          sbit LED1=P0^0;               
  19          sbit LED2=P0^1;               
  20          sbit LED3=P0^2;               
  21          sbit LED4=P0^3;     
  22          sbit LED5=P0^4;               
  23          sbit LED6=P0^5;               
  24          sbit LED7=P0^6;               
  25          sbit LED8=P0^7;  
  26          sbit ds1820=P2^0;
  27          //-----------------------------
  28          uchar bdata x;
  29          sbit x0     =x^7;
  30          sbit x1     =x^6;
  31          sbit x2     =x^5;
  32          sbit x3     =x^4;
  33          //-----------------------------
  34          uchar data TAB[10],xs1[8],msn=50;
  35          uint plz,wdz;
  36          //-----------------------------
  37          extern  void d25045(uchar x);
  38          //-----------------------------
  39          uchar code lcd1[17]={0x14,0xB7,0x2C,0x25,0x87,
  40                               0x45,0x44,0x37,0x04,0x05,
  41                                                   0x7F,0xEF,0xFD,0xc4,0xFF};
  42                                                  //显示0--F 
  43          uint code SDTAB[101]=
  44                 {
  45                   7285,7276,7264,7252,7240,7228,7216,7204,7192,7180,
  46                           7168,7156,7144,7132,7120,7108,7096,7084,7072,7060,
  47                           7048,7036,7024,7012,7000,6988,6976,6964,6952,6940,
  48                           6928,6916,6904,6892,6880,6868,6856,6844,6832,6820,
  49                           6808,6796,6784,6772,6760,6748,6736,6724,6712,6700,
  50                           6688,6675,6664,6652,6640,6628,6616,6604,6592,6580,
  51                           6568,6556,6544,6532,6520,6508,6496,6484,6472,6460,
  52                           6448,6436,6424,6412,6400,6388,6376,6364,6352,6340,
  53                           6328,6316,6304,6292,6280,6268,6256,6244,6232,6220,
  54                           6088,6076,6064,6052,6040,6028,6016,6004,5992,5980,
  55                          };
C51 COMPILER V7.20   WSD                                                                   10/19/2004 21:04:48 PAGE 2   

  56          //-----------------------------
  57          void delay1(uint ms)
  58          {
  59   1      uint i;
  60   1      for(i=0;i<ms;i++);            //Feed the dog
  61   1      }
  62          //****************************/
  63          void d595(uchar temp)
  64          {
  65   1      uchar j;
  66   1      for (j=0;j<8;j++)
  67   1         {
  68   2           temp=temp>>1; 
  69   2               SER=CY; 
  70   2               SRCLK=1; SRCLK=0;
  71   2         }
  72   1       RCLK1=0; RCLK1=1;
  73   1      }
  74          /*-------------------------------*/
  75          uint cjtemp(void)
  76          {uint z; 
  77   1      #pragma asm
  78   1      GET_TEMP:
  79   1              //CLR EA                ;使用ds1820一定要禁止任何中断产生
  80   1              ACALL INT            ;调用初使化子程序
  81   1              MOV A,#0CCH
  82   1              ACALL WRITE     ;送入跳过ROM命令
  83   1              MOV A, #44H
  84   1              ACALL WRITE     ;送入温度转换命令
  85   1              ACALL INT           ;温度转换完全,再次初使化ds1820
  86   1              MOV A,#0CCH
  87   1              ACALL WRITE     ;送入跳过ROM命令
  88   1              MOV A,#0BEH
  89   1              ACALL WRITE     ;送入读温度暂存器命令
  90   1              ACALL READ
  91   1              mov r7,a             ;读出温度值低字节存入R7
  92   1              ACALL READ
  93   1              ;lr ACC.7
  94   1              mov r6,a             ;读出谩度值高字节存入R6
  95   1              SETB EA
  96   1           RET
  97   1        INT:   
  98   1              CLR EA                  ;初始化ds1820子程序
  99   1           L0:CLR ds1820           ;ds1820总线为低复位电平87460452
 100   1              MOV R2,#200
 101   1           L1:CLR ds1820
 102   1              DJNZ R2,L1           ;总线复位电平保持400us
 103   1              SETB ds1820             ;释放ds1820总线
 104   1              MOV R2,#30
 105   1           L4:DJNZ R2,L4         ;释放ds1820总线保持60us
 106   1              CLR C                    ;清存在信号(存在C=0,不存在C=1)
 107   1              ORL C,ds1820
 108   1              ;JC L0
 109   1              MOV R6,#80
 110   1           L5:ORL C,ds1820
 111   1              JC L3
 112   1              DJNZ R6,L5
 113   1              ;AJMP L0
 114   1           L3:MOV R2,#240
 115   1           L2:DJNZ R2,L2    
 116   1              SETB EA
 117   1           RET
C51 COMPILER V7.20   WSD                                                                   10/19/2004 21:04:48 PAGE 3   

 118   1      WRITE:                         ;向ds1820写操作命令子程序
 119   1              CLR EA
 120   1              MOV R3,#8           ;写入ds1820的bit数,一个字节8个bit
 121   1          WR1:SETB ds1820
 122   1              MOV R4,#8
 123   1              RRC A                     ;把一个字节data(A)分成8个bit环移给 C
 124   1              CLR ds1820                 ;开始写入ds1820总线要处于复位(低)状态
 125   1          WR2:DJNZ R4,WR2     ;ds1820总线复位保持16us
 126   1              MOV ds1820,C               ;写入一个bit
 127   1              MOV R4,#20
 128   1          WR3:DJNZ R4,WR3     ;等待40us
 129   1              DJNZ R3,WR1          ;写入下一个bit 
 130   1              SETB ds1820                ;重新释放ds1820总线
 131   1                      SETB EA
 132   1           RET
 133   1      READ:
 134   1              CLR EA
 135   1              MOV R6,#8            ;连续读8个bit
 136   1          RE1:CLR ds1820           ;读前总线保持为低
 137   1              MOV R4,#4
 138   1              NOP
 139   1              SETB ds1820             ;开始读,总线释放
 140   1          RE2:DJNZ R4,RE2     ;持续8us
 141   1              MOV C,ds1820           ;从ds1820总线读得一个bit
 142   1              RRC A                    ;把读得的位值环移给 A
 143   1              MOV R5,#30
 144   1          RE3:DJNZ R5,RE3     ;持续60us
 145   1              DJNZ R6,RE1         ;读下一个bit
 146   1              SETB ds1820              ;重新释放ds1820总线
 147   1                      SETB EA
 148   1           RET          
 149   1      #pragma endasm
 150   1      
 151   1      return z;
 152   1      }
 153          //--------------------------------
 154          uint wdcl(void)
 155          {uint wdz;
 156   1      wdz=cjtemp();
 157   1      if((wdz>>15)==1)
 158   1        {wdz=~wdz;}
 159   1        wdz=((0x0ff0&wdz)>>4)*10+((0x0f&wdz)*6/10);
 160   1        if(wdz>1260){wdz=0;}
 161   1      return wdz;
 162   1      }
 163          /*-------------------------------*/
 164          uint RDSDZ(void)
 165          {uchar i=0,z=0;
 166   1      while(z<100)
 167   1       {
 168   2       if(plz<SDTAB[i]){i++;}
 169   2       else{z=101;}
 170   2       }
 171   1      return i;
 172   1      }
 173          //-----------------------------
 174          void AJ(void)
 175          {uchar a,b,c;
 176   1       uint Collect;
 177   1       if(K1=1,K1==0)
 178   1         {
 179   2        if(K4=1,K4==0){d25045(2);x0=0;}
C51 COMPILER V7.20   WSD                                                                   10/19/2004 21:04:48 PAGE 4   

 180   2         else x0=1;
 181   2              b++;
 182   2              if(b>6){b=1;}
 183   2              switch(b)
 184   2             {
 185   3                case 1:  a=xs1[0];               break;
 186   3                case 2:  a=xs1[1];               break;
 187   3                    case 3:  a=xs1[2];               break;
 188   3                        case 4:  a=xs1[3];c=xs1[6];      break;
 189   3                case 5:  a=xs1[4];c=xs1[7];      break;
 190   3                        case 6:  a=xs1[5];               break;
 191   3             }
 192   2              delay1(800);
 193   2         }
 194   1       if(x0==1)
 195   1        {
 196   2        if(K2=1,K2==0)
 197   2         {
 198   3         a++;
 199   3         x0=1;
 200   3         delay1(200);
 201   3         }
 202   2        if(K3=1,K3==0)
 203   2         {
 204   3         a--;
 205   3         x0=1;
 206   3         delay1(200);
 207   3         }
 208   2        if(K4=1,K4==0)
 209   2         {
 210   3         c=~c;
 211   3         delay1(200);
 212   3         }
 213   2         if(b==1)
 214   2         {
 215   3          if(a>100){a=0;}

⌨️ 快捷键说明

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