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