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

📄 temp.lst

📁 采用KS0108控制ic的 液晶显示驱动程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 220          ////////////////////////////////////////////////////////////    
 221          void tmstart (void)       //发送ds1820 开始转换//
 222          {                          
 223   1              tmreset();  //复位//     
 224   1              dmsec(1);  //延时//     
 225   1              tmwbyte(0xcc);  //跳过序列号命令   //
 226   1              tmwbyte(0x44);  //发转换命令 44H,   //
 227   1      }         
 228          /////////////////////////////////////////////////////////
 229                 
 230          void WQJ(void)  //汉字 无器件
 231           {
 232   1              lcd_clr();
 233   1                      hz_disp(26,3, WU);      
 234   1                      hz_disp(58,3, QI );
 235   1                      hz_disp(90,3, JIAN);
 236   1       }
 237          void tmrtemp (void)       //读取温度
 238          {                          
 239   1                      unsigned char a,b; 
 240   1                      tmreset ();  //复位     //
 241   1                      dmsec (1);  //延时     //
C51 COMPILER V7.06   TEMP                                                                  03/17/2006 15:30:26 PAGE 5   

 242   1                      tmwbyte (0xcc);  //跳过序列号命令   //
 243   1                      tmwbyte (0xbe);  //发送读取命令     //
 244   1                      a = tmrbyte ();  //读取低位温度    //
 245   1                      b = tmrbyte ();   //读取高位温度    //
 246   1              fg=b;            //取温度为负标志
 247   1                      if(fg>0x7f)      //最高位为1时温度是负
 248   1                      {a=~a+1;         //去除补码
 249   2                       lcd_putchar8x8(22,6, -3+'0');//显示负号
 250   2              }
 251   1                      sdata = a/16+b*16;
 252   1                      xiaoshu1 = (a&0x0f)*10/16;
 253   1                      xiaoshu2 = (a&0x0f)*100/16%10;  
 254   1                      xiaoshu=xiaoshu1*10+xiaoshu2;
 255   1      }  
 256          //////////////////////////////////////////////////////   
 257          void DS18B20PRO(void)         
 258          {    
 259   1        tmstart();      
 260   1        dmsec(100);   //如果是不断地读取的话可以不延时 //
 261   1        tmrtemp();    //读取温度,执行完毕温度将存于TMP中 //
 262   1      }
 263          /////////////////////////////////////////////////////// 
 264          void DISPLAY(void)  //LCD显示函数.
 265          {       
 266   1              
 267   1              bc=sdata/100;
 268   1              lcd_putchar8x8(33,6, bc+'0');
 269   1              
 270   1              bc=sdata%100/10;
 271   1              lcd_putchar8x8(41,6, bc+'0');
 272   1              
 273   1              bc=sdata%10;
 274   1              lcd_putchar8x8(49,6, bc+'0');
 275   1              
 276   1              bc=xiaoshu1;
 277   1              lcd_putchar8x8(61,6, bc+'0');
 278   1              
 279   1              bc=xiaoshu2%10;
 280   1              lcd_putchar8x8(69,6, bc+'0');
 281   1              
 282   1              if((sdata>200)|(sdata<-55))
 283   1              { 
 284   2              WQJ();
 285   2              dmsec(100);
 286   2              dmsec(100);
 287   2              }
 288   1      }
 289          //****************************************************
 290          //  24c16读写
 291          //****************************************************
 292          #define uchar unsigned char
 293          #define uint unsigned int
 294           uchar mintem; //最低温度
 295             uchar shuj;
 296          sbit scl=P3^7;  //24c02 SCL
 297          sbit sda=P3^6;  //24c02 SDA
 298          sbit DOG=P1^7;  //狗
 299          uchar x24c02_read(uchar address);  //从24c02的地址address中读取一个字节数据
 300          void x24c02_write(uchar address,uchar info);  //向24c02的address地址中写入一字节数据info
 301          void x24c02_init();   //24c02初始化子程序
 302          void delay1(uchar x);
 303          void flash();
C51 COMPILER V7.06   TEMP                                                                  03/17/2006 15:30:26 PAGE 6   

 304          void x24c01_init();
 305          void start();
 306          void stop();
 307          void writex(uchar j);
 308          uchar readx();
 309          void clock();
 310          void delay1(uchar x)
 311          {
 312   1         uint i;
 313   1         for(i=0;i<x;i++);
 314   1         DOG=~DOG;
 315   1      }
 316          void flash()
 317          {
 318   1         //uchar u;
 319   1         DOG=~DOG;
 320   1      }
 321          void x24c02_init()
 322          {
 323   1         scl=1; flash(); sda=1; flash();
 324   1      }
 325          void start()
 326          {
 327   1         sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
 328   1      }
 329          void stop()
 330          {
 331   1         sda=0; flash(); scl=1; flash(); sda=1; flash();
 332   1      }
 333          void writex(uchar j)
 334          {
 335   1         uchar i,temp;
 336   1         temp=j;
 337   1         for (i=0;i<8;i++){
 338   2            temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
 339   2         }
 340   1         scl=0; flash(); sda=1; flash();
 341   1      }
 342          uchar readx()
 343          {
 344   1         uchar i,j,k=0;
 345   1         scl=0; flash(); sda=1;
 346   1         for (i=0;i<8;i++){
 347   2            flash(); scl=1; flash();
 348   2            if (sda==1) j=1;
 349   2            else j=0;
 350   2            k=(k<<1)|j; scl=0;
 351   2         }
 352   1         flash(); return(k);
 353   1      }
 354          void clock()
 355          {
 356   1         uchar i=0;
 357   1         scl=1; flash();
 358   1         while ((sda==1)&&(i<255))i++;
 359   1         scl=0; flash();
 360   1      }
 361          uchar x24c02_read(uchar address)
 362          {
 363   1         //uchar shuj;
 364   1         start(); writex(0xa0);
 365   1         clock(); writex(address);
C51 COMPILER V7.06   TEMP                                                                  03/17/2006 15:30:26 PAGE 7   

 366   1         clock(); start();
 367   1         writex(0xa1); clock();
 368   1         shuj=readx(); stop();
 369   1         delay1(10);
 370   1         return(shuj);
 371   1      }
 372          void x24c02_write(uchar address,uchar info)
 373          {
 374   1         EA=0;
 375   1         start(); writex(0xa0);
 376   1         clock(); writex(address);
 377   1         clock(); writex(info);
 378   1         clock(); stop();
 379   1         EA=1;
 380   1         delay1(50);
 381   1      }
 382          void key()
 383          {P1=0xff;
 384   1       /*if(P1==0xfe)
 385   1        {lcd_clr();
 386   1         x24c02_write(0xa0,6);
 387   1         hz_disp(0,0, WEN);
 388   1         }*/
 389   1       if(P1==0xfd)
 390   1        {x24c02_read(0xa0);//读24C08 
 391   2        lcd_clr();
 392   2        bc=shuj/10;
 393   2        lcd_putchar8x8(44,0, bc+'0');
 394   2        bc=shuj%10;
 395   2        lcd_putchar8x8(52,0, bc+'0');
 396   2        }
 397   1        }
 398          void min() //测到最低温度函数
 399          {
 400   1        
 401   1        if(mintem>sdata)
 402   1        mintem=sdata;
 403   1        x24c02_write(0xa0,mintem);
 404   1        }
 405          void main(void) 
 406          {       
 407   1      
 408   1                      lcd_init();
 409   1                      lcd_clr();
 410   1                      x24c02_read(0xa0);
 411   1                      mintem=shuj;
 412   1                      hz_disp(21,2, DANG);    
 413   1                      hz_disp(37,2, QIAN );
 414   1                      hz_disp(53,2, WEN);
 415   1                      hz_disp(69,2, DU);
 416   1                      hz_disp(85,2, WEI);
 417   1                      //lcd_putchar8x8(96,3,10+'0');
 418   1                      lcd_putchar8x8(55,6, -2+'0');//小数点
 419   1                      hz_disp(75,5,SHESHI);
 420   1                      
 421   1                      while(1) 
 422   1        {  
 423   2          DS18B20PRO();
 424   2              DISPLAY();
 425   2              key();
 426   2              min();
 427   2        } 
C51 COMPILER V7.06   TEMP                                                                  03/17/2006 15:30:26 PAGE 8   

 428   1      } 
 429          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    890    ----
   CONSTANT SIZE    =   1376    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -