📄 hongwai.lst
字号:
211 1 DS18B20_init();
212 1 DS18B20_send (0xcc);
213 1 DS18B20_send (0xbe); //读取温度寄存器
214 1 a=DS18B20_read(); //读取低位
215 1 b=DS18B20_read(); //读取高位
216 1 //k=b&0X08;
217 1 //if(k==0x08) T_sign=1; //温度是负数
218 1 //else T_sign=0;
219 1
220 1 if(b>0x7f)
221 1 {
222 2 a=~a;b=~b+1; //补码转换,取反加一
223 2 T_sign=1; //温度为负时flag=0
224 2
225 2 }
226 1 sdata=a/16+b*16;
227 1 t_bai=sdata/100;
228 1 t_shi=sdata/10;
229 1 t_ge=sdata%10;
230 1 t_feng=(a&0x0f)*10/16;
231 1 t_miao=(a&0x0f)*100/16%10;
232 1
233 1 }
234
235
236 /**********************************************************************************************
237 函数名称:延时函数
238 函数功能:转换延时和显示延时
239 说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
240 **********************************************************************************************/
241 void delay(unsigned int delay_time) // 延时程序
C51 COMPILER V8.02 HONGWAI 07/31/2008 01:16:42 PAGE 5
242 {
243 1 while(delay_time--);
244 1 }
245
246 void LCM1602_Delay(uchar count)
247 {
248 1 uchar i;
249 1 while(--count!=0)
250 1 {for(i=0;i<250;i++);}
251 1 }
252
253 /**********************************************************************************************
254 函数名称:初始化函数
255 函数功能:对DS18B20进行初始化
256 说明:
257 **********************************************************************************************/
258 void DS18B20_init() //初始化DS18B20
259 {
260 1 unsigned char i=0;
261 1 DQ=1;
262 1 delay(8);
263 1 DQ=0;
264 1 delay(85); //精确延时484 us
265 1 DQ=1;
266 1 delay(14); //精确延时34us
267 1 i=DQ;
268 1 delay(20);
269 1
270 1 }
271
272 /**********************************************************************************************
273 函数名称:写函数
274 函数功能:向DS18B20写命令
275 说明:
276 **********************************************************************************************/
277 void DS18B20_send(unsigned char out_data) //主机发送一字节到DS18B20
278 {
279 1 unsigned char i=0;
280 1
281 1 for(i=8;i>0;i--)
282 1 {
283 2 DQ=0;
284 2 DQ=out_data&0x01; //数据从低位送出
285 2 delay(5); //精确延时61us
286 2 DQ=1;
287 2 out_data>>=1;
288 2 }
289 1 delay(4);
290 1 }
291
292 /**********************************************************************************************
293 函数名称:读函数
294 函数功能:从DS18B20读取数据
295 说明:
296 **********************************************************************************************/
297 uchar DS18B20_read(void)//主机从DS18B20中读取一字节
298 {
299 1 unsigned char i,in_data;
300 1 in_data=0;
301 1 for(i=8;i>0;i--)
302 1 {
303 2 DQ=1;
C51 COMPILER V8.02 HONGWAI 07/31/2008 01:16:42 PAGE 6
304 2 delay(1);
305 2 DQ=0; //给脉冲信号
306 2 in_data>>=1;
307 2 DQ=1; //给脉冲信号
308 2 if(DQ)
309 2 in_data|=0x80;
310 2 delay(4);
311 2 }
312 1 return(in_data);
313 1 }
314
315
316 /**********************************************************************************************
317 函数名称:初始化函数
318 函数功能:液晶1602初始化
319 说明:
320 **********************************************************************************************/
321 void LCM1602_Init(void)
322 {
323 1 void LCM1602_WriteData(uchar LCM1602_data);
324 1 void LCM1602_WriteCMD(uchar LCM1602_command);
325 1 LCM1602_WriteCMD(0x38); //显示两行,每个字符为5*7个像素
326 1 delay(1);
327 1 LCM1602_WriteCMD(0x06); //光标移动设置,光标右移
328 1 delay(1);
329 1 LCM1602_WriteCMD(0x0c); //现设开,光标开,闪烁开
330 1 delay(1);
331 1 LCM1602_WriteCMD(0x01); //清屏
332 1 delay(1);
333 1 }
334 void print(uchar a,uchar *str)
335 {
336 1 void LCM1602_WriteData(uchar LCM1602_data);
337 1 void LCM1602_WriteCMD(uchar LCM1602_command);
338 1 LCM1602_WriteCMD(a);
339 1 while(*str!='\0')
340 1 {
341 2 LCM1602_WriteData(*str++);
342 2 }
343 1 *str=0;
344 1 }
345 void print1(uchar a,uchar t)
346 {
347 1 LCM1602_WriteCMD(a);
348 1 LCM1602_WriteData(t);
349 1 }
350
351
352
353 /**********************************************************************************************
354 函数名称:写命令和写数据函数
355 函数功能:向LCD写命令和数据
356 说明:LCM1602_WriteCMD是写命令函数,void LCM1602_WriteData是写数据函数
357 **********************************************************************************************/
358 void LCM1602_WriteCMD(uchar LCM1602_command)
359 {
360 1 BOOL lcd_bz();
361 1 while(lcd_bz()); //测忙
362 1 L1602_RS=0;
363 1 L1602_RW=0;
364 1 L1602_E=0;
365 1 _nop_();
C51 COMPILER V8.02 HONGWAI 07/31/2008 01:16:42 PAGE 7
366 1 _nop_();
367 1 L1602_DB0_DB7=LCM1602_command;
368 1 _nop_();
369 1 _nop_();_nop_();
370 1 L1602_E=1; //命令总送出
371 1 _nop_();_nop_();_nop_();
372 1 L1602_E=0;
373 1 }
374
375 void LCM1602_WriteData(uchar LCM1602_data)
376 {
377 1 BOOL lcd_bz();
378 1 while(lcd_bz()); //测忙
379 1 L1602_RS=1;
380 1 L1602_RW=0;
381 1 L1602_E=0;
382 1 L1602_DB0_DB7=LCM1602_data;
383 1 _nop_();
384 1 _nop_();
385 1 _nop_();
386 1 _nop_();
387 1 L1602_E=1; //数据送出
388 1 _nop_();
389 1 _nop_();
390 1 _nop_();
391 1 L1602_E=0;
392 1 }
393
394
395 /**********************************************************************************************
396 函数名称:LCD检测忙函数
397 函数功能:检测LCD是否处于忙状态
398 说明:
399 **********************************************************************************************/
400 BOOL lcd_bz()
401 { // 测试LCD忙碌状态
402 1 BOOL result;
403 1 L1602_RS=0;
404 1 L1602_RW=1;
405 1 L1602_E=1;
406 1 _nop_();
407 1 _nop_();
408 1 _nop_();
409 1 _nop_();
410 1 result = (BOOL)(P0 & 0x80);
411 1 L1602_E = 0;
412 1 return result;
413 1 }
414 /**********************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 709 ----
CONSTANT SIZE = 31 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 9
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -