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

📄 gdlcd.lst

📁 自动通风系统程序及proteus仿真
💻 LST
字号:
C51 COMPILER V7.10   GDLCD                                                                 05/12/2013 21:48:04 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE GDLCD
OBJECT MODULE PLACED IN gdLCD.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE gdLCD.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************************
   2          *  描述:                LCD1602 滚动显示                                       *
   3          * 显示方式:                                                                   *
   4          * 1、从左到右逐字显示,闪动二次,清屏。                                        *
   5          * 2、再从右到左逐字显示,闪动二次,清屏。                                      *
   6          * 3、周期性地重复上述显示方式。                                                *                          
             -  
   7          ********************************************************************************/
   8          
   9          #include <reg51.h>
  10          #include <intrins.h>
  11          #define  uint unsigned int
  12          //#define  uchar unsigned char
  13          typedef unsigned char BYTE;
  14          typedef bit BOOL;  
  15          sbit key1=P3^2;
  16          sbit key2=P3^3;
  17          sbit key3=P3^4;
  18          sbit key4=P3^5;
  19          sbit key5=P3^6;
  20          sbit motor=P1^0;
  21          sbit fanmotor=P1^7;
  22          sbit win11=P1^1;
  23          sbit win12=P1^2;
  24          sbit win21=P1^3;
  25          sbit win22=P1^4;
  26          sbit LCD_RS = P2^6;             
  27          sbit LCD_RW = P2^5;
  28          sbit LCD_EP = P2^7;
  29          sbit DQ = P3^7;
  30          uint temp,temp1=10,temperature=0,X,Y,Z,H,I,J,W_flag=0;
  31          BYTE code dis1[] = {"     WELCOME  TO    "};
  32          BYTE code dis2[] = {"TONGFENG C0NTR0L SYSTEM"};
  33          BYTE code dis3[] = {" ST:         RT:    "};
  34          BYTE code dis4[] = {" W_STATUS:  CLOSE "};
  35          BYTE code dis5[] = {" W_STATUS:  OPEN "};
  36          delay(int ms)    // 延时子程序
  37          {   int i;
  38   1       while(ms--)
  39   1       {
  40   2        for(i = 0; i< 250; i++)
  41   2        {
  42   3         _nop_();
  43   3         _nop_();
  44   3         _nop_();
  45   3         _nop_();
  46   3        }
  47   2      }
  48   1      }
  49          void delay1(int s)
  50          {
  51   1        while(--s) ;
  52   1                      
  53   1      }
  54          void init_18b20()
C51 COMPILER V7.10   GDLCD                                                                 05/12/2013 21:48:04 PAGE 2   

  55          {  DQ=1;
  56   1         delay1(8);
  57   1         DQ=0;
  58   1         delay1(90);
  59   1         DQ=1;
  60   1        _nop_();
  61   1        _nop_();
  62   1        delay1(100);
  63   1        DQ=1;
  64   1       }
  65          void  write_18b20(uint h)
  66           {  BYTE i;
  67   1          for(i=0;i<8;i++)
  68   1                {     DQ=0;
  69   2                  DQ=h&0x01;
  70   2                      delay1(5);
  71   2                      DQ=1;
  72   2                  h>>=1;
  73   2                }
  74   1       }
  75          
  76          BYTE read_18b20()
  77           { BYTE i,dat=0;
  78   1          DQ=1;
  79   1         _nop_();
  80   1         for(i=0;i<8;i++)
  81   1              {  DQ=0;
  82   2                 _nop_(); 
  83   2                _nop_();
  84   2                 dat>>=1;
  85   2                 DQ=1;
  86   2               _nop_();
  87   2               _nop_();       
  88   2           if(DQ)      
  89   2           dat|=0x80;
  90   2              delay1(30);
  91   2               DQ=1;
  92   2               }
  93   1      
  94   1       return dat;    
  95   1       
  96   1      }
  97          
  98          BYTE read()
  99          {   BYTE a,b;
 100   1         init_18b20();
 101   1         write_18b20(0xcc) ;
 102   1         write_18b20(0x44) ;
 103   1         init_18b20();
 104   1         write_18b20(0xcc) ;
 105   1         write_18b20(0xbe) ;
 106   1         a=read_18b20();
 107   1         b=read_18b20();
 108   1         b<<=4 ;
 109   1         b+=(a&0xf0)>>4;
 110   1      
 111   1        return b;
 112   1      
 113   1      }                          
 114          BOOL lcd_bz()
 115          {                          // 测试LCD忙碌状态
 116   1      BOOL result;
C51 COMPILER V7.10   GDLCD                                                                 05/12/2013 21:48:04 PAGE 3   

 117   1      LCD_RS = 0;
 118   1      LCD_RW = 1;
 119   1      LCD_EP = 1;
 120   1      _nop_();
 121   1      _nop_();
 122   1      _nop_();
 123   1      _nop_();
 124   1      result = (BOOL)(P0 & 0x80);
 125   1      LCD_EP = 0;
 126   1      return result; 
 127   1      }
 128          
 129          lcd_wcmd(BYTE cmd)
 130          {                          // 写入指令数据到LCD
 131   1      while(lcd_bz());
 132   1      LCD_RS = 0;
 133   1      LCD_RW = 0;
 134   1      LCD_EP = 0;
 135   1      _nop_();
 136   1      _nop_(); 
 137   1      P0 = cmd;
 138   1      _nop_();
 139   1      _nop_();
 140   1      _nop_();
 141   1      _nop_();
 142   1      LCD_EP = 1;
 143   1      _nop_();
 144   1      _nop_();
 145   1      _nop_();
 146   1      _nop_();
 147   1      LCD_EP = 0;  
 148   1      }
 149          
 150          lcd_pos(BYTE pos)
 151          {                          //设定显示位置
 152   1      lcd_wcmd(pos | 0x80);
 153   1      }
 154          
 155          lcd_wdat(BYTE dat) 
 156          {                          //写入字符显示数据到LCD
 157   1      while(lcd_bz());
 158   1      LCD_RS = 1;
 159   1      LCD_RW = 0;
 160   1      LCD_EP = 0;
 161   1      P0 = dat;
 162   1      _nop_();
 163   1      _nop_();
 164   1      _nop_();
 165   1      _nop_();
 166   1      LCD_EP = 1;
 167   1      _nop_();
 168   1      _nop_();
 169   1      _nop_();
 170   1      _nop_();
 171   1      LCD_EP = 0; 
 172   1      }
 173          
 174          lcd_init()
 175          {                        //LCD初始化设定
 176   1      lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据
 177   1      delay(1);
 178   1      lcd_wcmd(0x0c);          //显示开,关光标
C51 COMPILER V7.10   GDLCD                                                                 05/12/2013 21:48:04 PAGE 4   

 179   1      delay(1);
 180   1      lcd_wcmd(0x06);          //移动光标
 181   1      delay(1);
 182   1      lcd_wcmd(0x01);          //清除LCD的显示内容
 183   1      delay(1);
 184   1      }
 185          void keyscan()
 186          { 
 187   1          //uint a;
 188   1         if(key1==0)
 189   1          { delay1(10);
 190   2                 if(key1==0)
 191   2                   {temp1++;
 192   3                       if(temp1==60)
 193   3                         temp1=0; }
 194   2                        }
 195   1      
 196   1      
 197   1              if(key2==0)
 198   1          { delay1(10);
 199   2                 if(key2==0)
 200   2                   {temp1--;
 201   3                       //delay(200);
 202   3                       if(temp1==-5)
 203   3                         temp1=0; }
 204   2                        }
 205   1                
 206   1              if(key3==0)
 207   1          { delay(10);
 208   2                 if(key3==0)
 209   2                   {temp=temp1;
 210   3                      
 211   3                       while(!key3);
 212   3                       temperature=read();
 213   3              
 214   3                      }
 215   2               }
 216   1      
 217   1      }
 218          main()
 219          {
 220   1            BYTE i;
 221   1            lcd_init();               // 初始化LCD
 222   1            delay(10);
 223   1                lcd_wcmd(0x06);            //向右移动光标
 224   1            lcd_pos(0);                //设置显示位置为第一行的第1个字符
 225   1            i = 0;
 226   1           while(dis1[ i ] != '\0')
 227   1           {                           //显示字符"WLCOME  TO"
 228   2             lcd_wdat(dis1[ i ]);
 229   2             i++;
 230   2             delay(20);                //控制两字之间显示速度
 231   2           }
 232   1            lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 233   1            i = 0;
 234   1           while(dis2[ i ] != '\0')
 235   1           {
 236   2             lcd_wdat(dis2[ i ]);      //显示字符" WWW.PRECHIN.COM  "
 237   2             i++;
 238   2             delay(20);                //控制两字之间显示速度
 239   2           }
 240   1            delay(300);                //控制停留时间
C51 COMPILER V7.10   GDLCD                                                                 05/12/2013 21:48:04 PAGE 5   

 241   1      
 242   1            lcd_wcmd(0x01);            //清除LCD的显示内容
 243   1      
 244   1          while(1)              
 245   1         {   keyscan();
 246   2           H=temp1/100+48;
 247   2           I=(temp1%100)/10+48;
 248   2           J=(temp1%100)%10+48;
 249   2               lcd_wcmd(0x06);            //向左移动光标
 250   2            lcd_pos(0);               //设置显示位置为第一行的第16个字符
 251   2            i = 0;
 252   2               while(i<=5)
 253   2           {                           //显示字符"WLCOME  TO"
 254   3             lcd_wdat(dis3[ i ]);
 255   3             i++;
 256   3             delay(1);                //控制两字之间显示速度
 257   3           }
 258   2                lcd_pos(4);
 259   2                lcd_wdat(H);
 260   2                delay1(3);
 261   2                lcd_wdat(I);
 262   2                delay1(3);
 263   2                lcd_wdat(J);
 264   2                delay1(3);
 265   2                lcd_wdat('C');
 266   2                temperature=read();
 267   2               X=temperature/100+48;
 268   2           Y=(temperature%100)/10+48;
 269   2           Z=(temperature%100)%10+48;
 270   2            lcd_wcmd(0x06);            //向左移动光标
 271   2            lcd_pos(9);               //设置显示位置为第一行的第16个字符
 272   2                lcd_wdat('R');
 273   2                delay1(3);
 274   2                lcd_wdat('T');
 275   2                delay1(3);
 276   2            lcd_wdat(':');
 277   2                delay1(3);
 278   2                lcd_wdat(X);
 279   2                delay1(3);
 280   2                lcd_wdat(Y);
 281   2                delay1(3);
 282   2                lcd_wdat(Z);
 283   2                delay1(3);
 284   2                lcd_wdat('C'); 
 285   2           
 286   2           // delay(10);                //控制两屏转换时间
 287   2        if(W_flag==0)
 288   2                {   lcd_pos(0x40);             //设置显示位置为第二行的第16个字符
 289   3                i = 0;
 290   3              while(dis4[ i ] != '\0')
 291   3               {lcd_wdat(dis4[ i ]);      //显示字符" WWW.PRECHIN.COM  "
 292   4                    i++;
 293   4                  delay(10);                //控制两字之间显示速度
 294   4               }
 295   3                       delay(10);
 296   3                if( temperature>temp1)
 297   3                   {win11=0;
 298   4               win12=1;                                
 299   4               win21=0;
 300   4               win22=1;
 301   4                   delay(30);
 302   4               win11=1;
C51 COMPILER V7.10   GDLCD                                                                 05/12/2013 21:48:04 PAGE 6   

 303   4               win12=1;
 304   4               win21=1;
 305   4               win22=1;
 306   4                       W_flag=1;
 307   4                       fanmotor=0;
 308   4                       }
 309   3                else
 310   3                      fanmotor=1;
 311   3              
 312   3               }
 313   2      
 314   2        else
 315   2          {   lcd_pos(0x40);             //设置显示位置为第二行的第16个字符
 316   3                  i = 0;
 317   3             while(dis5[ i ] != '\0')
 318   3              {
 319   4             lcd_wdat(dis5[ i ]);      //显示字符" WWW.PRECHIN.COM  "
 320   4             i++;
 321   4             delay(10);                //控制两字之间显示速度
 322   4              }
 323   3              delay(10);
 324   3              if( temperature>=temp1)
 325   3                  fanmotor=0;
 326   3              else
 327   3                {  
 328   4                   win11=1;
 329   4               win12=0;                                
 330   4               win21=1;
 331   4               win22=0;
 332   4                   delay(30);
 333   4               win11=1;
 334   4               win12=1;
 335   4               win21=1;
 336   4               win22=1;
 337   4                       W_flag=0;
 338   4                       fanmotor=1;
 339   4                       }
 340   3      
 341   3                }     
 342   2          }
 343   1      } 
 344           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    974    ----
   CONSTANT SIZE    =    103    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20       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 + -