?? ds18b20.lst
字號(hào):
C51 COMPILER V9.00 DS18B20 07/01/2013 12:13:30 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN ..\output\ds18b20.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\c_file\ds18b20.c BROWSE INCDIR(..\c_file;..\h_file;..\output;..\project)
- DEBUG OBJECTEXTEND PRINT(.\ds18b20.lst) OBJECT(..\output\ds18b20.obj)
line level source
1 # include "stc12c5a60s2.h"
2 #include "INTRINS.H"
3 # include "macroandconst.h"
4 # include "main.h"
5 # include "nokia5110.h"
6 # include "delay.h"
7 sbit DQ = P1^5; //DS18B20的數(shù)據(jù)口位P3.3
8
9 BYTE TPH; //存放溫度值的高字節(jié)
10 BYTE TPL; //存放溫度值的低字節(jié)
11
12 void DelayXus(BYTE n);
13 void DS18B20_Reset();
14 void DS18B20_WriteByte(BYTE dat);
15 BYTE DS18B20_ReadByte();
16 uint get_temperatuerResult();
17
18
19 uint get_temperatuerResult()
20 {
21 1 uint temperatuerResult;
22 1 DS18B20_Reset(); //設(shè)備復(fù)位
23 1 DS18B20_WriteByte(0xCC); //跳過ROM命令
24 1 DS18B20_WriteByte(0x44); //開始轉(zhuǎn)換命令
25 1 while (!DQ); //等待轉(zhuǎn)換完成
26 1 DS18B20_Reset(); //設(shè)備復(fù)位
27 1 DS18B20_WriteByte(0xCC); //跳過ROM命令
28 1 DS18B20_WriteByte(0xBE); //讀暫存存儲(chǔ)器命令
29 1
30 1 TPL = DS18B20_ReadByte(); //讀溫度低字節(jié)
31 1 TPH = DS18B20_ReadByte(); //讀溫度高字節(jié)
32 1
33 1 temperatuerResult=TPH<<8;
34 1 temperatuerResult|=TPL;
35 1 return temperatuerResult;
36 1
37 1 }
38
39 /**************************************
40 復(fù)位DS18B20,并檢測(cè)設(shè)備是否存在
41 **************************************/
42 void DS18B20_Reset()
43 {
44 1 CY = 1;
45 1 while (CY)
46 1 {
47 2 DQ = 0; //送出低電平復(fù)位信號(hào)
48 2 DelayXus(240); //延時(shí)至少480us
49 2 DelayXus(240);
50 2 DQ = 1; //釋放數(shù)據(jù)線
51 2 DelayXus(60); //等待60us
52 2 CY = DQ; //檢測(cè)存在脈沖
53 2 DelayXus(240); //等待設(shè)備釋放數(shù)據(jù)線
54 2 DelayXus(180);
C51 COMPILER V9.00 DS18B20 07/01/2013 12:13:30 PAGE 2
55 2 }
56 1 } /**************************************
57 從DS18B20讀1字節(jié)數(shù)據(jù)
58 **************************************/
59 BYTE DS18B20_ReadByte()
60 {
61 1 BYTE i;
62 1 BYTE dat = 0; for (i=0; i<8; i++) //8位計(jì)數(shù)器
63 1 {
64 2 dat >>= 1;
65 2 DQ = 0; //開始時(shí)間片
66 2 DelayXus(1); //延時(shí)等待
67 2 DQ = 1; //準(zhǔn)備接收
68 2 DelayXus(1); //接收延時(shí)
69 2 if (DQ) dat |= 0x80; //讀取數(shù)據(jù)
70 2 DelayXus(60); //等待時(shí)間片結(jié)束
71 2 }
72 1 return dat;
73 1 } /**************************************
74 向DS18B20寫1字節(jié)數(shù)據(jù)
75 **************************************/
76 void DS18B20_WriteByte(BYTE dat)
77 {
78 1 char i; for (i=0; i<8; i++) //8位計(jì)數(shù)器
79 1 {
80 2 DQ = 0; //開始時(shí)間片
81 2 DelayXus(1); //延時(shí)等待
82 2 dat >>= 1; //送出數(shù)據(jù)
83 2 DQ = CY;
84 2 DelayXus(60); //等待時(shí)間片結(jié)束
85 2 DQ = 1; //恢復(fù)數(shù)據(jù)線
86 2 DelayXus(1); //恢復(fù)延時(shí)
87 2 }
88 1 }
89
90 void temperatuercheck()
91 {
92 1 uint WENDU;
93 1 //uchar warring;
94 1 uchar ge,shi,bai,xiaoshu;
95 1 WENDU=get_temperatuerResult()*0.625;//放大十倍;
96 1
97 1 LCD_write_hanzi(0,0,6);
98 1 LCD_write_hanzi(1,0,7); //temperature
99 1
100 1 LCD_write_hanzi(3,2,11);
101 1 bai=WENDU/1000;
102 1 shi=WENDU/100%10;
103 1 ge=WENDU/10%10;
104 1 xiaoshu=WENDU%10;
105 1 if(bai!=0)
106 1 LCD_write_shu(1,2,bai);
107 1 else
108 1 LCD_write_shu(1,2,90);
109 1
110 1 LCD_write_shu(2,2,shi);
111 1 LCD_write_shu(3,2,ge);
112 1 LCD_write_shu(4,2,87);
113 1 LCD_write_shu(5,2,xiaoshu);
114 1
115 1
116 1
C51 COMPILER V9.00 DS18B20 07/01/2013 12:13:30 PAGE 3
117 1
118 1 //warring=(WENDU/10)*10+(WENDU%10);
119 1
120 1 //if(warring>42)beep=0;
121 1 //else beep=1;
122 1 }
123
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 346 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -