📄 ds18b20.lst
字号:
C51 COMPILER V8.02 DS18B20 02/18/2008 14:19:10 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN .\ds18b20.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\c语言程序\ds18b20.c BROWSE DEBUG OBJECTEXTEND PRINT(.\ds18b20.lst) OBJEC
-T(.\ds18b20.obj)
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3 #include<absacc.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define nop _nop_()
7 #define TURE 1
8 sbit DQ = P0^0; //定义DS18B20端口DQ
9 sbit BEEP =P0^1;
10 sbit RS=P3^5;
11 sbit RW=P3^6;
12 sbit E=P3^7;
13 uchar presence ;
14 void init();
15 void write(uchar tempdata);
16 void writeDDR();
17 void delay(uint N);
18 void delay_18B20(int i);
19 void Write_byte(uchar val);
20 void write_bit(uchar bitval);
21 uchar read_byte(void);
22 uchar read_bit(void);
23
24 unsigned char code LCDData[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x77};
25 unsigned char code buffdis[] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
26 unsigned char data temp_data[2] = {0x0D0,0x07};
27 unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00};
28 unsigned char code ditab[16] = {0x30,0x31,0x31,0x32,0x33,0x33,0x34,0x34,0x35,0x36,0x36,0x37,0x38,0x38,0
-x39,0x39};
29 static const uchar code table2[]={0x74,0x65,0x6d,0x70,0x65,0x72,0x61,0x74,0x75,0x72,0x65,0x20,0x69,0x53,0x
-20,0x3a};
30 void beep();
31 bit flash=0; //显示开关标记
32
33 Init_DS18B20(void)//初始化ds1820
34 { DQ=1;
35 1 delay_18B20(8);
36 1 DQ = 0; //单片机将DQ拉低
37 1 delay_18B20(80); //精确延时 大于 480us
38 1 DQ = 1; //拉高总线
39 1 delay_18B20(14);
40 1 presence = DQ; //如果=0则初始化成功 =1则初始化失败
41 1 delay_18B20(20);
42 1 return(presence); //返回信号,0=presence,1= no presence
43 1 }
44
45
46 void delay_18B20(uint i)
47 {
*** WARNING C235 IN LINE 47 OF ..\C语言程序\DS18B20.C: parameter 1: different types
48 1 while(i--);
49 1 }
50
51
C51 COMPILER V8.02 DS18B20 02/18/2008 14:19:10 PAGE 2
52 Read_Temperature(void)//读取温度
53 {
54 1 Init_DS18B20();
55 1 if(presence==1)//DS18B20不正常,蜂鸣器报警
56 1 {
57 2 BEEP=1; //开启指示灯
58 2 flash=1;
59 2 }
60 1 else
61 1 {
62 2 flash=0;
63 2 Write_byte(0xCC); // 跳过读序号列号的操作
64 2 Write_byte(0x44); // 启动温度转换
65 2 Init_DS18B20();
66 2 Write_byte(0xCC); //跳过读序号列号的操作
67 2 Write_byte(0xBE); //读取温度寄存器
68 2
69 2 temp_data[0] = read_byte(); //温度低8位
70 2 temp_data[1] = read_byte(); //温度高8位
71 2 }
72 1 }
73
74 Disp_Temperature()//显示温度
75 {
76 1 unsigned char n=0;
77 1 display[4]=temp_data[0]&0x0f;
78 1 display[0]=ditab[display[4]]; //查表得小数位的值
79 1 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
80 1 display[3]=LCDData[display[4]/100];
81 1 display[1]=display[4]%100;
82 1 display[2]=LCDData[display[1]/10];
83 1 display[1]=LCDData[display[1]%10];
84 1 write(0x0c0);
85 1 P1=display[3];
86 1 writeDDR();
87 1 write(0x0c1);
88 1 P1=display[2];
89 1 writeDDR();
90 1 write(0x0c2);
91 1 P1=display[1];
92 1 writeDDR();
93 1 write(0x0c3);
94 1 P1=0x2e;
95 1 writeDDR();
96 1 write(0x0c4);
97 1 P1=display[0];
98 1 writeDDR();
99 1 write(0x0c5);
100 1 P1=0x0df;
101 1 writeDDR();
102 1 write(0x0c6);
103 1 P1=0x43;
104 1 writeDDR();
105 1 }
106
107 void main(void)
108 {
109 1 uint i;
110 1 BEEP=0;
111 1 init();
112 1
113 1 write(0x80);
C51 COMPILER V8.02 DS18B20 02/18/2008 14:19:10 PAGE 3
114 1 for(i=0;i<=16;i++)
115 1 {
116 2 write(0x80+i);
117 2 P1=table2[i];
118 2 writeDDR();
119 2 }
120 1 while(TURE)
121 1 {
122 2 Read_Temperature();
123 2 if(flash==0)
124 2 {Disp_Temperature();}
125 2 else write(0x01) ; //DS18B20不正常,关闭显示
126 2 }
127 1 }
128
129
130 void init()
131 {
132 1 RS=0;
133 1 RW=0;
134 1 E=1;
135 1 write(0x01);
136 1 write(0x38);
137 1 write(0x01);
138 1 write(0x0f);
139 1 write(0x06);
140 1 write(0x01);
141 1 }
142
143 void write(uchar tempdata)
144 {
145 1 P1=tempdata;
146 1 RS=0;
147 1 RW=0;
148 1 E=0;
149 1 nop;
150 1 E=1;
151 1 nop;
152 1 delay(150);
153 1 }
154
155
156 void writeDDR(void)
157 {
158 1 RS=1;
159 1 nop;
160 1 RW=0;
161 1 E=0;
162 1 nop;
163 1 E=1;
164 1 nop;
165 1 }
166
167 void delay(uint N)
168 {
169 1 int i;
170 1 for(i=0;i<N;i++);
171 1 }
172
173
174 uchar read_byte(void)
175 {
C51 COMPILER V8.02 DS18B20 02/18/2008 14:19:10 PAGE 4
176 1 uchar i,m,receive_data;
177 1 m=1;
178 1 receive_data=0;
179 1 for(i=0;i<8;i++)
180 1 {
181 2 if(read_bit())
182 2 {
183 3 receive_data=receive_data+(m<<i);
184 3 }
185 2 delay(6);
186 2 }
187 1 return(receive_data);
188 1 }
189
190 uchar read_bit(void)
191 {
192 1 uchar i;
193 1 DQ=0;
194 1 DQ=1;
195 1 for(i=0;i<3;i++);
196 1 return(DQ);
197 1 }
198
199 void Write_byte(uchar val)
200 {
201 1 uchar i,temp;
202 1 for(i=0;i<8;i++)
203 1 {
204 2 temp=val>>i;
205 2 temp=temp&0x01;
206 2 write_bit(temp);
207 2 delay(5);
208 2 }
209 1 }
210
211 void write_bit(uchar bitval)
212 {
213 1 DQ=0;
214 1 if(bitval==1)
215 1 DQ=1;
216 1 delay(5);
217 1 DQ=1;
218 1 }
219
220 /*uchar read_byte(void)
221 {
222 unsigned char i=0,j;
223 unsigned char dat = 0;
224 for (i=8;i>0;i--)
225 {
226 DQ = 0; // 给脉冲信号
227 dat>>=1;
228 DQ = 1; // 给脉冲信号
229 for(j=0;j<3;j++);
230 if(DQ)
231 dat|=0x80;
232 delay(4);
233 }
234 return(dat);
235 } */
236
237
C51 COMPILER V8.02 DS18B20 02/18/2008 14:19:10 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 537 ----
CONSTANT SIZE = 52 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 9
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -