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

📄 16021602.lst

📁 用1602液晶显示温度 温度由18B20采集 控制器是AT89C52
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -