📄 system.lst
字号:
C51 COMPILER V8.05a SYSTEM 03/18/2009 08:40:16 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE SYSTEM
OBJECT MODULE PLACED IN system.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE system.c BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1 //--------------------------------
2 //-----湿度读取子程序 ------------
3 //--------------------------------
4 //----以下变量均为全局变量--------
5 //----温度高8位== U8T_data_H------
6 //----温度低8位== U8T_data_L------
7 //----湿度高8位== U8RH_data_H-----
8 //----湿度低8位== U8RH_data_L-----
9 //----校验 8位 == U8checkdata-----
10 //----调用相关子程序如下----------
11 //---- Delay();, Delay_10us();,COM();
12 //--------------------------------
13
14 #include <reg51.h>
15 #include <intrins.h>
16 #include <stdio.h>
17
18 typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
19 typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
20 typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
21 typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
22 typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
23 typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
24 typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长
-度) */
25 typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长
-度) */
26 //
27 #define uchar unsigned char
28 #define uint unsigned int
29 #define Data_0_time 4
30
31 sbit DIN=P2^0;
32 sbit LOAD=P2^1;
33 sbit CLK=P2^2;
34 sbit dout=P2^5;
35 sbit nullio=P2^3;
36 sbit sound =P3^2;
37 sbit mode=P1^2;
38 sbit set= P1^3;
39
40 uchar mode_flag;
41 uchar set_flag;
42
43
44 U8 U8FLAG,k;
45 U8 U8count,U8temp;
46 U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
47 U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
48 U8 U8comdata;
49 U8 outdata[5]; //定义发送的字节数
50 U8 indata[5];
51 U8 count, count_r=0;
52 U16 U16temp1,U16temp2;
53 unsigned char th,tl,hh,hl;
C51 COMPILER V8.05a SYSTEM 03/18/2009 08:40:16 PAGE 2
54 unsigned char th0,tl0,hh0,hl0;
55 bit time_flag;
56 uchar criterion_hum;
57 uchar criterion_temp;
58
59 void RH(void);
60 void s_seg(uchar ,uchar ,uchar, uchar );
61 void send(uchar ,uchar);
62 void COM(void);
63 void process(void);
64 void Delay(U16 );
65 void Delay_10us(void);
66 void key_scan(void);
67 void winkling(void);
68 void delayMs(unsigned int i);
69 void special(unsigned char i);
70 void init(void);
71 void main(void)
72 {
73 1 init();
74 1 while(1)
75 1 {
76 2 RH();//读取数据
77 2 process(); //数据处理
78 2
79 2 s_seg(th,tl,hh,hl); //显示温湿度
80 2
81 2 key_scan();//按键扫描
82 2 winkling();
83 2 criterion_temp=th0*10+tl0;
84 2 criterion_hum=hh0*10+hl0;
85 2 if ((U8T_data_H>criterion_temp)||(U8RH_data_H>criterion_hum)) sound=0;
86 2
87 2 else sound =1;
88 2 // delayMs(150);
89 2 special(180);//延时
90 2
91 2 }
92 1
93 1
94 1 }
95
96 void init(void)
97 {
98 1 // s_seg(0x81,0x82,0x83,4,5,6,7,8);
99 1 criterion_temp=19;
100 1 criterion_hum=50;
101 1 th0=criterion_temp/10;
102 1 tl0=criterion_temp%10;
103 1 hh0=criterion_hum/10;
104 1 hl0=criterion_hum%10;
105 1 }
106
107 void special(unsigned char i)
108 {
109 1 unsigned int j;
110 1 while(i--)
111 1 {
112 2 for(j = 0; j < 125; j++);
113 2 key_scan();
114 2 }
115 1 }
C51 COMPILER V8.05a SYSTEM 03/18/2009 08:40:16 PAGE 3
116
117 void delayMs(unsigned int i)
118 {
119 1 unsigned int j;
120 1 while(i--)
121 1 {
122 2 for(j = 0; j < 125; j++);
123 2 }
124 1 }
125
126
127 void key_scan(void)
128 {
129 1
130 1 if(!set)
131 1 {
132 2 delayMs(10);//延时10ms
133 2 if(!set) { set_flag ++ ;while(!set);}
134 2
135 2 }
136 1 if(!mode)
137 1 {
138 2 delayMs(10);//延时10ms
139 2 if(!mode){ mode_flag ++ ; while(!mode) ;}
140 2 } }
141
142 void COM(void)
143 {
144 1
145 1 U8 i;
146 1 for(i=0;i<8;i++)
147 1 {
148 2
149 2 U8FLAG=2;
150 2 //----------------------
151 2 // P2_1=0 ; //T
152 2 // P2_1=1 ; //T
153 2 //----------------------
154 2
155 2 while((!dout)&&U8FLAG++);
156 2 Delay_10us();
157 2 Delay_10us();
158 2 // Delay_10us();
159 2 U8temp=0;
160 2 if(dout)U8temp=1;
161 2 U8FLAG=2;
162 2 while((dout)&&U8FLAG++);
163 2
164 2 //----------------------
165 2 // P2_1=0 ; //T
166 2 // P2_1=1 ; //T
167 2 //----------------------
168 2 //超时则跳出for循环
169 2 if(U8FLAG==1)break;
170 2 //判断数据位是0还是1
171 2
172 2 // 如果高电平高过预定0高电平值则数据位为 1
173 2
174 2 U8comdata<<=1;
175 2 U8comdata|=U8temp; //0
176 2 }//rof
177 1
C51 COMPILER V8.05a SYSTEM 03/18/2009 08:40:16 PAGE 4
178 1 }
179
180
181 void send(uchar add,uchar dat)
182 {
183 1 uchar ADS,i,j;
184 1 CLK=0;
185 1 LOAD=0;
186 1 DIN=0;
187 1 i=4;
188 1 while(i<16)
189 1 {
190 2 if(i<8)
191 2 {
192 3 ADS=add;
193 3 }
194 2 else
195 2 {
196 3 ADS=dat;
197 3 }
198 2 for(j=8;j>=1;j--)
199 2 {
200 3
201 3 if((ADS&0x80)==0)
202 3 { DIN=0 ;}
203 3 else
204 3 { DIN=1;}
205 3 ADS=ADS<<1;
206 3
207 3 CLK=1;
208 3 CLK=0;
209 3 }
210 2 i=i+8;
211 2 }
212 1 LOAD=1;
213 1 }
214
215 //void s_seg(uchar X1,uchar X2,uchar X3,uchar X4,uchar X5,uchar X6,uchar X7, uchar X8)
216 void s_seg(uchar X5,uchar X6,uchar X7, uchar X8)
217 {
218 1 send(0x0c,0x01);//正常状态
219 1 send(0x0b,0x07);//设置扫描范围DIG0-7
220 1 send(0x0a,0x05);//设置亮度11/32
221 1 send(0x09,0xff);//采用译码方式
222 1
223 1 // send(0x01,X1);
224 1 // send(0x02,X2);
225 1 // send(0x03,X3);
226 1 // send(0x04,X4);
227 1 send(0x05,X5);
228 1 send(0x06,X6);
229 1 send(0x07,X7);
230 1 send(0x08,X8);
231 1 }
232
233
234
235
236
237 void RH(void)
238 {
239 1 //主机拉低18ms
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -