📄 ds18b20.lst
字号:
C51 COMPILER V8.02 DS18B20 07/17/2008 22:12:37 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************************************************************
2 程序名称:数码管显示温度
3 函数说明:数码管显示温度
4 功能:
5 **************************************************************/
6 #include<reg52.h>
7 #include<string.h>
8 #include<ctype.h>
9 #include <intrins.h>
10
11 #define uchar unsigned char
12 #define uint unsigned int
13 sbit TMDAT=P3^3; //定义DS18B20的数据输入端
14 uint sdata=0; //温度数据的整数部分
15 uint xiaoshu1=0; //小数第一位
16 uint xiaoshu2=0; //小数第二位
17 uint xiaoshu;
18 bit flag=1; //温度正负标志
19 uchar seg7code[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,0x60,0x25,0x3c,0x23,0x34,0x76}; //共
-阳段码
20
21 /************************************************************
22 程序名称:延时函数
23 函数说明:数码管显示延时
24 功能:
25 *************************************************************/
26 void Delay(uint tc) //显示延时函数
27 {
28 1 while(tc!=0)
29 1 {
30 2 uint i;
31 2 for(i=0;i<100;i++)
32 2 ;
33 2 tc--;
34 2 }
35 1 }
36
37 /************************************************************
38 程序名称:延时函数
39 函数说明:DS18B20数据读取延时
40 功能:
41 *************************************************************/
42 void dmsec(uint count)
43 {
44 1 uchar i;
45 1 while(count--)
46 1 {
47 2 for(i=0;i<115;i++)
48 2 ;
49 2 }
50 1 }
51
52 /************************************************************
53 程序名称:复位函数
54 函数说明:向DS18B20发送484us复位信号
C51 COMPILER V8.02 DS18B20 07/17/2008 22:12:37 PAGE 2
55 功能:
56 *************************************************************/
57 void tmreast(void)
58 {
59 1 uchar i;
60 1 TMDAT=0;
61 1 for(i=0;i<103;i++);
62 1 TMDAT=1;
63 1 for(i=0;i<4;i++);
64 1 }
65
66 /************************************************************
67 程序名称:读位函数
68 函数说明:读取DS18B20一位信号
69 功能:
70 *************************************************************/
71 bit tmrbit(void)
72 {
73 1 uint i;
74 1 bit dat;
75 1 TMDAT=0; //给脉冲信号
76 1 i++;
77 1 TMDAT=1;
78 1 i++;i++ ; //微量延时
79 1 dat=TMDAT; //给脉冲信号
80 1 for(i=0;i<8;i++);
81 1 return(dat);
82 1
83 1 }
84
85 /************************************************************
86 程序名称:读字函数
87 函数说明:读取DS18B20一字节信号
88 功能:
89 *************************************************************/
90 uchar tmrbyte(void)
91 {
92 1 uchar i,j,dat;
93 1 dat=0;
94 1 for(i=1;i<=8;i++)
95 1 {
96 2 j=tmrbit();
97 2 dat=(j<<7)|(dat>>1);
98 2 }
99 1 return(dat);
100 1 }
101
102 /************************************************************
103 程序名称:写函数
104 函数说明:
105 功能:
106 *************************************************************/
107 void tmwbyte(uchar dat) //写一个字节
108 {
109 1 uchar i,j;
110 1 bit testb;
111 1 for(j=1;j<=8;j++)
112 1 {
113 2 testb=dat&0x01;
114 2 dat=dat>>1;
115 2 if(testb)
116 2 {
C51 COMPILER V8.02 DS18B20 07/17/2008 22:12:37 PAGE 3
117 3 TMDAT=0; //写0
118 3 i++;i++;
119 3 TMDAT=1;
120 3 for(i=0;i<8;i++);
121 3
122 3 }
123 2 else
124 2 {
125 3 TMDAT=0;
126 3 for(i=0;i<8;i++);
127 3 TMDAT=1;
128 3 i++;i++;
129 3 }
130 2 }
131 1 }
132
133 /************************************************************
134 程序名称:温度转换函数
135 函数说明:将读取的DS18B20的数据进行转换
136 功能:
137 *************************************************************/
138 void trstar(void)
139 {
140 1 tmreast();
141 1 dmsec(1);
142 1 tmwbyte(0xcc); //跳过序列号命令
143 1 tmwbyte(0x44); //发送转换命令44H
144 1 }
145
146
147 /************************************************************
148 程序名称:读温度函数
149 函数说明:读取转换后的温度
150 功能:
151 *************************************************************/
152 void temp(void)
153 {
154 1 uchar a,b;
155 1 tmreast();
156 1 dmsec(1);
157 1 tmwbyte(0xcc);
158 1 tmwbyte(0xbe);
159 1 a=tmrbyte(); // 读取温度
160 1 b=tmrbyte();
161 1 if(b>0x7f)
162 1 {
163 2 a=~a;b=~b+1; //补码转换,取反加一
164 2 flag=0; //温度为负时flag=0
165 2
166 2 }
167 1 sdata=a/16+b*16;
168 1 xiaoshu1=(a&0x0f)*10/16;
169 1 xiaoshu2=(a&0x0f)*100/16%10;
170 1 xiaoshu=xiaoshu1*10+xiaoshu2;
171 1 /* sdata=45;
172 1 xiaoshu1=3;
173 1 xiaoshu2=2;
174 1 xiaoshu=xiaoshu1*10+xiaoshu2;
175 1 */
176 1
177 1 }
178
C51 COMPILER V8.02 DS18B20 07/17/2008 22:12:37 PAGE 4
179 void DS18B20R(void)
180 {
181 1 trstar();
182 1 dmsec(5); // 不断读取数据
183 1 temp(); //读取数据后将温度存在TMP中
184 1 }
185
186
187 /************************************************************
188 程序名称:显示函数
189 函数说明:显示读取的数据
190 功能:
191 *************************************************************/
192 void LED()
193 {
194 1 if(flag==1)
195 1 {
196 2 P2=0x7f;
197 2 P0=seg7code[sdata/10];
198 2 Delay(2);
199 2 P2=0xbf;
200 2 P0=seg7code[sdata%10]&0xdf;
201 2 Delay(2);
202 2 P2=0xdf;
203 2 P0=seg7code[xiaoshu1];
204 2 Delay(2);
205 2 P2=0xef;
206 2 P0=seg7code[xiaoshu2];
207 2 Delay(2);
208 2 P2=P2|0xf0;
209 2 }
210 1 if(flag==0)
211 1 {
212 2 P2=0x7f;
213 2 P0=seg7code[11]; //负号
214 2 Delay(8);
215 2 P0=seg7code[sdata/10];
216 2 Delay(8);
217 2 P2=0xbf;
218 2 P0=seg7code[sdata%10];
219 2 Delay(8);
220 2 P2=0xdf;
221 2 P0=seg7code[xiaoshu1];
222 2 Delay(8);
223 2 P2=P2|0xf0;
224 2 }
225 1
226 1 }
227
228 /************************************************************
229 程序名称:主函数
230 函数说明:数码管显示温度数据
231 功能:
232 *************************************************************/
233 main()
234 {
235 1 flag=1;
236 1 while(1)
237 1 {
238 2 DS18B20R();
239 2 LED();
240 2 }
C51 COMPILER V8.02 DS18B20 07/17/2008 22:12:37 PAGE 5
241 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 496 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 2
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -