⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text.lst

📁 用12864液晶显示电子时钟,并能进行温度显示,可更改时间
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -