📄 tempture2.lst
字号:
C51 COMPILER V8.02 TEMPTURE2 07/18/2008 03:25:32 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEMPTURE2
OBJECT MODULE PLACED IN tempture2.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE tempture2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3
4 typedef unsigned char BYTE;
5 typedef unsigned int WORD;
6 typedef bit BOOL ;
7
8 sbit rs = P2^0; //
9 sbit rw = P2^1;
10 sbit ep = P2^2;
11
12 BYTE code dis1[] = {"temp"};
13 unsigned int dis2[7]={0};
14 sbit TMDAT=P3^3;
15 WORD sdata=0;
16 WORD xiaoshu1;
17 WORD xiaoshu2;
18 WORD xiaoshu;
19 bit flag=1; //温度正负标志
20 BYTE seg7code[]={0,1,2,3,4,5,6,7,8,9};
21
22
23 delay(BYTE ms)
24 { // 延时子程序
25 1 BYTE i;
26 1 while(ms--)
27 1 {
28 2 for(i = 0; i< 250; i++)
29 2 {
30 3 _nop_();
31 3 _nop_();
32 3 _nop_();
33 3 _nop_();
34 3 }
35 2 }
36 1 }
37
38 BOOL lcd_bz()
39 { // 测试LCD忙碌状态
40 1 BOOL result;
41 1 rs = 0;
42 1 rw = 1;
43 1 ep = 1;
44 1 _nop_();
45 1 _nop_();
46 1 _nop_();
47 1 _nop_();
48 1 result = (BOOL)(P0 & 0x80);
49 1 ep = 0;
50 1 return result;
51 1 }
52
53 lcd_wcmd(BYTE cmd)
54 { // 写入指令数据到LCD
55 1 while(lcd_bz());
C51 COMPILER V8.02 TEMPTURE2 07/18/2008 03:25:32 PAGE 2
56 1 rs = 0;
57 1 rw = 0;
58 1 ep = 0;
59 1 _nop_();
60 1 _nop_();
61 1 P0 = cmd;
62 1 _nop_();
63 1 _nop_();
64 1 _nop_();
65 1 _nop_();
66 1 ep = 1;
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 _nop_();
71 1 ep = 0;
72 1 }
73
74 lcd_pos(BYTE pos)
75 { //设定显示位置
76 1 lcd_wcmd(pos | 0x80);
77 1 }
78
79 lcd_wdat(BYTE dat)
80 { //写入字符显示数据到LCD
81 1 while(lcd_bz());
82 1 rs = 1;
83 1 rw = 0;
84 1 ep = 0;
85 1 P0 = dat;
86 1 _nop_();
87 1 _nop_();
88 1 _nop_();
89 1 _nop_();
90 1 ep = 1;
91 1 _nop_();
92 1 _nop_();
93 1 _nop_();
94 1 _nop_();
95 1 ep = 0;
96 1 }
97
98 lcd_init()
99 { //LCD初始化设定
100 1 lcd_wcmd(0x38); //
101 1 delay(1);
102 1 lcd_wcmd(0x0c); //
103 1 delay(1);
104 1 lcd_wcmd(0x06); //
105 1 delay(1);
106 1 lcd_wcmd(0x01); //清除LCD的显示内容
107 1 delay(1);
108 1 }
109
110 /************************************************************
111 程序名称:复位函数
112 函数说明:向DS18B20发送484us复位信号
113 功能:
114 *************************************************************/
115 void dmsec(WORD count)
116 {
117 1 int i;
C51 COMPILER V8.02 TEMPTURE2 07/18/2008 03:25:32 PAGE 3
118 1 while(count--)
119 1 {
120 2 for(i=0;i<115;i++)
121 2 ;
122 2 }
123 1 }
124
125 /************************************************************
126 程序名称:复位函数
127 函数说明:向DS18B20发送484us复位信号
128 功能:
129 *************************************************************/
130 void tmreast(void)
131 {
132 1 int i;
133 1 TMDAT=0;
134 1 for(i=0;i<103;i++);
135 1 TMDAT=1;
136 1 for(i=0;i<4;i++);
137 1 }
138
139 /************************************************************
140 程序名称:读位函数
141 函数说明:读取DS18B20一位信号
142 功能:
143 *************************************************************/
144 bit tmrbit(void)
145 {
146 1 int i;
147 1 bit dat;
148 1 TMDAT=0; //给脉冲信号
149 1 i++;
150 1 TMDAT=1;
151 1 i++;i++ ; //微量延时
152 1 dat=TMDAT; //给脉冲信号
153 1 for(i=0;i<8;i++);
154 1 return(dat);
155 1
156 1 }
157
158 /************************************************************
159 程序名称:读字函数
160 函数说明:读取DS18B20一字节信号
161 功能:
162 *************************************************************/
163 BYTE tmrbyte(void)
164 {
165 1 BYTE i,j,dat;
166 1 dat=0;
167 1 for(i=1;i<=8;i++)
168 1 {
169 2 j=tmrbit();
170 2 dat=(j<<7)|(dat>>1);
171 2 }
172 1 return(dat);
173 1 }
174
175 /************************************************************
176 程序名称:写函数
177 函数说明:
178 功能:
179 *************************************************************/
C51 COMPILER V8.02 TEMPTURE2 07/18/2008 03:25:32 PAGE 4
180 void tmwbyte(BYTE dat) //写一个字节
181 {
182 1 BYTE i,j;
183 1 bit testb;
184 1 for(j=1;j<=8;j++)
185 1 {
186 2 testb=dat&0x01;
187 2 dat=dat>>1;
188 2 if(testb)
189 2 {
190 3 TMDAT=0; //写0
191 3 i++;i++;
192 3 TMDAT=1;
193 3 for(i=0;i<8;i++);
194 3
195 3 }
196 2 else
197 2 {
198 3 TMDAT=0;
199 3 for(i=0;i<8;i++);
200 3 TMDAT=1;
201 3 i++;i++;
202 3 }
203 2 }
204 1 }
205
206 /************************************************************
207 程序名称:温度转换函数
208 函数说明:将读取的DS18B20的数据进行转换
209 功能:
210 *************************************************************/
211 void trstar(void)
212 {
213 1 tmreast();
214 1 dmsec(1);
215 1 tmwbyte(0xcc); //跳过序列号命令
216 1 tmwbyte(0x44); //发送转换命令44H
217 1 }
218
219
220 /************************************************************
221 程序名称:读温度函数
222 函数说明:读取转换后的温度
223 功能:
224 *************************************************************/
225 void temp(void)
226 {
227 1 BYTE a,b;
228 1 tmreast();
229 1 dmsec(1);
230 1 tmwbyte(0xcc);
231 1 tmwbyte(0xbe);
232 1 a=tmrbyte(); // 读取温度
233 1 b=tmrbyte();
234 1 if(b>0x7f)
235 1 {
236 2 a=~a;b=~b+1; //补码转换,取反加一
237 2 flag=0; //温度为负时flag=0
238 2
239 2 }
240 1 sdata=a/16+b*16;
241 1 xiaoshu1=(a&0x0f)*10/16;
C51 COMPILER V8.02 TEMPTURE2 07/18/2008 03:25:32 PAGE 5
242 1 xiaoshu2=(a&0x0f)*100/16%10;
243 1 xiaoshu=xiaoshu1*10+xiaoshu2;
244 1 /* sdata=45;
245 1 xiaoshu1=3;
246 1 xiaoshu2=2;
247 1 xiaoshu=xiaoshu1*10+xiaoshu2;
248 1 */
249 1
250 1 }
251
252 void DS18B20R(void)
253 {
254 1 trstar();
255 1 dmsec(5); // 不断读取数据
256 1 temp(); // 读取数据后将温度存在TMP中
257 1 }
258
259
260 /************************************************************
261 程序名称:显示函数
262 函数说明:显示读取的数据
263 功能:
264 *************************************************************/
265 void LED(void)
266 {
267 1 if(flag==1)
268 1 {
269 2 dis2[0]='+';
270 2 dis2[1]='2';//sdata/10;
271 2 dis2[2]='5';//seg7code[sdata%10];
272 2 dis2[3]='.';
273 2 dis2[4]='6';//seg7code[xiaoshu1];
274 2 dis2[5]='4';
275 2 dis2[6]='C';
276 2 }
277 1 /* if(flag==0)
278 1 {
279 1 P2=0x7f;
280 1 P0=seg7code[11]; //负号
281 1 Delay(8);
282 1 P0=seg7code[sdata/10];
283 1 Delay(8);
284 1 P2=0xbf;
285 1 P0=seg7code[sdata%10];
286 1 Delay(8);
287 1 P2=0xdf;
288 1 P0=seg7code[xiaoshu1];
289 1 Delay(8);
290 1 P2=P2|0xf0;
291 1 } */
292 1
293 1 }
294
295 void main()
296 {
297 1 BYTE k;
298 1 flag=1;
299 1 DS18B20R();
300 1 LED();
301 1 lcd_init(); // 初始化LCD
302 1 delay(10);
303 1 lcd_pos(4); // 设置显示位置为第一行的第5个字符
C51 COMPILER V8.02 TEMPTURE2 07/18/2008 03:25:32 PAGE 6
304 1 k = 0;
305 1 while(dis1[k] != '\0')
306 1 { // 显示字符"welcome!"
307 2 lcd_wdat(dis1[k]);
308 2 k++;
309 2 }
310 1 lcd_pos(0x41); // 设置显示位置为第二行第二个字符
311 1 k = 0;
312 1 while(dis2[k] != '\0')
313 1 {
314 2 lcd_wdat(dis2[k]); // 显示字符" www.xingyan.com.cn "
315 2 k++;
316 2 }
317 1 while(1); //
318 1 }
319
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 567 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 32 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -