📄 shtxx_sample_code.lst
字号:
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 + -