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

📄 lcd1602.lst

📁 此程序实现
💻 LST
📖 第 1 页 / 共 2 页
字号:
 227   2          DQ = 1 ; // 给脉冲信号
 228   2      
 229   2          if(DQ)
 230   2           dat |= 0x80 ;
 231   2          Delay(4) ;
 232   2        }
 233   1      
 234   1          return (dat) ;
 235   1      }
 236          
 237          /* 写一个字节                                         */
 238          /*******************************************************************/
 239           WriteOneChar(unsigned char dat)
 240          {
 241   1        unsigned char i = 0 ;
C51 COMPILER V7.50   LCD1602                                                               01/13/2009 21:19:07 PAGE 5   

 242   1        for (i = 8 ; i > 0 ; i--)
 243   1        {
 244   2          DQ = 0 ;
 245   2          DQ = dat&0x01 ;
 246   2          Delay(5) ;
 247   2      
 248   2          DQ = 1 ;
 249   2          dat>>=1 ;
 250   2        }
 251   1      }
 252          
 253          /* 读取温度                            */
 254          /*******************************************************************/
 255           Read_Temperature(void)
 256          {
 257   1           Init_DS18B20() ;
 258   1        
 259   1           WriteOneChar(0xCC) ;  // 跳过读序号列号的操作
 260   1           WriteOneChar(0x44) ;  // 启动温度转换
 261   1      
 262   1           Init_DS18B20() ;
 263   1           WriteOneChar(0xCC) ;  //跳过读序号列号的操作
 264   1           WriteOneChar(0xBE) ;  //读取温度寄存器
 265   1      
 266   1           temp_data[0] = ReadOneChar() ;   //温度低8位
 267   1           temp_data[1] = ReadOneChar() ;   //温度高8位 
 268   1      }
 269          
 270          /* 数据转换与温度显示                                              */
 271          /*******************************************************************/
 272           Disp_Temperature()
 273          {
 274   1        display[4]=temp_data[0]&0x0f ;
 275   1        display[0]=ditab[display[4]]+0x30 ;     //查表得小数位的值
 276   1        
 277   1        display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;
 278   1        display[3]=display[4]/100+0x30 ;
 279   1        display[1]=display[4]%100 ;
 280   1        display[2]=display[1]/10+0x30 ;
 281   1        display[1]=display[1]%10+0x30 ;
 282   1      
 283   1          if(display[3]==0x30)        //高位为0,不显示
 284   1         { 
 285   2           display[3]=0x20 ;              
 286   2           if(display[2]==0x30)      //次高位为0,不显示
 287   2           display[2]=0x20 ;
 288   2         }
 289   1      
 290   1           lcd_pos(0x48) ;             
 291   1           lcd_wdat(display[3]) ;        //百位数显示 
 292   1           lcd_pos(0x49) ;             
 293   1           lcd_wdat(display[2]) ;        //十位数显示 
 294   1        lcd_pos(0x4a) ;             
 295   1           lcd_wdat(display[1]) ;        //个位数显示 
 296   1        lcd_pos(0x4c) ;             
 297   1           lcd_wdat(display[0]) ;        //小数位数显示 
 298   1      }  
 299          
 300          /*******************************************************************/
 301          /* 蜂鸣器响一声                 */
 302          /******************************************************************
 303          void beep()
C51 COMPILER V7.50   LCD1602                                                               01/13/2009 21:19:07 PAGE 6   

 304            {
 305              unsigned char y ;
 306              for (y=0 ;y<100 ;y++)
 307              {
 308                Delay(60) ;
 309                BUZZ=!BUZZ ;                //BUZZ取反
 310              } 
 311              BUZZ=1 ;                      //关闭蜂鸣器
 312           Delay(40000) ;
 313            }
 314          
 315          /* DS18B20 OK 显示菜单                                             */
 316          /*******************************************************************/
 317          void  Ok_Menu ()
 318          { 
 319   1          uchar  m ;
 320   1          lcd_init() ;                //初始化LCD 
 321   1                  
 322   1          lcd_pos(0) ;                //设置显示位置为第一行的第1个字符
 323   1           m = 0 ;
 324   1          while(cdis1[m] != '\0')
 325   1           {                         //显示字符
 326   2             lcd_wdat(cdis1[m]) ;
 327   2             m++ ;
 328   2           }
 329   1      
 330   1          lcd_pos(0x40) ;             //设置显示位置为第二行第1个字符
 331   1           m = 0 ;
 332   1          while(cdis2[m] != '\0')
 333   1           {
 334   2             lcd_wdat(cdis2[m]) ;      //显示字符
 335   2             m++ ;
 336   2           }
 337   1      
 338   1           writetab() ;               //自定义字符写入CGRAM
 339   1           delay1(5) ;
 340   1           lcd_pos(0x4d) ;
 341   1           lcd_wdat(0x00) ;          //显示自定义字符
 342   1      }
 343          
 344          
 345          /* DS18B20 ERROR 显示菜单                             */
 346          /*******************************************************************/
 347          void  other_Menu ()
 348          {
 349   1           uchar  m ;
 350   1           lcd_init() ;                //初始化LCD 
 351   1       
 352   1          lcd_pos(0) ;                //设置显示位置为第一行的第1个字符
 353   1           m = 0 ;
 354   1           while(cdis3[m] != '\0')
 355   1           {                         //显示字符
 356   2             lcd_wdat(cdis3[m]) ;
 357   2             m++ ;
 358   2           }
 359   1      
 360   1           lcd_pos(0x40) ;             //设置显示位置为第二行第1个字符
 361   1           m = 0 ;
 362   1           while(cdis4[m] != '\0')
 363   1           {
 364   2             lcd_wdat(cdis4[m]) ;      //显示字符
 365   2             m++ ;
C51 COMPILER V7.50   LCD1602                                                               01/13/2009 21:19:07 PAGE 7   

 366   2           }
 367   1      }
 368          
 369          
 370          unsigned  char    time_temp;               //全局变量,定时器加1
 371          unsigned  char    time_num;                    //全局变量,按一次键加1
 372          
 373          
 374          /************主程序**************/
 375          main()
 376          {       unsigned  char  i=0;                //要显示的数
 377   1          unsigned  char  temp_a,temp_b;      //个位、十位数
 378   1               P0=0;    //所有的发光管亮
 379   1           delay1(10) ;
 380   1           Ok_Menu () ;
 381   1               Read_Temperature() ;
 382   1          Disp_Temperature() ; 
 383   1      
 384   1         while(1)                     
 385   1        {unsigned  int temp;
 386   2      
 387   2         {
 388   3          temp_b=i/10;
 389   3              temp_a=i%10;
 390   3          for(temp=0;temp<100;temp++)
 391   3          { 
 392   4                 disp_selec(0,temp_a);                 //显示个位数
 393   4                 dellay(100);
 394   4                 disp_selec(1,temp_b);                 //显示十位数
 395   4                 dellay(100);
 396   4           }                                                   //显示数加1
 397   3            i++;
 398   3              Read_Temperature() ;
 399   3          Disp_Temperature() ; 
 400   3                if(i%2)
 401   3                { P0&=0Xf0; P0|=0X05;}
 402   3                 else
 403   3                 { P0&=0Xf0; P0|=0X0a;}
 404   3                 if(i%10==0)
 405   3                       { BUZZ=0;
 406   4                      dellay(15000);   //能被10整除时,蜂鸣器响170MS
 407   4                      BUZZ=1;
 408   4                       }
 409   3                  BUZZ=0;
 410   3                      dellay(200);    //蜂鸣器响20MS  
 411   3                if(i>99)
 412   3                 {  i=0;
 413   4                      dellay(50000);  //能被100整除时,蜂鸣器响670MS
 414   4                 }
 415   3                      BUZZ=1;
 416   3                 P1=~P1;
 417   3               } 
 418   2       
 419   2        }         
 420   1      } 
 421          
 422          
 423          
 424          /**************************************************
 425          ** 函数名称: disp_selec
 426          ** 入口参数:bit_selec,seg
 427          ** 出口参数:无
C51 COMPILER V7.50   LCD1602                                                               01/13/2009 21:19:07 PAGE 8   

 428          ** 功能描述: 选择相应数码管,进行显示
 429          ****************************************************/
 430          void  disp_selec(unsigned  char bit_selec,unsigned  char  seg)
 431          {
 432   1         if(bit_selec==0)       //数码管位选0
 433   1              {
 434   2                DIG0=0;
 435   2                DIG1=1;
 436   2               }
 437   1              if(bit_selec==1)   //数码管位选1
 438   1               {
 439   2                 DIG0=1;
 440   2                 DIG1=0;
 441   2               }
 442   1                P1=DispBuf[seg];
 443   1      
 444   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    775    ----
   CONSTANT SIZE    =    102    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9       5
   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 + -