📄 text.lst
字号:
252 1 {
253 2 tCount=0;
254 2 while( Reset() ){};
255 2 WriteDS18b20(0xcc); //跳过ROM配置
256 2 WriteDS18b20(0x44); //启动温度转换
257 2
258 2 a=ReadDS18b20();
259 2 nCurTemp=a;
260 2 nCurTemp = nCurTemp<<4;
261 2 a=ReadDS18b20();
262 2 nCurTemp += a;
263 2
264 2 while( Reset() ){};
265 2 WriteDS18b20(0xcc); //跳过ROM配置
266 2 WriteDS18b20(0x44); //启动温度转换
267 2 }
268 1 }
269
270 ////////////////////////////////////////////////////////////////////
271 ////////////////////////////////////////////////////////////////////
272 ////////////////////////////////////////////////////////////////////
273 /* LCD端口定义*/
274 #define LCD_data P0 //数据口
275 sbit LCD_RS = P2^5; //寄存器选择输入
276 sbit LCD_RW = P2^6; //液晶读/写控制
277 sbit LCD_EN = P2^7; //液晶使能控制
278
279 uchar dis1[] = {" 09年06月01日 "};
280 uchar dis2[] = {" 00时00分00秒 "};
281 uchar dis3[] = {" 金刚--51学习板"};
282 uchar dis4[] = {" 星期一 00.00℃"};
283
284 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
285 /*******************************************************************/
286 /* */
287 /* 延时函数 */
288 /* */
289 /*******************************************************************/
290 void delay(int ms)
291 {
292 1 while(ms--)
293 1 {
294 2 uchar i;
295 2 for(i=0;i<250;i++)
296 2 {
297 3 _nop_();
298 3 _nop_();
299 3 _nop_();
300 3 _nop_();
301 3 }
302 2 }
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 6
303 1 }
304 /*******************************************************************/
305 /* */
306 /*检查LCD忙状态 */
307 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
308 /* */
309 /*******************************************************************/
310 bit lcd_busy()
311 {
312 1 bit result;
313 1 LCD_RS = 0;
314 1 LCD_RW = 1;
315 1 LCD_EN = 1;
316 1 delayNOP();
317 1 result = (bit)(P0&0x80);
318 1 LCD_EN = 0;
319 1 return(result);
320 1 }
321 /*******************************************************************/
322 /* */
323 /*写指令数据到LCD */
324 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
325 /* */
326 /*******************************************************************/
327 void lcd_wcmd(uchar cmd)
328 {
329 1 while(lcd_busy());
330 1 LCD_RS = 0;
331 1 LCD_RW = 0;
332 1 LCD_EN = 0;
333 1 _nop_();
334 1 _nop_();
335 1 P0 = cmd;
336 1 delayNOP();
337 1 LCD_EN = 1;
338 1 delayNOP();
339 1 LCD_EN = 0;
340 1 }
341 /*******************************************************************/
342 /* */
343 /*写显示数据到LCD */
344 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
345 /* */
346 /*******************************************************************/
347 void lcd_wdat(uchar dat)
348 {
349 1 while(lcd_busy());
350 1 LCD_RS = 1;
351 1 LCD_RW = 0;
352 1 LCD_EN = 0;
353 1 P0 = dat;
354 1 delayNOP();
355 1 LCD_EN = 1;
356 1 delayNOP();
357 1 LCD_EN = 0;
358 1 }
359 /*********************************************************/
360 /* */
361 /* 设定显示位置 */
362 /* */
363 /*********************************************************/
364 void lcd_pos(uchar X,uchar Y)
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 7
365 {
366 1 uchar pos;
367 1 if (X==0)
368 1 {X=0x80;}
369 1 else if (X==1)
370 1 {X=0x90;}
371 1 else if (X==2)
372 1 {X=0x88;}
373 1 else if (X==3)
374 1 {X=0x98;}
375 1 pos = X+Y ;
376 1 lcd_wcmd(pos); //显示地址
377 1 }
378 /*******************************************************************/
379 /* */
380 /* LCD初始化设定 */
381 /* */
382 /*******************************************************************/
383 void lcd_init()
384 {
385 1 lcd_wcmd(0x34); //扩充指令操作
386 1 delay(5);
387 1 lcd_wcmd(0x30); //基本指令操作
388 1 delay(5);
389 1 lcd_wcmd(0x0C); //显示开,关光标
390 1 delay(5);
391 1 lcd_wcmd(0x01); //清除LCD的显示内容
392 1 delay(5);
393 1 }
394
395
396 void int0(void) interrupt 0
397 {
398 1 dis1[0]++;
399 1 }
400 ///////////////////////////////////////////////////////////////////////
401 uchar code dotcode[32]={0,3,6,9,12,16,19,22,
402 25,28,31,34,38,41,44,48,
403 50,53,56,59,63,66,69,72,
404 75,78,81,84,88,91,94,97};
405 void Time_byte90()
406 {
407 1 uchar a;
408 1 v_Get1302();
409 1 dis2[11] = 0x30 + ucCurtime[0]%0x0a; // 秒
410 1 dis2[10] = 0x30 + ucCurtime[0]/0x0a; //
411 1
412 1 dis2[7] = 0x30 + ucCurtime[1]%0x0a; // 分
413 1 dis2[6] = 0x30 + ucCurtime[1]/0x0a; //
414 1
415 1 dis2[3] = 0x30 + ucCurtime[2]%0x0a; // 时
416 1 dis2[2] = 0x30 + ucCurtime[2]/0x0a; //
417 1
418 1 dis1[11] = 0x30 + ucCurtime[3]%0x0a; // 日
419 1 dis1[10] = 0x30 + ucCurtime[3]/0x0a; //
420 1
421 1 dis1[7] = 0x30 + ucCurtime[4]%0x0a; // 月
422 1 dis1[6] = 0x30 + ucCurtime[4]/0x0a; //
423 1
424 1 dis4[6] = 0x30 + ucCurtime[5]; // 星期
425 1
426 1 dis1[3] = 0x30 + ucCurtime[6]%0x0a; // 年
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 8
427 1 dis1[2] = 0x30 + ucCurtime[6]/0x0a; //
428 1
429 1 if( nCurTemp >=1024 )
430 1 {
431 2 dis4[8]=' ';
432 2 }
433 1 else
434 1 {
435 2 dis4[8]=0x2d;
436 2 nCurTemp = ~nCurTemp+1;
437 2 }
438 1 a=dotcode[nCurTemp & 0x0f];
439 1 nCurTemp =nCurTemp>>4;
440 1
441 1 dis4[13]= 0x30 + a%0x0a; //
442 1 dis4[12]= 0x30 + a/0x0a; //
443 1
444 1 dis4[10]= 0x30 + nCurTemp%0x0a; //
445 1 dis4[9]= 0x30 + nCurTemp/0x0a; //
446 1
447 1 }
448 ///////////////////////////////////////////////////////////////////////
449 /*********************************************************/
450 /* */
451 /* 主程序 */
452 /* */
453 /*********************************************************/
454 main()
455 {
456 1 uchar i;
457 1 delay(10); //延时
458 1
459 1 lcd_init(); //初始化LCD
460 1 v_Set1302();
461 1 DS18b20_Init();
462 1
463 1 while(1)
464 1 {
465 2 Time_byte90();
466 2
467 2 lcd_pos(0,0); //设置显示位置为第一行的第1个字符
468 2 i = 0;
469 2 while(dis1[i] != '\0')
470 2 { //显示字符
471 3 lcd_wdat(dis1[i]);
472 3 i++;
473 3 }
474 2 lcd_pos(1,0); //设置显示位置为第二行的第1个字符
475 2 i = 0;
476 2 while(dis2[i] != '\0')
477 2 {
478 3 lcd_wdat(dis2[i]); //显示字符
479 3 i++;
480 3 }
481 2 lcd_pos(2,0); //设置显示位置为第三行的第1个字符
482 2 i = 0;
483 2 while(dis3[i] != '\0')
484 2 {
485 3 lcd_wdat(dis3[i]); //显示字符
486 3 i++;
487 3 }
488 2 lcd_pos(3,0); //设置显示位置为第四行的第1个字符
C51 COMPILER V8.02 TEXT 04/15/2009 13:03:06 PAGE 9
489 2 i = 0;
490 2 while(dis4[i] != '\0')
491 2 {
492 3 lcd_wdat(dis4[i]); //显示字符
493 3 i++;
494 3 }
495 2 }
496 1 }
497
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 985 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 85 1
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -