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

📄 shtxx_sample_code.lst

📁 这是单片机驱动温湿度传感器SHT11温湿度传感器的源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 1   


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

stmt level    source

   1          /***********************************************************************************
   2          Project:          SHTxx demo program (V2.1)
   3          Filename:         SHTxx_Sample_Code.c    
   4          
   5          Prozessor:        80C51 family
   6          Compiler:         Keil Version 6.14
   7          
   8          Autor:            MST
   9          Copyrigth:        (c) Sensirion AG      
  10          ***********************************************************************************/
  11          
  12          //#include <AT89s53.h> //Microcontroller specific library, e.g. port definitions
  13          #include <SST89x5x4.H>
  14          
  15          #include <intrins.h> //Keil library (is used for _nop()_ operation)  
  16          #include <math.h>    //Keil library  
  17          #include <stdio.h>   //Keil library
  18          
  19          #define uchar unsigned  char
  20          #define uint unsigned int
  21          #define lcd_clr 0x01
  22          #define you_on  0x0f
  23          #define ad_n 12         //ad测试次数
  24          #define  _Nop()  _nop_()        /*定义空指令*/
  25          
  26          /*
  27          keyboard        data
  28          0               12
  29          1               8
  30          2               4
  31          3               0
  32          4               1
  33          5               2
  34          6               3
  35          7               5
  36          8               6
  37          9               7
  38          10-ok   9
  39          11              10
  40          12-wrong11
  41          13              13
  42          14              14
  43          15              15
  44          */      
  45          
  46          //全局变量定义
  47          sbit rs = P1^7;
  48          sbit rw  = P1^6;
  49          sbit e = P2^1;
  50          sbit lcd_deng = P2^3;
  51          sbit le = P2^6;
  52          sbit ce = P2^4;
  53          
  54          
  55          //ad_bits
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 2   

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

 117          
 118          
 119          //总线控制--使能和释放
 120          void ad_en(void);
 121          void lcd_en(void);
 122          void three_en(void);
 123          
 124          typedef union 
 125          {
 126                  unsigned int i;
 127                  float f;
 128          } value;
 129          //value 代表上面的一个共用体类型。可用来定义变量
 130          //----------------------------------------------------------------------------------
 131          // modul-var
 132          //----------------------------------------------------------------------------------
 133          enum {TEMP,HUMI};
 134          
 135          //#define       DATA    P1_1
 136          //#define       SCK     P1_0
 137          sbit DATA = P3^5;
 138          sbit SCK = P1^5;
 139          
 140          #define noACK 0
 141          #define ACK   1
 142                                      //adr  command  r/w
 143          #define STATUS_REG_W 0x06   //000   0011    0
 144          #define STATUS_REG_R 0x07   //000   0011    1
 145          #define MEASURE_TEMP 0x03   //000   0001    1
 146          #define MEASURE_HUMI 0x05   //000   0010    1
 147          #define RESET        0x1e   //000   1111    0
 148          
 149          
 150          
 151          /*
 152          void service_int0() interrupt 0 using 0         //带数组型全局变量
 153          {
 154                  uint aa = 0;
 155          //      IE0 = 0;        //先清中断标志
 156                  uchar ad_data[2]={0};
 157                  ad_en();
 158                  hben = 1;
 159                  lben = 0;
 160                  delay(2);
 161                  ad_data[0] = P0;
 162                  delay(2);
 163                  hben = 0;
 164                  lben = 1;
 165                  delay(2);
 166                  ad_data[1] = P0;
 167          
 168          //      EX0 = 1;
 169          //      IT0 = 1;
 170          //      ad_data[1] = ad_data&0x1f;
 171          //      ad_data[1] = ad_data[1]<<8;
 172          //      return(ad_data[1]<<8+ad_data[0]);
 173          }
 174          */
 175          
 176          uint ad_ce(void)
 177          {
 178   1      //ad读
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 4   

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

 241   1              lcd_dis_num(a[0]);
 242   1              lcd_dis_num(a[1]);
 243   1      */      
 244   1              lcd_add(3,1);
 245   1              for(i=0;i<ad_n;i++)
 246   1              {
 247   2                      lcd_dis_num(a[i]);
 248   2              }
 249   1      
 250   1              return(0);
 251   1      
 252   1      }
 253          
 254          void lcd_dis_time(void)         //时钟显示函数
 255          {
 256   1              uchar i=0;
 257   1              i = IRcvStr_8(0xd0,0x00);
 258   1              i = ((i&0x70)>>4)*10+(i&0x0f);
 259   1              lcd_add(3,7);
 260   1              lcd_dis_num(i);
 261   1              i = IRcvStr_8(0xd0,0x01);
 262   1              i = ((i&0x70)>>4)*10+(i&0x0f);
 263   1              lcd_add(3,4);
 264   1              lcd_dis_num(i);
 265   1              i = IRcvStr_8(0xd0,0x02);
 266   1              i = ((i&0x30)>>4)*10+(i&0x0f);
 267   1              lcd_add(3,1);
 268   1              lcd_dis_num(i);
 269   1              i = IRcvStr_8(0xd0,0x03);
 270   1              i = i&0x07;
 271   1              lcd_add(4,1);
 272   1              lcd_dis_num(i);
 273   1              i = IRcvStr_8(0xd0,0x04);
 274   1              i = ((i&0x30)>>4)*10+(i&0x0f);
 275   1              lcd_add(2,7);
 276   1              lcd_dis_num(i);
 277   1              i = IRcvStr_8(0xd0,0x05);
 278   1              i = ((i&0x10)>>4)*10+(i&0x0f);
 279   1              lcd_add(2,4);
 280   1              lcd_dis_num(i);
 281   1              i = IRcvStr_8(0xd0,0x06);
 282   1              i = ((i&0xf0)>>4)*10+(i&0x0f);
 283   1              lcd_add(2,1);
 284   1              lcd_dis_num(i);
 285   1      }
 286          
 287          void set_time(uchar sec, uchar min, uchar hr, uchar dy, uchar dt,uchar mn,uchar yr)             //时钟设置sec, min, h
             -r, dy, dt, mn, yr
 288          {
 289   1              uchar i;
 290   1              lcd_add(4,1);
 291   1              i = ISendStr_8(0xd0,0x00,0);
 292   1              lcd_wrd(0x30+(uchar)i);
 293   1              sec = ((sec/10)<<4)+(sec%10);
 294   1              i = ISendStr_8(0xd0,0x00,sec);
 295   1              lcd_wrd(0x30+(uchar)i);
 296   1              min = ((min/10)<<4)+(min%10);
 297   1              i = ISendStr_8(0xd0,0x01,min);
 298   1              lcd_wrd(0x30+(uchar)i);
 299   1              hr = ((hr/10)<<4)+(hr%10);
 300   1              i = ISendStr_8(0xd0,0x02,hr);
 301   1              lcd_wrd(0x30+(uchar)i);
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 6   

 302   1      
 303   1              i = ISendStr_8(0xd0,0x03,dy);
 304   1              lcd_wrd(0x30+(uchar)i);
 305   1              dt = ((dt/10)<<4)+(dt%10);

⌨️ 快捷键说明

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