📄 text2.lst
字号:
C51 COMPILER V7.06 TEXT2 05/09/2008 15:23:15 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include"reg52.h"
2
3 #define led P1 //宏定义P1口为数码管的数据口
4 sbit key1=P2^4; //将P2^4口映射为变量key1
5 sbit key2=P2^5; //将P2^3口映射为变量key2
6 sbit key3=P2^6; //将P2^2口映射为变量key3
7 sbit key4=P2^7; //将P2^1口映射为变量key4
8 sbit ch1=P2^3; //通过三极管进行位选,,将P2^3口映射为变量ch1
9 sbit ch2=P2^2;
10 sbit ch3=P2^1;
11 sbit ch4=P2^0;
12
13 sbit DQ=P0^2; //DQ为ds18b12温度传感器的参数
14 sbit ji=P0^1; //将P0^1口映射为变量ji,是用来驱动电机的三极管,低电平有效
15 sbit deng=P0^3; //将P0^3口映射为变量deng,是用来驱动发光二极管,低电平有效
16 sbit feng=P0^0; //将P0^0口映射为变量feng,是用来驱动蜂鸣器的三极管,低电平有效
17 unsigned char code shu[]={0x88,0xf9,0xc4,0xe0,0xb1,0xa2,0x82,0xf8,0x80,0xa0};
18 //在rom的code区定义数组shu[],长度为10,存放的是不带小数点的0-9数码管显示数据
19 unsigned char code shu2[]={0x08,0x79,0x44,0x60,0x31,0x22,0x02,0x78,0x00,0x20};
20 //在rom的code区定义数组shu2[],长度为10,存放的是有小数点的0-9数码管显示数据
21
22 void ms(unsigned int Delay) //延时1毫秒的延时函数
23 {unsigned int a;
24 1 for(;Delay>0;Delay--)
25 1 {for(a=0;a<114;a++)
26 2 {;}
27 2 }
28 1 }
29
30 /***************************************************
31 功能函数:延时
32 入口参数:time
33 ****************************************************/
34 //延时函数
35
36 void xdelay(unsigned int i) //ds18b20 的延时函数
37 {
38 1 while(i--);
39 1 }
40
41 /****************************************************
42 功能函数:DS18b20初始化
43 入口参数:
44 ****************************************************/
45 void Init_DS18B20(void)
46 {
47 1 unsigned char x=0;
48 1 DQ = 1; //DQ复位
49 1 xdelay(8); //稍做延时
50 1 DQ = 0; //单片机将DQ拉低
51 1 xdelay(80); //精确延时 大于 480us
52 1 DQ = 1; //拉高总线
53 1 xdelay(14);
54 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
55 1 xdelay(20);
C51 COMPILER V7.06 TEXT2 05/09/2008 15:23:15 PAGE 2
56 1 }
57
58 /******************************************************
59 功能函数:向DS18b20读一字节数据
60 入口参数:
61 ******************************************************/
62 ReadOneChar(void)
63 {
64 1 unsigned char i=0;
65 1 unsigned char dat = 0;
66 1 for (i=8;i>0;i--)
67 1 {
68 2 DQ = 0; // 给脉冲信号
69 2 dat>>=1;
70 2 DQ = 1; // 给脉冲信号
71 2 if(DQ)
72 2 dat|=0x80;
73 2 xdelay(4);
74 2 }
75 1 return(dat);
76 1 }
77
78 /******************************************************
79 功能函数:向DS18b20写一字节数据
80 入口参数:
81 ******************************************************/
82 WriteOneChar(unsigned char dat)
83 {
84 1 unsigned char i=0;
85 1 for (i=8; i>0; i--)
86 1 {
87 2 DQ = 0;
88 2 DQ = dat&0x01;
89 2 xdelay(5);
90 2 DQ = 1;
91 2 dat>>=1;
92 2 }
93 1
94 1 }
95
96 /******************************************************
97 功能函数:向DS18b20读温度值
98 入口参数:
99 出口参数:t
100 ******************************************************/
101 unsigned ReadTemperature(void)
102 {
103 1 unsigned char a=0;
104 1 unsigned char b=0;
105 1 unsigned int t=0;
106 1 float tt=0;
107 1 Init_DS18B20();
108 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
109 1 WriteOneChar(0x44); // 启动温度转换
110 1 Init_DS18B20();
111 1 WriteOneChar(0xCC); //跳过读序号列号的操作
112 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
113 1 a=ReadOneChar();
114 1 b=ReadOneChar();
115 1 t=b;
116 1 t<<=8;
117 1 t=t|a;
C51 COMPILER V7.06 TEXT2 05/09/2008 15:23:15 PAGE 3
118 1 tt=t*0.0625;
119 1 t= tt*10+0.5; //放大10倍输出并四舍五入
120 1 return(t);
121 1 }
122
123 main()
124 {
125 1 unsigned int k=0;
126 1 int a,b,c,d; //定义存放温度数值的变量a,b,c,d
127 1 int w=0,x=2,y=8;
128 1
129 1 while(1)
130 1 {
131 2 while(1) //显示当前温度的死循环函数
132 2 {
133 3 k=ReadTemperature(); //把ds18b20读出的值赋给变量m
134 3 a=k/1000; //将温度的最高位赋给a
135 3 b=k%1000/100; //将温度的次高位赋给b
136 3 c=k%100/10; //将温度的次次高位赋给c
137 3 d=k%10; //将温度的最低位赋给d
138 3
139 3 ch1=0; //通过每一位的三极管关断来控制该位是否亮灭,同时将
140 3 //温度传感器采回的数值分别发送到数码管上
141 3 led=shu[d];
142 3 ms(1);
143 3 ch1=1;
144 3
145 3 ch2=0;
146 3 led=shu2[c];
147 3 ms(1);
148 3 ch2=1;
149 3
150 3 ch3=0;
151 3 led=shu[b];
152 3 ms(1);
153 3 ch3=1;
154 3
155 3 ch4=0;
156 3 led=shu[a];
157 3 ms(1);
158 3 ch4=1;
159 3
160 3 if(c>=y) //判断是否大于预置安全温度
161 3 {
162 4 if(b>=x)
163 4 {
164 5 deng=0;
165 5 ji=0;
166 5 feng=0;
167 5 }
168 4 if(b<x)
169 4 {
170 5 deng=1;
171 5 ji=1;
172 5 feng=1;
173 5 }
174 4 }
175 3 if(c<y)
176 3 {
177 4 if(b>x)
178 4 {
179 5 deng=0;
C51 COMPILER V7.06 TEXT2 05/09/2008 15:23:15 PAGE 4
180 5 ji=0;
181 5 feng=0;
182 5 }
183 4 if(b<=x)
184 4 {
185 5 deng=1;
186 5 ji=1;
187 5 feng=1;
188 5 }
189 4 }
190 3 if(key1==0) break;
191 3 }
192 2
193 2 while(1) //显示进入预设温度显示的死循环函数
194 2 {
195 3 ch1=0;
196 3 led=shu[0];
197 3 ms(1);
198 3 ch1=1;
199 3
200 3 ch2=0;
201 3 led=shu2[y];
202 3 ms(1);
203 3 ch2=1;
204 3
205 3 ch3=0;
206 3 led=shu[x];
207 3 ms(1);
208 3 ch3=1;
209 3
210 3 ch4=0;
211 3 led=shu[w];
212 3 ms(1);
213 3 ch4=1;
214 3
215 3 if(key2==0)
216 3 {
217 4 ms(500);
218 4 y++;
219 4 if(y>9)y=0;
220 4 }
221 3 if(key3==0)
222 3 {
223 4 ms(500);
224 4 x++;
225 4 if(x>9)
226 4 {
227 5 w=1;
228 5 x=0;
229 5 }
230 4 if(w>1)w=0;
231 4 if(w==1)
232 4 {
233 5 if(x>2)
234 5 {
235 6 x=2;
236 6 y=5;
237 6 }
238 5 }
239 4 }
240 3 if(key4==0)
241 3 {
C51 COMPILER V7.06 TEXT2 05/09/2008 15:23:15 PAGE 5
242 4 ms(500);
243 4 x--;
244 4 if(x<0)
245 4 {
246 5 x=9;
247 5 w=0;
248 5 }
249 4 }
250 3 if(key1==0)break;
251 3 }
252 2 }
253 1 }
254
255
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 731 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 16
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -