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

📄 zhouyi.lst

📁 protues仿真基于DS1820多点粮食监控,液晶显示检测到的温度
💻 LST
📖 第 1 页 / 共 3 页
字号:
 475   1              SelectScreen(0);
 476   1              SetOnOff(1); //开显示
 477   1      
 478   1              SelectScreen(0);
 479   1              ClearScreen(0);//清屏
 480   1      
 481   1              SetStartLine(0); //开始行:0
 482   1      
 483   1      }
 484          
 485          
 486          void WriteChinese(uchar  ss,uchar  page,uchar  column,uchar menu,uchar  hz[])
 487          {
 488   1              uchar  i;                         //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出,menu为菜单选项         
 489   1              SelectScreen(ss);
 490   1              column=16*column;       //汉字是16X16的,每隔16列扫描 
 491   1              column=column&0x3f;
 492   1      
 493   1              SetLine(page);  //写上半页
 494   1              SetColumn(column); //控制列
 495   1              if(menu==1)
 496   1                      for(i=0;i<16;i++)  //控制16列的数据输出
 497   1                      {
 498   2                      //WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
 499   2                      WriteByte(0xff-hz[i]);
 500   2                      }
 501   1              else
 502   1                      for(i=0;i<16;i++)  //控制16列的数据输出
 503   1                      {
 504   2                      //WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
 505   2                      WriteByte(hz[i]);
 506   2                      }
 507   1      
 508   1              SetLine(page+1);                 //写下半页
 509   1              SetColumn(column);         //控制列
 510   1              if(menu==1)
 511   1                 for(i=0;i<16;i++)      //控制16列的数据输出
 512   1                      {
 513   2                      //WriteByte(Hzk[i+32*number+16]);       //i+32*number+16汉字的后16个数据输出
 514   2                      WriteByte(0xff-hz[i+16]);
 515   2                      }
 516   1               else
 517   1                      for(i=0;i<16;i++)         //控制16列的数据输出
 518   1                      {
 519   2                      //WriteByte(Hzk[i+32*number+16]);       //i+32*number+16汉字的后16个数据输出
 520   2                      WriteByte(hz[i+16]);
 521   2                      }
 522   1      } 
 523          
 524          void WriteDigit(uchar ss,uchar page,uchar column,uchar digit[])
 525          {
 526   1              uchar  i;                         //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出        
 527   1              SelectScreen(ss);
 528   1              column=8*column;        //数字是8X16的,每隔8列扫描 
 529   1              column=column&0x3f;
 530   1      
C51 COMPILER V8.02   ZHOUYI                                                                05/22/2007 16:08:16 PAGE 10  

 531   1              SetLine(page);  //写上半页
 532   1              SetColumn(column); //控制列
 533   1              for(i=0;i<8;i++)  //控制16列的数据输出
 534   1              {
 535   2              //WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
 536   2              WriteByte(digit[i]);
 537   2              }
 538   1      
 539   1              SetLine(page+1);                 //写下半页
 540   1              SetColumn(column);         //控制列
 541   1          for(i=0;i<8;i++)      //控制16列的数据输出
 542   1              {
 543   2              //WriteByte(Hzk[i+32*number+16]);       //i+32*number+16汉字的后16个数据输出
 544   2              WriteByte(digit[i+8]);
 545   2               }
 546   1      } 
 547          
 548          
 549          
 550          
 551          void delay(int num)//延时函数
 552          {
 553   1              while(num--) ;
 554   1      }
 555          
 556          
 557          Init_DS18B20(void)//初始化ds1820
 558          {
 559   1              unsigned char x=0;
 560   1              DQ = 1;    //DQ复位
 561   1              delay(8);  //稍做延时
 562   1              DQ = 0;    //单片机将DQ拉低
 563   1              delay(80); //精确延时 大于 480us
 564   1              DQ = 1;    //拉高总线
 565   1              delay(14);
 566   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 567   1              delay(20);
 568   1      }
 569          
 570          
 571          ReadOneChar(void)//读一个字节
 572          {
 573   1              unsigned char i=0;
 574   1              unsigned char dat = 0;
 575   1              for (i=8;i>0;i--)
 576   1              {
 577   2                      DQ = 0; // 给脉冲信号
 578   2                      dat>>=1;
 579   2                      DQ = 1; // 给脉冲信号
 580   2                      if(DQ)
 581   2                      dat|=0x80;
 582   2                      delay(4);
 583   2              }
 584   1              return(dat);
 585   1      }
 586          
 587          
 588          WriteOneChar(unsigned char dat)//写一个字节
 589          {
 590   1              unsigned char i=0;
 591   1              for (i=8; i>0; i--)
 592   1              {
C51 COMPILER V8.02   ZHOUYI                                                                05/22/2007 16:08:16 PAGE 11  

 593   2                      DQ = 0;
 594   2                      DQ = dat&0x01;
 595   2                      delay(5);
 596   2                      DQ = 1;
 597   2                      dat>>=1;
 598   2              }
 599   1      }
 600          
 601          
 602          unsigned char *ReadTemperature(void)//读取温度
 603          {
 604   1              unsigned char a=0;
 605   1              unsigned char b=0;
 606   1              unsigned char Temper[2]={0};
 607   1              
 608   1              //unsigned int t=0;
 609   1              float tt=0;
 610   1              Init_DS18B20();
 611   1              WriteOneChar(0xCC); // 跳过读序号列号的操作
 612   1              WriteOneChar(0x44); // 启动温度转换
 613   1              Init_DS18B20();
 614   1              WriteOneChar(0xCC); //跳过读序号列号的操作
 615   1              WriteOneChar(0xBE); //读取温度寄存器
 616   1              a=ReadOneChar();        //数据位 
 617   1              b=ReadOneChar();   //负数标志位b为0温度为正,b为0xff,温度为负 
 618   1              //t=a;
 619   1              //t<<=8;为什么要移动8位???
 620   1      //      t=t|a;
 621   1              //tt=t*0.0625;
 622   1              //t= tt*10+0.5; //放大10倍输出并四舍五入
 623   1              a=a*0.5;
 624   1              Temper[0]=a;
 625   1              Temper[1]=b;
 626   1              return(Temper);
 627   1      }
 628                  
 629           
 630          
 631          main()
 632          {
 633   1                     uchar j=0,key=0,PressSign=1;
 634   1                                 InitLCD();
 635   1                                 ClearScreen(0);//清屏
 636   1                                 SetStartLine(0);
 637   1               //for(j=0;;j++)
 638   1                      //{
 639   1                              //SetStartLine(j); 
 640   1                              WriteChinese(LiftHalf,Page0,0,MenuOff,liang);
 641   1                              WriteChinese(LiftHalf,Page0,1,MenuOff,ku);
 642   1                              WriteChinese(LiftHalf,Page0,2,MenuOff,jian); 
 643   1                              WriteChinese(LiftHalf,Page0,3,MenuOff,kong);
 644   1      
 645   1                              WriteChinese(RightHalf,Page0,0,MenuOff,xi);
 646   1                              WriteChinese(RightHalf,Page0,1,MenuOff,tong);
 647   1                              //WriteChinese(RightHalf,Page0,2,MenuOn,lu);
 648   1                              //WriteChinese(RightHalf,Page0,2,yong);
 649   1                              //WriteChinese(RightHalf,Page0,3,yuan3);
 650   1      
 651   1                              WriteChinese(LiftHalf,Page2,0,MenuOff,di);
 652   1                              WriteChinese(LiftHalf,Page2,1,MenuOff,cone);
 653   1                              WriteChinese(LiftHalf,Page2,2,MenuOff,dian);
 654   1                              WriteChinese(LiftHalf,Page2,3,MenuOff,wen);
C51 COMPILER V8.02   ZHOUYI                                                                05/22/2007 16:08:16 PAGE 12  

 655   1      
 656   1                              WriteChinese(RightHalf,Page2,0,MenuOff,du);
 657   1                              //WriteDigit(RightHalf,Page2,2,maohao);
 658   1                              WriteChinese(RightHalf,Page2,3,MenuOff,TemperatureSign);
 659   1                      
 660   1                              //SetStartLine(j); 
 661   1                              WriteChinese(LiftHalf,Page4,0,MenuOff,huang);
 662   1                              WriteChinese(LiftHalf,Page4,1,MenuOff,shi);
 663   1                              WriteChinese(LiftHalf,Page4,2,MenuOff,li); 
 664   1                              WriteChinese(LiftHalf,Page4,3,MenuOff,gong);
 665   1      
 666   1                              //SetStartLine(j);
 667   1                              WriteChinese(RightHalf,Page4,0,MenuOff,xue);
 668   1                              WriteChinese(RightHalf,Page4,1,MenuOff,yuan4);
 669   1                              WriteChinese(RightHalf,Page4,2,MenuOff,zhou);
 670   1                              WriteChinese(RightHalf,Page4,3,MenuOff,yi);
 671   1      
 672   1                         //}
 673   1               /*while(1)
 674   1                      {
 675   1                              if(P0^0==1)
 676   1                                 {void delay();
 677   1                                      if(P0^0==1)
 678   1                                      {key++;PressSign=1;
 679   1                                         if(key==5)
 680   1                                                      {
 681   1                                                              key=1;
 682   1                                                      }
 683   1                                      }
 684   1                               while(P0^0==1);
 685   1                                 }
 686   1                              
 687   1                      }*/
 688   1      
 689   1        while(1)//主循环
 690   1              { unsigned char *Temper;
 691   2              unsigned char a=0,b=0,c=0,f=0,i=0;
 692   2        
 693   2              Temper=ReadTemperature();//读温度
 694   2              i=Temper[0];
 695   2              a=i/100;
 696   2              WriteDigit(RightHalf,Page2,3,zero+a*16);
 697   2              b=i/10-a*10;
 698   2              WriteDigit(RightHalf,Page2,4,zero+b*16);
 699   2              c=i-a*100-b*10;
 700   2              WriteDigit(RightHalf,Page2,5,zero+c*16);
 701   2              if(Temper[1]==0)
 702   2                      WriteDigit(RightHalf,Page6,6,zero);
 703   2              else
 704   2                  WriteDigit(RightHalf,Page6,6,zero+1*16);
 705   2              DelayNS(200);
 706   2              }
 707   1      }
 708          
 709          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1236    ----
   CONSTANT SIZE    =    930    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V8.02   ZHOUYI                                                                05/22/2007 16:08:16 PAGE 13  

   DATA SIZE        =   ----      31
   IDATA SIZE       =   ----       3
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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