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

📄 shtxx_self.lst

📁 这是单片机驱动温湿度传感器SHT11温湿度传感器的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.07   SHTXX_SELF                                                            06/14/2007 21:21:35 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE SHTXX_SELF
OBJECT MODULE PLACED IN shtxx_self.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE shtxx_self.c COMPACT BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <SST89x5x4.H>
   2          
   3          #include <intrins.h> //Keil library (is used for _nop()_ operation)  
   4          #include <math.h>    //Keil library  
   5          #include <stdio.h>   //Keil library
   6          
   7          typedef union 
   8          { unsigned int i;
   9            float f;
  10          } value;
  11          value humi_val,temp_val;
  12          //----------------------------------------------------------------------------------
  13          // modul-var
  14          //----------------------------------------------------------------------------------
  15          enum {TEMP,HUMI};
  16          
  17          //#define       DATA    P1_1
  18          //#define       SCK     P1_0
  19          sbit DATA = P3^5;
  20          sbit SCK = P1^5;
  21          
  22          
  23          #define noACK 0
  24          #define ACK   1
  25                                      //adr  command  r/w
  26          #define STATUS_REG_W 0x06   //000   0011    0
  27          #define STATUS_REG_R 0x07   //000   0011    1
  28          #define MEASURE_TEMP 0x03   //000   0001    1
  29          #define MEASURE_HUMI 0x05   //000   0010    1
  30          #define RESET        0x1e   //000   1111    0
  31          
  32          #define uchar unsigned  char
  33          #define uint unsigned int
  34          #define lcd_clr 0x01
  35          #define you_on  0x0f
  36          #define ad_n 12         //ad测试次数
  37          #define  _Nop()  _nop_()        /*定义空指令*/
  38          
  39          /*
  40          keyboard        data
  41          0               12
  42          1               8
  43          2               4
  44          3               0
  45          4               1
  46          5               2
  47          6               3
  48          7               5
  49          8               6
  50          9               7
  51          10-ok   9
  52          11              10
  53          12-wrong11
  54          13              13
  55          14              14
C51 COMPILER V7.07   SHTXX_SELF                                                            06/14/2007 21:21:35 PAGE 2   

  56          15              15
  57          */      
  58          
  59          //全局变量定义
  60          sbit rs = P1^7;
  61          sbit rw  = P1^6;
  62          sbit e = P2^1;
  63          sbit lcd_deng = P2^3;
  64          sbit le = P2^6;
  65          sbit ce = P2^4;
  66          
  67          
  68          //ad_bits
  69          
  70          sbit sta = P3^2;
  71          sbit lben = P3^6;
  72          sbit hben = P3^7;
  73          //sbit ce = P2^4; 
  74          
  75          
  76          
  77          
  78          /*端口位定义*/
  79          sbit SDA = P3^3;            /*模拟I2C数据传送位*/
  80          sbit SCL = P1^4;            /*模拟I2C时钟控制位*/
  81          sbit WP = P1^3; 
  82          /*状态标志*/
  83          bit ack;                 /*应答标志位*/
  84          uchar s;
  85          //uchar ad_data[2]={0};
  86          
  87          uchar humi_s = 0;
  88          uchar temp_s = 0;
  89          
  90          
  91          
  92          //函数申明
  93          void lcd_ini(void);     
  94          void lcd_wrc(uchar com);
  95          void lcd_wrd(uchar dat);
  96          void lcd_checkbusy();
  97          void delay(uchar n);
  98          void ldelay(uchar n);
  99          void lcd_on();
 100          void lcd_off();
 101          uchar lcd_read_ac();
 102          void lcd_dis_num(uint dat);
 103          void lcd_dis_ch(uchar h,uchar l);
 104          void lcd_add(uchar h,uchar l);
 105          
 106          //keyboard
 107          uchar key_data(void);
 108          
 109          
 110          //i2c相关函数
 111          void Start_I2c();               //起动总线函数
 112          void Stop_I2c();                //结束总线函数
 113          void  SendByte(uchar c);                //字节数据传送函数send
 114          uchar  RcvByte();               //字节数据传送函数 receive
 115          void Ack_I2c(bit a);            //主控器进行应答信号
 116          bit ISendStr_8(uchar add,uchar son_add,uchar dat);              //向子地址为8位的器件发送多字节数据函数 
 117          bit ISendStr_16(uchar add,uint son_add,uchar dat);              //向子地址为16位的器件发送多字节数据函数 
C51 COMPILER V7.07   SHTXX_SELF                                                            06/14/2007 21:21:35 PAGE 3   

 118          uchar IRcvStr_8(uchar add,uchar son_add);               //向子地址为8位的器件读取多字节数据函数
 119          uchar IRcvStr_16(uchar add,uint son_add);               //向子地址为16位的器件读取多字节数据函数
 120          
 121          
 122          
 123          //时钟相关
 124          void lcd_dis_time(void);                //时钟显示函数
 125          void set_time(uchar sec, uchar min, uchar hr, uchar dy, uchar dt,uchar mn,uchar yr);            //时钟设置sec, min, 
             -hr, dy, dt, mn, yr
 126          
 127          //ad相关
 128          uint ad_ce(void);
 129          uint ad_ce_n(void);
 130          
 131          
 132          
 133          
 134          //总线控制--使能和释放
 135          void ad_en(void);
 136          void lcd_en(void);
 137          
 138          void three_open(void);
 139          void three_close(void);
 140          
 141          struct basic
 142          {
 143                  uchar year;
 144                  uchar month;
 145                  uchar date;
 146                  uchar day;
 147                  uchar hour;
 148                  uchar minute;
 149                  uchar second;
 150                  uchar temp;
 151                  uchar humi;
 152          };
 153          struct basic b_data={0,0,0,0,0,0,0,0,0};
 154          
 155          
 156          /*
 157          void service_int0() interrupt 0 using 0         //带数组型全局变量
 158          {
 159                  uint aa = 0;
 160          //      IE0 = 0;        //先清中断标志
 161                  uchar ad_data[2]={0};
 162                  ad_en();
 163                  hben = 1;
 164                  lben = 0;
 165                  delay(2);
 166                  ad_data[0] = P0;
 167                  delay(2);
 168                  hben = 0;
 169                  lben = 1;
 170                  delay(2);
 171                  ad_data[1] = P0;
 172          
 173          //      EX0 = 1;
 174          //      IT0 = 1;
 175          //      ad_data[1] = ad_data&0x1f;
 176          //      ad_data[1] = ad_data[1]<<8;
 177          //      return(ad_data[1]<<8+ad_data[0]);
 178          }
C51 COMPILER V7.07   SHTXX_SELF                                                            06/14/2007 21:21:35 PAGE 4   

 179          */
 180          
 181          uint ad_ce(void)
 182          {
 183   1      //ad读
 184   1              uchar i=0;
 185   1              uchar v=0;
 186   1              uint dat_ad=0;
 187   1      //              if(sta == 0)
 188   1                      while(sta == 0)
 189   1                      {
 190   2                              P0 = 0XFF;
 191   2                              delay(10);
 192   2      
 193   2      //                      if(sta == 0)
 194   2      //                      {
 195   2      //                              P0 = 0XFF;
 196   2                                      lben = 0;
 197   2                                      hben = 1;
 198   2                                      ad_en();
 199   2                                      _nop_();
 200   2                                      i = P0;
 201   2                                      ce = 1;
 202   2                                      _nop_();
 203   2      
 204   2                                      hben = 0;
 205   2                                      lben = 1;
 206   2                                      ad_en();
 207   2                                      _nop_();
 208   2                                      v = P0&0x0f;
 209   2                                      dat_ad = v*256+i;
 210   2      
 211   2      //                              lcd_en();
 212   2      //                              lcd_add(2,1);
 213   2      //                              lcd_dis_num(v);
 214   2      //                              lcd_dis_num(i);
 215   2      //                              lcd_dis_num(dat_ad);
 216   2      //                              dat_ad_xian = (float)(dat_ad*1.28/2.048);
 217   2      //                              dat_ad_xian = (float)(dat_ad/2.048);
 218   2      //                              lcd_dis_num((uint)dat_ad_xian);
 219   2      //                              v = P0&0X30;
 220   2      //                              v = v>>4;
 221   2      //                              lcd_dis_num(v);
 222   2      //                              ldelay(80);
 223   2      //                      }
 224   2                      
 225   2                      }
 226   1                      return(dat_ad);
 227   1      //ad读结束
 228   1      }
 229          
 230          uint ad_ce_n(void)              //ad测试n(ad_n)次取平均
 231          {
 232   1              uchar i=0;
 233   1              uchar m=0;
 234   1              uchar n=0;
 235   1              uint a[ad_n]={0};
 236   1      
 237   1              for(i=0;i<ad_n;i++)
 238   1              {
 239   2                      a[i]=ad_ce();
 240   2                      delay(10);
C51 COMPILER V7.07   SHTXX_SELF                                                            06/14/2007 21:21:35 PAGE 5   

 241   2              }
 242   1      /*
 243   1              a[0] = ad_ce();
 244   1              a[1] = ad_ce();
 245   1              lcd_add(3,1);
 246   1              lcd_dis_num(a[0]);
 247   1              lcd_dis_num(a[1]);
 248   1      */      
 249   1              lcd_add(3,1);
 250   1              for(i=0;i<ad_n;i++)
 251   1              {
 252   2                      lcd_dis_num(a[i]);
 253   2              }
 254   1      
 255   1              return(0);
 256   1      
 257   1      }
 258          
 259          void lcd_dis_time(void)         //时钟显示函数
 260          {
 261   1              uchar i=0;
 262   1              i = IRcvStr_8(0xd0,0x00);
 263   1              i = ((i&0x70)>>4)*10+(i&0x0f);
 264   1              lcd_add(3,7);
 265   1              lcd_dis_num(i);
 266   1              i = IRcvStr_8(0xd0,0x01);
 267   1              i = ((i&0x70)>>4)*10+(i&0x0f);
 268   1              lcd_add(3,4);
 269   1              lcd_dis_num(i);
 270   1              i = IRcvStr_8(0xd0,0x02);
 271   1              i = ((i&0x30)>>4)*10+(i&0x0f);
 272   1              lcd_add(3,1);
 273   1              lcd_dis_num(i);
 274   1              i = IRcvStr_8(0xd0,0x03);
 275   1              i = i&0x07;
 276   1              lcd_add(4,1);
 277   1              lcd_dis_num(i);
 278   1              i = IRcvStr_8(0xd0,0x04);
 279   1              i = ((i&0x30)>>4)*10+(i&0x0f);
 280   1              lcd_add(2,7);
 281   1              lcd_dis_num(i);

⌨️ 快捷键说明

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