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

📄 410.lst

📁 一个用keil写的,动行在c8051f410上的自己做的开关电源的驱动程序,在protes下仿真过.希望对初学者能有用.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 166   1         while(1)
 167   1              {
 168   2                LCD_EN = 0;
 169   2            Delay_us(10);
 170   2                LCD_RS = 0;
 171   2                Delay_us(10);
 172   2                LCD_RW = 1;
 173   2            Delay_us(10);
 174   2                LCD_PORT = 0xff;
 175   2            Delay_us(10);
 176   2                LCD_EN = 1;
 177   2            Delay_us(10);
 178   2                if(!LCD_Busy) break;
 179   2           }
 180   1         LCD_EN = 0;
 181   1        }
 182          /*---------------------------------------------------------------------------- 
 183          下面这个函数用于向液晶模块写入控制指令代码。 
 184          函数入口参数:Command ------ 向液晶模块写入的控制指令代码 。 
 185                        CS_Num  ------ 左右半屏的选数值 
 186          ----------------------------------------------------------------------------*/ 
 187          void LCD_WriteCommand(uchar Command, uchar CS_Num) 
 188          {  
 189   1        if(CS_Num==1)                 /*选择左半屏*/
 190   1         {
 191   2           LCD_CS1 = 0;
 192   2           Delay_us(10);
 193   2               LCD_CS2 = 1;
 194   2              }
 195   1        else if(CS_Num==2)    /*选择右半屏*/
C51 COMPILER V7.50   410                                                                   10/04/2007 14:21:04 PAGE 5   

 196   1         {
 197   2           LCD_CS1 = 1;
 198   2           Delay_us(10);
 199   2               LCD_CS2 = 0;
 200   2              }
 201   1        LCD_Check_Busy();
 202   1        Delay_us(10);
 203   1        LCD_EN = 0;           /* 使能信号为L */ 
 204   1       Delay_us(10);
 205   1        LCD_RS = 0;           /* 置寄存器选择为L */ 
 206   1      Delay_us(10);
 207   1        LCD_RW = 0;           /* 置读/写选择为L */ 
 208   1      Delay_us(10);
 209   1        LCD_PORT = Command;   /* 将控制指令代码输出到的数据端口 */ 
 210   1      Delay_us(10);
 211   1        LCD_EN = 1;           /* 使能信号为H */ 
 212   1        Delay_us(10);          /* 延时2us */ 
 213   1        LCD_EN = 0;           /* 使能信号为L */ 
 214   1      Delay_us(10);
 215   1        LCD_CS1 = 1;          /* 置片选1为L */ 
 216   1      Delay_us(10);
 217   1        LCD_CS2 = 1;          /* 置片选2为L */ 
 218   1      Delay_us(10);
 219   1      
 220   1      } 
 221          
 222          
 223          /*---------------------------------------------------------------------------- 
 224          下面这个函数用于向液晶模块写入显示数据。 
 225          函数入口参数:Data------ 向液晶模块写入的显示数据 。 
 226                      CS_Num-------左右半屏的选数值 
 227          ----------------------------------------------------------------------------*/ 
 228          void LCD_WriteData(uchar Data,uchar CS_Num) 
 229          {  
 230   1      if(CS_Num==1)            /*选择左半屏*/
 231   1         {
 232   2           LCD_CS1 = 0;
 233   2      Delay_us(10);
 234   2               LCD_CS2 = 1;
 235   2              }
 236   1        else if(CS_Num==2)  /*选择右半屏*/
 237   1         {
 238   2           LCD_CS1 = 1;
 239   2      Delay_us(10);
 240   2               LCD_CS2 = 0;
 241   2              }
 242   1        LCD_Check_Busy();
 243   1      Delay_us(10);
 244   1        LCD_EN = 0;
 245   1      Delay_us(10);
 246   1        LCD_RS = 1;  /* 置寄存器选择为H */ 
 247   1      Delay_us(10);
 248   1        LCD_RW = 0;       /* 置读/写选择为L */  
 249   1      Delay_us(10);
 250   1        LCD_PORT = Data;  /* 将显示数据输出到的数据端口 */ 
 251   1      Delay_us(10);
 252   1        LCD_EN = 1;       /* 使能信号为H */ 
 253   1        Delay_us(10);      /* 延时2us */ 
 254   1        LCD_EN = 0;       /* 使能信号为L */ 
 255   1      Delay_us(10);
 256   1        LCD_CS1= 1;       /* 置片选1为L */ 
 257   1      Delay_us(10);
C51 COMPILER V7.50   410                                                                   10/04/2007 14:21:04 PAGE 6   

 258   1        LCD_CS2= 1;       /* 置片选2为L */ 
 259   1      }    
 260          
 261          /*---------------------------------------------------------------------------
 262          下面这个函数用于液晶模块的清屏。
 263          ---------------------------------------------------------------------------*/
 264          void LCD_keyclr(uchar Side_Num)
 265           {
 266   1         uchar i,k,COM;
 267   1         
 268   1         for(i=0;i<8;i++)                               
 269   1         {
 270   2               COM=0xB8+i;
 271   2           LCD_WriteCommand(COM,Side_Num);    
 272   2               COM=0x40;
 273   2               LCD_WriteCommand(COM,Side_Num);  
 274   2                       
 275   2           for(k=0;k<64;k++)
 276   2            {
 277   3                  LCD_WriteData(0x00,Side_Num);
 278   3                 }
 279   2              }
 280   1               Delay_us(2);
 281   1        }
 282          
 283          
 284          /*---------------------------------------------------------------------------
 285          下面这个函数用于向液晶模块初始化。
 286          如果没有写完一个半屏的数据就要充分结合此函数来达到要显示的效果
 287          ---------------------------------------------------------------------------*/
 288          void LCD_Initial(void) 
 289          {   
 290   1        LCD_RST = 0;    /* 置复位信号为低电平 */ 
 291   1       // Delay_us(2);  
 292   1        LCD_RST = 1;    /* 置复位信号为高电平 */ 
 293   1        LCD_WriteCommand(0x3F,Left);    /*显示开*/
 294   1        LCD_WriteCommand(0x3F,Right);
 295   1        LCD_WriteCommand(0xC0,Left);    /*起始行*/
 296   1        LCD_WriteCommand(0xC0,Right);                     
 297   1        LCD_WriteCommand(0xB8,Left);    /*起始页*/
 298   1        LCD_WriteCommand(0xB8,Right);  
 299   1        LCD_WriteCommand(0x40,Left);    /*起始列*/
 300   1        LCD_WriteCommand(0x40,Right); 
 301   1      } 
 302          
 303          /*---------------------------------------------------------------------------
 304          下面这个函数显示开机画面,按回车进入主控界面
 305          ---------------------------------------------------------------------------*/
 306           firstpagelcd()
 307           {
 308   1      
 309   1       page=0xb8;
 310   1      for(j=0;j<8;j++)
 311   1      {
 312   2        LCD_WriteCommand((page+j),Right);
 313   2        LCD_WriteCommand(0x40,Right);
 314   2      for(i=0;i<64;i++)
 315   2      {
 316   3        LCD_WriteData(fr[64*j+i],Right); 
 317   3      }};
 318   1      
 319   1      
C51 COMPILER V7.50   410                                                                   10/04/2007 14:21:04 PAGE 7   

 320   1      page=0xb8;
 321   1      for(j=0;j<8;j++)
 322   1      {
 323   2        LCD_WriteCommand((page+j),Left);
 324   2        LCD_WriteCommand(0x40,Left);
 325   2      for(i=0;i<64;i++)
 326   2      {
 327   3        LCD_WriteData(fl[64*j+i],Left); 
 328   3      }};
 329   1       }
 330          /*---------------------------------------------------------------------------
 331          下面这个函数显示第二页画面的固定值
 332          ---------------------------------------------------------------------------*/
 333            secondpage()
 334          { 
 335   1      page=0xbc;                    //r0
 336   1      pageend=2;clmsum=21;
 337   1      clmstart=0x40;pagestart=0;
 338   1      
 339   1      leftout();                    //ri
*** WARNING C206 IN LINE 339 OF 410.C: 'leftout': missing function-prototype
 340   1      pagestart=2;pageend=4;clmstart=0x40;
 341   1      rightout();
*** WARNING C206 IN LINE 341 OF 410.C: 'rightout': missing function-prototype
 342   1             
 343   1      page=0xba;                    //con:
 344   1      pageend=8;clmsum=28;clmstart=0x40;
 345   1      pagestart=6;
 346   1      
 347   1      leftout();                    //a+b:
 348   1      pagestart=4;pageend=6;clmstart=0x40;
 349   1      rightout();
 350   1      }
 351          
 352          /*---------------------------------------------------------------------------
 353          下面这个函数显示左半屏数据
 354          ---------------------------------------------------------------------------*/
 355          leftout(){
 356   1      for((j=pagestart,k=0);j<pageend;(j++,k++))
 357   1      {
 358   2        LCD_WriteCommand((page+k),Left);
 359   2        LCD_WriteCommand(clmstart,Left);
 360   2      for(i=0;i<clmsum;i++)
 361   2      {
 362   3      digitalin=ro[j][i];
 363   3      if(keysetin==1){digitalin=~ro[j][i];};
 364   3        LCD_WriteData(digitalin,Left); 
 365   3      }}
 366   1      keysetin=0;
 367   1      }
 368          /*---------------------------------------------------------------------------
 369          下面这个函数显示右半屏数据
 370          ---------------------------------------------------------------------------*/
 371          rightout(){
 372   1      for((j=pagestart,k=0);j<pageend;(j++,k++))
 373   1      {
 374   2        LCD_WriteCommand((page+k),Right);
 375   2        LCD_WriteCommand(clmstart,Right);
 376   2      for(i=0;i<clmsum;i++)
 377   2      {
 378   3        digitalin=ro[j][i];
 379   3        if(keysetin==1){digitalin=~ro[j][i];};
C51 COMPILER V7.50   410                                                                   10/04/2007 14:21:04 PAGE 8   

 380   3        LCD_WriteData(digitalin,Right); 
 381   3      }}

⌨️ 快捷键说明

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