📄 18b20.lst
字号:
C51 COMPILER V7.06 18B20 08/11/2007 19:23:02 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg52.h"
2 #include "intrins.h"
3
4
5 void write_op(unsigned char instruction);
6 void write_dat(unsigned char indata);
7 void check_busy();
8 void lcd_ini();
9
10 sbit DQ =P3^3; //定义通信端口
11 //延时函数
12
13 sbit RS=P2^0;
14 sbit RW=P2^1;
15 sbit E=P2^2;
16 sbit PSB=P2^3;
17 sbit RST=P2^5;
18
19 unsigned int th,tl;
20 unsigned char dis_char[]={ "室温是度"};
21
22 unsigned char code line[]={0x80,0x90,0x88,0x98};
23
24 void delay(unsigned int i)
25 {
26 1 while(i--);
27 1
28 1 }
29
30 //初始化函数
31 Init_DS18B20()
32 {
33 1 unsigned char x=0;
34 1 DQ = 1; //DQ复位
35 1 delay(8); //稍做延时
36 1 DQ = 0; //单片机将DQ拉低
37 1 delay(80); //精确延时 大于 480us
38 1 DQ = 1; //拉高总线
39 1 delay(14);
40 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
41 1 delay(20);
42 1 }
43 //读一个字节
44 ReadOneChar(void)
45 {
46 1 unsigned char i=0;
47 1 unsigned char dat = 0;
48 1 for (i=8;i>0;i--)
49 1 {
50 2 DQ = 0; // 给脉冲信号
51 2 dat>>=1;
52 2 DQ = 1; // 给脉冲信号
53 2 if(DQ)
54 2 dat|=0x80;
55 2 delay(4);
C51 COMPILER V7.06 18B20 08/11/2007 19:23:02 PAGE 2
56 2 }
57 1 return(dat);
58 1 }
59 //写一个字节
60 WriteOneChar(unsigned char dat)
61 {
62 1 unsigned char i=0;
63 1 for (i=8; i>0; i--)
64 1 {
65 2 DQ = 0;
66 2 DQ = dat&0x01;
67 2 delay(5);
68 2 DQ = 1;
69 2 dat>>=1;
70 2 }
71 1 delay(4);
72 1 }
73 //读取温度
74 void ReadTemperature()
75 {
76 1 unsigned char a=0;
77 1 unsigned char b=0;
78 1 unsigned int t;
79 1 Init_DS18B20();
80 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
81 1 WriteOneChar(0x44); // 启动温度转换
82 1 Init_DS18B20();
83 1 WriteOneChar(0xCC); //跳过读序号列号的操作
84 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
85 1 a=ReadOneChar(); //读取温度值低位
86 1 b=ReadOneChar(); //读取温度值高位
87 1
88 1 t=b<<8;
89 1 t=t|a;
90 1 th=t>>4;
91 1 tl=(t&0x0f)*625;
92 1 }
93
94
95 void delayms(unsigned char n)
96 {
97 1 while(n--);
98 1 }
99
100
101 void write_op(unsigned char instruction)
102 {
103 1 check_busy();
104 1 RS=0;
105 1 RW=0;
106 1 P0=instruction;
107 1 E=1;
108 1 _nop_();
109 1 E=0;
110 1 }
111
112 void write_dat(unsigned char indata)
113 {
114 1 check_busy();
115 1 RS=1;
116 1 RW=0;
117 1 P0=indata;
C51 COMPILER V7.06 18B20 08/11/2007 19:23:02 PAGE 3
118 1 E=1;
119 1 _nop_();
120 1 E=0;
121 1 }
122
123 void check_busy()
124 {
125 1 RS=0;
126 1 RW=1;
127 1 E=1;
128 1 _nop_();
129 1 while((bit)P0 & 0x80);
130 1 E=0;
131 1 }
132
133 void lcd_ini()
134 {
135 1 RST=0;
136 1 delayms(60);
137 1 RST=1;
138 1 _nop_();
139 1 PSB=1;
140 1
141 1 write_op(0x30);
142 1 write_op(0x01);
143 1 write_op(0x06);
144 1 write_op(0x0c);
145 1 }
146
147 void main()
148 {
149 1 unsigned char j;
150 1
151 1 unsigned char tab[10]={'0','1','2','3','4','5','6','7','8','9'};
152 1 unsigned char tab1[10]={0,1,2,3,4,5,6,7,8,9};
153 1 lcd_ini();
154 1
155 1 while(1)
156 1 {
157 2 ReadTemperature();
158 2
159 2 write_op(line[0]);
160 2 for(j=0;j<6;j++)
161 2 write_dat(dis_char[j]);
162 2
163 2 for(j=0;j<10;j++)//显示整数部分
164 2 if(th/10==tab1[j])
165 2 {
166 3 write_dat(tab[j]);
167 3 }
168 2
169 2 for(j=0;j<10;j++)
170 2 if(th%10==tab1[j])
171 2 {
172 3 write_dat(tab[j]);
173 3 }
174 2
175 2 write_dat('.');
176 2
177 2 for(j=0;j<10;j++)//显示小数部分
178 2 if(tl/1000==tab1[j])
179 2 {
C51 COMPILER V7.06 18B20 08/11/2007 19:23:02 PAGE 4
180 3 write_dat(tab[j]);
181 3 }
182 2
183 2 for(j=0;j<10;j++)
184 2 if((tl/100)%10==tab1[j])
185 2 {
186 3 write_dat(tab[j]);
187 3 }
188 2
189 2 for(j=0;j<10;j++)
190 2 if((tl/10)%10==tab1[j])
191 2 {
192 3 write_dat(tab[j]);
193 3 }
194 2
195 2 for(j=0;j<10;j++)
196 2 if(tl%10==tab1[j])
197 2 {
198 3 write_dat(tab[j]);
199 3 }
200 2
201 2 write_dat('0');
202 2
203 2
204 2 for(j=6;j<8;j++)
205 2 write_dat(dis_char[j]);
206 2
207 2 }
208 1
209 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 649 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 23
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -