📄 16021602.lst
字号:
204 /* 读取温度 */
205 /*******************************************************************/
206 Read_Temperature(void)
207 {
208 1 Init_DS18B20() ;
209 1
210 1 WriteOneChar(0xCC) ; // 跳过读序号列号的操作
211 1 WriteOneChar(0x44) ; // 启动温度转换
212 1
213 1 Init_DS18B20() ;
214 1 WriteOneChar(0xCC) ; //跳过读序号列号的操作
215 1 WriteOneChar(0xBE) ; //读取温度寄存器
216 1
217 1 temp_data[0] = ReadOneChar() ; //温度低8位
218 1 temp_data[1] = ReadOneChar() ; //温度高8位
219 1 }
220
221 /* 数据转换与温度显示 */
222 /*******************************************************************/
223 Disp_Temperature()
224 {
225 1 display[4]=temp_data[0]&0x0f ;
226 1 display[0]=ditab[display[4]]+0x30 ; //查表得小数位的值
227 1
228 1 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;
229 1 display[3]=display[4]/100+0x30 ;
230 1 display[1]=display[4]%100 ;
231 1 display[2]=display[1]/10+0x30 ;
232 1 display[1]=display[1]%10+0x30 ;
233 1
234 1 if(display[3]==0x30) //高位为0,不显示
235 1 {
236 2 display[3]=0x20 ;
237 2 if(display[2]==0x30) //次高位为0,不显示
238 2 display[2]=0x20 ;
239 2 }
240 1
241 1 lcd_pos(0x48) ;
C51 COMPILER V7.20 16021602 06/12/2008 13:37:14 PAGE 5
242 1 lcd_wdat(display[3]) ; //百位数显示
243 1 lcd_pos(0x49) ;
244 1 lcd_wdat(display[2]) ; //十位数显示
245 1 lcd_pos(0x4a) ;
246 1 lcd_wdat(display[1]) ; //个位数显示
247 1 lcd_pos(0x4c) ;
248 1 lcd_wdat(display[0]) ; //小数位数显示
249 1 }
250
251 /*******************************************************************/
252 /* 蜂鸣器响一声 */
253 /*******************************************************************/
254 void beep()
255 {
256 1 unsigned char y ;
257 1 for (y=0 ;y<100 ;y++)
258 1 {
259 2 Delay(60) ;
260 2 BEEP=!BEEP ; //BEEP取反
261 2 }
262 1 BEEP=1 ; //关闭蜂鸣器
263 1 Delay(40000) ;
264 1 }
265
266 /* DS18B20 OK 显示菜单 */
267 /*******************************************************************/
268 void Ok_Menu ()
269 {
270 1 uchar m ;
271 1 lcd_init() ; //初始化LCD
272 1
273 1 lcd_pos(0) ; //设置显示位置为第一行的第1个字符
274 1 m = 0 ;
275 1 while(cdis1[m] != '\0')
276 1 { //显示字符
277 2 lcd_wdat(cdis1[m]) ;
278 2 m++ ;
279 2 }
280 1
281 1 lcd_pos(0x40) ; //设置显示位置为第二行第1个字符
282 1 m = 0 ;
283 1 while(cdis2[m] != '\0')
284 1 {
285 2 lcd_wdat(cdis2[m]) ; //显示字符
286 2 m++ ;
287 2 }
288 1
289 1 writetab() ; //自定义字符写入CGRAM
290 1 delay1(5) ;
291 1 lcd_pos(0x4d) ;
292 1 lcd_wdat(0x00) ; //显示自定义字符
293 1 }
294
295
296 /* DS18B20 ERROR 显示菜单 */
297 /*******************************************************************/
298 void Error_Menu ()
299 {
300 1 uchar m ;
301 1 lcd_init() ; //初始化LCD
302 1
303 1 lcd_pos(0) ; //设置显示位置为第一行的第1个字符
C51 COMPILER V7.20 16021602 06/12/2008 13:37:14 PAGE 6
304 1 m = 0 ;
305 1 while(cdis3[m] != '\0')
306 1 { //显示字符
307 2 lcd_wdat(cdis3[m]) ;
308 2 m++ ;
309 2 }
310 1
311 1 lcd_pos(0x40) ; //设置显示位置为第二行第1个字符
312 1 m = 0 ;
313 1 while(cdis4[m] != '\0')
314 1 {
315 2 lcd_wdat(cdis4[m]) ; //显示字符
316 2 m++ ;
317 2 }
318 1 }
319
320
321 /* 主函数 */
322 /************************************/
323 void main()
324 {
325 1 Ok_Menu () ;
326 1
327 1 do
328 1 {
329 2 Read_Temperature() ;
330 2 Disp_Temperature() ;
331 2 }
332 1 while(!presence) ;
333 1
334 1 Error_Menu () ;
335 1
336 1 do
337 1 {
338 2 Init_DS18B20() ;
339 2 beep() ;
340 2 }
341 1 while(presence) ;
342 1 }
343
C51 COMPILER V7.20 16021602 06/12/2008 13:37:14 PAGE 7
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
Error_Menu . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
m. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
ditab. . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0045H 16
Disp_Temperature . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_WriteOneChar. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
dat. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
DQ . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0092H 1
Init_DS18B20 . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
BEEP . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A1H 1
beep . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
y. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
mytab. . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0055H 8
_lcd_wcmd. . . . . . . . . . . . . . . PUBLIC CODE PROC 0007H -----
cmd. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
ReadOneChar. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
dat. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
_delay1. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0004H -----
ms . . . . . . . . . . . . . . . . . * REG * DATA INT 0006H 2
y. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_lcd_wdat. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
dat. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
Ok_Menu. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
m. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
temp_data. . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0000H 2
LCD_EN . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B2H 1
_lcd_pos . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
pos. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
lcd_init . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
_Delay . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0006H -----
num. . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
cdis1. . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 18
cdis2. . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0012H 17
cdis3. . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0023H 17
cdis4. . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0034H 17
LCD_RS . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B0H 1
lcd_busy . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
result . . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
presence . . . . . . . . . . . . . . . PUBLIC DATA BIT 0000H 1
LCD_RW . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B1H 1
writetab . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
Read_Temperature . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
display. . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0002H 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 622 ----
CONSTANT SIZE = 93 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
C51 COMPILER V7.20 16021602 06/12/2008 13:37:14 PAGE 8
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 + -