📄 tempture.lst
字号:
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEMPTURE
OBJECT MODULE PLACED IN tempture.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE tempture.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************************************
2 程序名称:1602液晶温度显示
3 实现功能:1602液晶温度显示
4 作者:李灿松
5 最后修改时间:2008.7.18
6 =========================================
7 数据说明: *
8 P0_0=D0 P0_1=D1 P0_2=D2 P0_3=D3 *
9 P0_4=D4 P0_5=D5 P0_6=D6 P0_7=D7 *
10 P2_0=RS P2_1=RW P2_2=E *
11 *
12 P3_3为DS18B20的数据输入口 *
13 =========================================
14 *******************************************************************************************************/
15 #include<reg52.h>
16 #include<intrins.h>
17 #define T_cont 0.0625 //温度转换常数
18 #define uchar unsigned char
19 #define uint unsigned int
20 #define L1602_DB0_DB7 P0 //定义1602的数据总线
21 bit T_sign=0; //温度正负符号
22 float temp1=0;
23 sbit DQ=P3^3; //单口线说明
24 sbit L1602_RS=P2^0; //定义1602得RS控制线
25 sbit L1602_RW=P2^1; //定义1602得RW控制线
26 sbit L1602_E=P2^2; //定义1602的E控制线
27 sbit L1602_Busy=P0^7; //定义1602的测忙线
28 uchar code Welcome[]={"wlecome"};
29 uchar code Welcome1[]={"tempture"};
30 uchar code Welcome2[]={"cansong:"};
31 uchar code Temp[]={"temp"};
32 unsigned char sdata,t_bai,t_shi,t_ge,t_feng,t_miao;
33 typedef bit BOOL ;
34
35 /**********************************************************************************************
36 函数名称:主函数
37 函数功能:
38 说明:
39 **********************************************************************************************/
40 void main(void)
41 {
42 1 void print(uchar a,uchar *str);
43 1 void print1(uchar a,uchar t);
44 1 void LCM1602_Init();
45 1 void LCM1602_Delay(uchar count);
46 1 void ReadTemperature();
47 1 void DS18B20_init();
48 1
49 1 DS18B20_init();
50 1 LCM1602_Init();
51 1 print(0x80,Welcome);
52 1 print(0xc0,Welcome1);
53 1 LCM1602_Delay(5000);
54 1 while(1)
55 1 {
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 2
56 2 ReadTemperature();
57 2 print(0x80, Welcome2);
58 2 if(T_sign==1)
59 2 print1(0xc0,0x2d);
60 2 else
61 2 print1(0xc0,0x2b);
62 2 //if(t_bai!=0)
63 2 print1(0xc1,t_bai+0x30);
64 2 // else
65 2 // print1(0xc1,t_shi+0x30); //消隐,不显示
66 2 // t_shi=3;
67 2 print1(0xc2,t_shi+0x30);
68 2 print1(0xc3,t_ge+0x30);
69 2 print1(0xc4,0x2e); //显示点
70 2 print1(0xc5,t_feng+0x30);
71 2 print1(0xc6,t_miao+0x30);
72 2 print1(0xc7,0x43); //显示'C
73 2 }
74 1 }
75
76
77 /**********************************************************************************************
78 函数名称:读取温度函数
79 函数功能:读取DS18B20的转换温度值
80 说明:
81 **********************************************************************************************/
82
83 void ReadTemperature() //获取温度源程序
84 {
85 1 void delay(unsigned int delay_time);
86 1 void DS18B20_init();
87 1 void DS18B20_send(unsigned char out_data);
88 1 uchar DS18B20_read(void);
89 1 unsigned int y=0;
90 1 uchar a=0;
91 1 uchar b=0;
92 1 // unsigned char k;
93 1 DS18B20_init(); //初始化DS18B20
94 1 DS18B20_send (0xcc);
95 1 DS18B20_send (0x44); //启动温度转换
96 1 delay(125);
97 1 DS18B20_init();
98 1 DS18B20_send (0xcc);
99 1 DS18B20_send (0xbe); //读取温度寄存器
100 1 a=DS18B20_read(); //读取低位
101 1 b=DS18B20_read(); //读取高位
102 1 //k=b&0X08;
103 1 //if(k==0x08) T_sign=1; //温度是负数
104 1 //else T_sign=0;
105 1
106 1 if(b>0x7f)
107 1 {
108 2 a=~a;b=~b+1; //补码转换,取反加一
109 2 T_sign=1; //温度为负时flag=0
110 2
111 2 }
112 1 sdata=a/16+b*16;
113 1 t_bai=sdata/100;
114 1 t_shi=sdata/10;
115 1 t_ge=sdata%10;
116 1 t_feng=(a&0x0f)*10/16;
117 1 t_miao=(a&0x0f)*100/16%10;
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 3
118 1
119 1 }
120
121
122 /**********************************************************************************************
123 函数名称:延时函数
124 函数功能:转换延时和显示延时
125 说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
126 **********************************************************************************************/
127 void delay(unsigned int delay_time) // 延时程序
128 {
129 1 while(delay_time--);
130 1 }
131
132 void LCM1602_Delay(uchar count)
133 {
134 1 uchar i;
135 1 while(--count!=0)
136 1 {for(i=0;i<250;i++);}
137 1 }
138
139 /**********************************************************************************************
140 函数名称:初始化函数
141 函数功能:对DS18B20进行初始化
142 说明:
143 **********************************************************************************************/
144 void DS18B20_init() //初始化DS18B20
145 {
146 1 unsigned char i=0;
147 1 DQ=1;
148 1 delay(8);
149 1 DQ=0;
150 1 delay(85); //精确延时484 us
151 1 DQ=1;
152 1 delay(14); //精确延时34us
153 1 i=DQ;
154 1 delay(20);
155 1
156 1 }
157
158 /**********************************************************************************************
159 函数名称:写函数
160 函数功能:向DS18B20写命令
161 说明:
162 **********************************************************************************************/
163 void DS18B20_send(unsigned char out_data) //主机发送一字节到DS18B20
164 {
165 1 unsigned char i=0;
166 1
167 1 for(i=8;i>0;i--)
168 1 {
169 2 DQ=0;
170 2 DQ=out_data&0x01; //数据从低位送出
171 2 delay(5); //精确延时61us
172 2 DQ=1;
173 2 out_data>>=1;
174 2 }
175 1 delay(4);
176 1 }
177
178 /**********************************************************************************************
179 函数名称:读函数
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 4
180 函数功能:从DS18B20读取数据
181 说明:
182 **********************************************************************************************/
183 uchar DS18B20_read(void)//主机从DS18B20中读取一字节
184 {
185 1 unsigned char i,in_data;
186 1 in_data=0;
187 1 for(i=8;i>0;i--)
188 1 {
189 2 DQ=1;
190 2 delay(1);
191 2 DQ=0; //给脉冲信号
192 2 in_data>>=1;
193 2 DQ=1; //给脉冲信号
194 2 if(DQ)
195 2 in_data|=0x80;
196 2 delay(4);
197 2 }
198 1 return(in_data);
199 1 }
200
201
202 /**********************************************************************************************
203 函数名称:初始化函数
204 函数功能:液晶1602初始化
205 说明:
206 **********************************************************************************************/
207 void LCM1602_Init(void)
208 {
209 1 void LCM1602_WriteData(uchar LCM1602_data);
210 1 void LCM1602_WriteCMD(uchar LCM1602_command);
211 1 LCM1602_WriteCMD(0x38); //显示两行,每个字符为5*7个像素
212 1 delay(1);
213 1 LCM1602_WriteCMD(0x06); //光标移动设置,光标右移
214 1 delay(1);
215 1 LCM1602_WriteCMD(0x0c); //现设开,光标开,闪烁开
216 1 delay(1);
217 1 LCM1602_WriteCMD(0x01); //清屏
218 1 delay(1);
219 1 }
220 void print(uchar a,uchar *str)
221 {
222 1 void LCM1602_WriteData(uchar LCM1602_data);
223 1 void LCM1602_WriteCMD(uchar LCM1602_command);
224 1 LCM1602_WriteCMD(a);
225 1 while(*str!='\0')
226 1 {
227 2 LCM1602_WriteData(*str++);
228 2 }
229 1 *str=0;
230 1 }
231 void print1(uchar a,uchar t)
232 {
233 1 LCM1602_WriteCMD(a);
234 1 LCM1602_WriteData(t);
235 1 }
236
237
238
239 /**********************************************************************************************
240 函数名称:写命令和写数据函数
241 函数功能:向LCD写命令和数据
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 5
242 说明:LCM1602_WriteCMD是写命令函数,void LCM1602_WriteData是写数据函数
243 **********************************************************************************************/
244 void LCM1602_WriteCMD(uchar LCM1602_command)
245 {
246 1 BOOL lcd_bz();
247 1 while(lcd_bz()); //测忙
248 1 L1602_RS=0;
249 1 L1602_RW=0;
250 1 L1602_E=0;
251 1 _nop_();
252 1 _nop_();
253 1 L1602_DB0_DB7=LCM1602_command;
254 1 _nop_();
255 1 _nop_();_nop_();
256 1 L1602_E=1; //命令总送出
257 1 _nop_();_nop_();_nop_();
258 1 L1602_E=0;
259 1 }
260
261 void LCM1602_WriteData(uchar LCM1602_data)
262 {
263 1 BOOL lcd_bz();
264 1 while(lcd_bz()); //测忙
265 1 L1602_RS=1;
266 1 L1602_RW=0;
267 1 L1602_E=0;
268 1 L1602_DB0_DB7=LCM1602_data;
269 1 _nop_();
270 1 _nop_();
271 1 _nop_();
272 1 _nop_();
273 1 L1602_E=1; //数据送出
274 1 _nop_();
275 1 _nop_();
276 1 _nop_();
277 1 L1602_E=0;
278 1 }
279
280
281 /**********************************************************************************************
282 函数名称:LCD检测忙函数
283 函数功能:检测LCD是否处于忙状态
284 说明:
285 **********************************************************************************************/
286 BOOL lcd_bz()
287 { // 测试LCD忙碌状态
288 1 BOOL result;
289 1 L1602_RS=0;
290 1 L1602_RW=1;
291 1 L1602_E=1;
292 1 _nop_();
293 1 _nop_();
294 1 _nop_();
295 1 _nop_();
296 1 result = (BOOL)(P0 & 0x80);
297 1 L1602_E = 0;
298 1 return result;
299 1 }
300 /**********************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 TEMPTURE 07/18/2008 16:54:11 PAGE 6
CODE SIZE = 560 ----
CONSTANT SIZE = 31 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 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 + -