📄 wskz_sht11.lst
字号:
C51 COMPILER V8.02 WSKZ_SHT11 04/20/2008 10:38:46 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE WSKZ_SHT11
OBJECT MODULE PLACED IN WSKZ_SHT11.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE WSKZ_SHT11.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h> //头文件
2 #include <intrins.h>
3 #include <stdio.h> //
4 #include <math.h> //Keil library
5
6 //**************************************
7
8 #define uchar unsigned char //定义一下方便使用
9 #define uint unsigned int //定义一下方便使用
10 #define ulong unsigned long //定义一下方便使用
11
12
13 #define TEMP_ML 0x03 //000 0001 1 温度命令
14 #define HUMI_ML 0x05 //000 0010 1 温度命令
15 unsigned char error ;//全局错误变量
16 unsigned char ack ;//全局应答变量
17 //float temp_zi ;//全局应答变量
18 //float humi_zi ;//全局应答变量
19 unsigned char temp_h ;//全局应答变量
20 unsigned char temp_LL ;//全局应答变量
21
22 unsigned int xianzhi_t=0;//温度显值
23 unsigned int xianzhi_h=0;//湿度显值
24
25
26 uchar setzhi_h,setzhi_l;
27 bit setbz_h,setbz_l,setkey;
28
29
30 sbit DATA =P2^6;//数据
31 sbit SCK=P2^7;//时钟
32 sbit hot =P2^0;// 加热
33 sbit motor =P2^1;// 电机
34 sbit speek =P2^2;// 声音
35 sbit set =P0^0;// 设置
36 sbit setup =P0^1;// 设置+
37 sbit setdown =P0^2;// 设置-
38
39 sbit gwei =P3^4;//个位
40 sbit swei =P3^3;//十位
41 sbit bwei =P3^2;//百位
42 sbit qwei =P3^1;//千位
43 unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳
44
45
46
47 //*******************************基本驱动程
48
49
50
51 /////////////////
52 //////////////////////
53
54
55 char read() //读一个字节 返回应答信号
C51 COMPILER V8.02 WSKZ_SHT11 04/20/2008 10:38:46 PAGE 2
56 //----------------------------------------------------------------------------------
57 // reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
58 {
59 1 unsigned char i,val=0;
60 1 temp_LL=0;
61 1 temp_h=0;
62 1 DATA=1; //释放数据总线
63 1 for (i=0x80;i>0;i/=2) //位移8位
64 1 { SCK=1; //上升沿读入
65 2 if (DATA) val=(val | i); //确定值
66 2 SCK=0;
67 2 }
68 1 DATA=0; //读应答信号,有应答为1,为应答为0 通过CPU下拉为应答
69 1 SCK=1; //第9个脉冲
70 1 _nop_(); _nop_(); _nop_(); //pulswith approx. 5 us
71 1 SCK=0;
72 1 DATA=1; //释放数据总线
73 1 temp_h=val;
74 1 val=0;
75 1
76 1 ////低8位/////////////////////////////
77 1
78 1 DATA=1; //释放数据总线
79 1 for (i=0x80;i>0;i/=2) //位移8位
80 1 { SCK=1; //上升沿读入
81 2 if (DATA) val=(val | i); //确定值
82 2 SCK=0;
83 2 }
84 1 DATA=1;//0; //不需要应答 通过CPU下拉为应答
85 1 SCK=1; //第9个脉冲
86 1 _nop_(); _nop_(); _nop_(); //pulswith approx. 5 us
87 1 SCK=0;
88 1 DATA=1; //释放数据总线
89 1 temp_LL=val;
90 1
91 1 }
*** WARNING C173 IN LINE 91 OF WSKZ_SHT11.C: missing return-expression
92 ////////////
93
94
95 char write(unsigned char value) //写一个字节 返回应答信号
96 //---------------------------------------------------------
97 {
98 1 unsigned char i ;
99 1 ack=0;
100 1 for (i=0x80;i>0;i/=2) //释放数据总线
101 1 { if (i & value) DATA=1; //写入值
102 2 else DATA=0;
103 2 SCK=1; //上升沿写入
104 2 _nop_(); _nop_(); _nop_(); //延时
105 2 SCK=0;
106 2 }
107 1 DATA=1; //释放数据总线
108 1 SCK=1; //第9个脉冲
109 1 if (DATA==1) ack=1;
110 1 //读应答信号
111 1 SCK=0;
112 1 return ack; //error=1 表示没有应答
113 1 }
114 ////////
115
116 void start_sht11(void) //启动
C51 COMPILER V8.02 WSKZ_SHT11 04/20/2008 10:38:46 PAGE 3
117 //--------------------------------------------------------
118 {
119 1 DATA=1; SCK=0; //数据为1,SCK=0
120 1 _nop_();
121 1 SCK=1; //第一个脉冲
122 1 _nop_();
123 1 DATA=0; //数据跌落
124 1 _nop_ ();
125 1 SCK=0; //完成一个脉冲
126 1 _nop_(); _nop_(); _nop_();
127 1 SCK=1; //再一个脉冲
128 1 _nop_();
129 1 DATA=1; //数据变为1
130 1 _nop_();
131 1 SCK=0; //完成该脉冲
132 1 }
133
134
135 //////////////////////////////////
136 void sht_rest(void) //复位
137
138 {
139 1 unsigned char i;
140 1 DATA=1; SCK=0; //数据为1 时钟为0
141 1 for(i=0;i<9;i++) //9 个脉冲为 复位
142 1 { SCK=1;
143 2 SCK=0;
144 2 }
145 1 start_sht11(); //启动
146 1 }
147
148 ////////////////////////////////
149
150
151 //测量温度或者是温度,返回校验值
152 text_a(unsigned char ml)
153 {
154 1 unsigned int i;
155 1
156 1 start_sht11(); //启动
157 1 write(ml);//写入测温度
158 1 if (ack==1)
159 1 {
160 2 sht_rest() ;//复位
161 2 write(ml);//写入测温度
162 2 }
163 1
164 1 //判断是否处于忙
165 1
166 1 // DATA=1;//释放数据总线
167 1 //for (i=0;i<65535;i++) if(DATA==0) break;
168 1
169 1 for (i=0;i<55535;i++){ if(DATA==0) break;else {xianshi();} }
*** WARNING C206 IN LINE 169 OF WSKZ_SHT11.C: 'xianshi': missing function-prototype
170 1
171 1
172 1 read();//读温度
173 1
174 1
175 1 }
176
177
C51 COMPILER V8.02 WSKZ_SHT11 04/20/2008 10:38:46 PAGE 4
178 /////////温湿度处理//////
179
180 text_jishuan_temp11()
181 {
182 1 error=0;
183 1 ack=0;
184 1 sht_rest() ;//复位
185 1
186 1 text_a(TEMP_ML);
187 1
188 1 text_jishuan_temp();
*** WARNING C206 IN LINE 188 OF WSKZ_SHT11.C: 'text_jishuan_temp': missing function-prototype
189 1 key();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -