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

📄 lcd160xb.lst

📁 这是一个以RW1067为控制器的LCD模块的控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 289   1              _lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
 290   1              //////////////
 291   1              //20061128(2-2)
 292   1              _lcd160xb_judge_busy();
 293   1              _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);       //RE=0
 294   1              //////////////  
 295   1              
 296   1      #endif
 297   1      }
 298          
 299          
 300          /********************************************************/
 301          //序号:
 302          //              HD_LCD160XB_S04
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 6   

 303          //功能: 
 304          //              液晶上显示一行固定字符串
 305          //输入: 
 306          //              str     液晶显示的字符串
 307          //              line    指定的行号,=0/1 表示第1/2行
 308          //输出: 
 309          //              无
 310          //注意: 如果类型是1601B则第二行的显示也在液晶的第一行!
 311          /********************************************************/
 312          void lcd160xb_disp_str(uchar *str, uchar line)
 313          {
 314   1      //保证平时RE=0
 315   1      uchar i;
 316   1      #if (LCD_PORT ==PORT_WIDTH_4BIT)
              
              #if (LCD_TYPE ==TYPE_LCD1601B)
                      i =line;        //防止不使用line产生编译警告
                      i =0x80;
              #else
                      i =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0);
              #endif  
                      _lcd160xb_judge_busy();
                      _lcd160xb_send_byte(i, CONST_LCD160XB_COMMAND);
                      
                      for(i=0; i<CONST_LCD160XB_LINE_WIDTH; i++)
                      {
                              _lcd160xb_judge_busy();
                              _lcd160xb_send_byte(str[i], CONST_LCD160XB_DATA);
                      }
              
              #elif   (LCD_PORT ==PORT_WIDTH_4SPI)
                      i =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0);
                      _lcd160xb_send_byte(i, CONST_LCD160XB_COMMAND);
                      
                      for(i=0; i<CONST_LCD160XB_LINE_WIDTH; i++)
                      {
                              _lcd160xb_send_byte(str[i], CONST_LCD160XB_DATA);
                      }
              
              #elif   (LCD_PORT ==PORT_WIDTH_3SPI)
                      i =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0);
                      _lcd160xb_send_byte(i, CONST_LCD160XB_COMMAND);
              
                      //RE =1, SET DATA LENGTH
                      _lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);       //RE=1
                      _lcd160xb_send_byte(0x80 |(CONST_LCD160XB_LINE_WIDTH-1), CONST_LCD160XB_COMMAND);
                      //此命令后紧跟相应字节的数据
                      for(i=0; i<CONST_LCD160XB_LINE_WIDTH; i++)
                      {
                              _lcd160xb_send_byte(str[i], CONST_LCD160XB_DATA);
                      }
                      _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);       //RE=0
              
              #else
 357   1      
 358   1      #if (LCD_TYPE ==TYPE_LCD1601B)
                      i =line;        //防止不使用line产生编译警告
                      i =0x80;
              #else
 362   1              i =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0);
 363   1      #endif  
 364   1              _lcd160xb_judge_busy();
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 7   

 365   1              _lcd160xb_send_byte(i, CONST_LCD160XB_COMMAND);
 366   1              
 367   1              for(i=0; i<CONST_LCD160XB_LINE_WIDTH; i++)
 368   1              {
 369   2                      _lcd160xb_judge_busy();
 370   2                      _lcd160xb_send_byte(str[i], CONST_LCD160XB_DATA);
 371   2              }
 372   1      
 373   1      #endif
 374   1      }
 375          
 376          /*
 377          //********************************************************
 378          //序号:
 379          //              HD_LCD160XB_S05
 380          //功能: 
 381          //              在液晶指定位置上显示一个字符
 382          //输入: 
 383          //              ch      液晶显示的字符
 384          //              line    指定的行号,=0/1 表示第1/2行
 385          //              pos     字符在液晶上的显示位置,=0...15
 386          //输出: 
 387          //              无
 388          //注意: 如果类型是1601B则第二行的显示也在液晶的第一行!
 389          //********************************************************
 390          void lcd160xb_disp_char(uchar ch, uchar line, uchar pos)
 391          {
 392          #if (LCD_PORT ==PORT_WIDTH_4BIT)
 393          
 394          #if (LCD_TYPE ==TYPE_LCD1601B)
 395                  line =0x80 |(pos &0x0f);
 396          #else
 397                  line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0)|(pos &0x0f);
 398          #endif  
 399                  _lcd160xb_judge_busy();
 400                  _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
 401                  _lcd160xb_judge_busy();
 402                  _lcd160xb_send_byte(ch, CONST_LCD160XB_DATA);
 403          
 404          #elif   (LCD_PORT ==PORT_WIDTH_4SPI)
 405                  line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0)|(pos &0x0f);
 406                  _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
 407                  _lcd160xb_send_byte(ch, CONST_LCD160XB_DATA);
 408          
 409          #elif   (LCD_PORT ==PORT_WIDTH_3SPI)
 410                  line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0)|(pos &0x0f);
 411                  _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
 412          
 413                  _lcd160xb_send_byte(0x80 |0x01, CONST_LCD160XB_COMMAND);
 414                  _lcd160xb_send_byte(ch, CONST_LCD160XB_DATA);
 415          
 416          #else
 417          
 418                  while( (_lcd160xb_recv_byte(CONST_LCD160XB_COMMAND) &0x80) !=0);
 419          #if (LCD_TYPE ==TYPE_LCD1601B)
 420                  line =0x80 |(pos &0x0f);
 421          #else
 422                  line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0)|(pos &0x0f);
 423          #endif  
 424                  _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
 425                  _lcd160xb_judge_busy();
 426                  _lcd160xb_send_byte(ch, CONST_LCD160XB_DATA);
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 8   

 427          
 428          #endif
 429          }
 430          */
 431          
 432          
 433          /********************************************************/
 434          //序号:
 435          //              HD_LCD160XB_S06
 436          //功能: 
 437          //              液晶初始化,显示带光标闪烁的模式
 438          //输入: 
 439          //              无
 440          //输出: 
 441          //              无
 442          /********************************************************/
 443          void lcd160xb_init_set_with_cursor(void)
 444          {
 445   1      #if (LCD_PORT ==PORT_WIDTH_4BIT)
                      #if (LCD_TYPE  ==TYPE_LCD1601B) 
                              delay_x1ms(15);
                              _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
                              delay_x1ms(5);
                              _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
                              delay_x1ms(5);
                              _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
                      
                              _lcd160xb_judge_busy();
                              _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
                      #else   //2行显示
                              delay_x1ms(50);
                              _lcd160xb_send_half_cmd(0x30);
                              delay_x1ms(10);
                              _lcd160xb_send_half_cmd(0x30);
                              delay_x1ms(1);
                              _lcd160xb_send_half_cmd(0x30);
                              delay_x1ms(1);
                              _lcd160xb_send_half_cmd(0x20);
                              delay_x1ms(1);
              
                              _lcd160xb_judge_busy();
                              _lcd160xb_send_byte(0x28,CONST_LCD160XB_COMMAND);
                      #endif
                      
                      _lcd160xb_judge_busy();
                      _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON,CONST_LCD160XB_COMMAND);
                      _lcd160xb_judge_busy();
                      _lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
                      _lcd160xb_judge_busy();
                      _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON_CURSOR_FLUSH,CONST_LCD160XB_COMMAND);
              
                      lcd160xb_clr_scr();
                      lcd160xb_clr_scr();
                      delay_25us();
              
              //RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0   
                      _lcd160xb_judge_busy();
                      _lcd160xb_send_byte(0x24,CONST_LCD160XB_COMMAND);
                      _lcd160xb_judge_busy();
                      _lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
                      _lcd160xb_judge_busy();
                      _lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 9   

                      _lcd160xb_judge_busy();
                      _lcd160xb_send_byte(0x20,CONST_LCD160XB_COMMAND);
              ////////////
              
              #elif   (LCD_PORT ==PORT_WIDTH_4SPI)
                      delay_x1ms(50);
                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
                      delay_x1ms(5);
                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
                      delay_x1ms(5);
                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
                      delay_x1ms(5);  
                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);     
              
                      _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
                      delay_x1ms(11);
                      _lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON_CURSOR_FLUSH,CONST_LCD160XB_COMMAND);
              
                      //RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0   
                      _lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
              
              #elif   (LCD_PORT ==PORT_WIDTH_3SPI)
                      delay_x1ms(50);
                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
                      delay_x1ms(5);
                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
                      delay_x1ms(5);
                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
                      delay_x1ms(5);  
                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);     
              
                      _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
                      delay_x1ms(11);
                      _lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON_CURSOR_FLUSH,CONST_LCD160XB_COMMAND);
              
                      //RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0   
                      _lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
                      _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
              
              #else   //8位数据端口
 538   1              #if (LCD_TYPE  ==TYPE_LCD1601B) 
                              delay_x1ms(15);
                              _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
                              delay_x1ms(5);
                              _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
                              delay_x1ms(5);
                              _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
                      
                              _lcd160xb_judge_busy();
                              _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
                      #else   //2行显示
 549   1                      delay_x1ms(15);
 550   1                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 10  

 551   1                      delay_x1ms(5);
 552   1                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
 553   1                      delay_x1ms(5);
 554   1                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
 555   1              
 556   1                      _lcd160xb_judge_busy();
 557   1                      _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);     
 558   1              #endif
 559   1                      
 560   1              _lcd160xb_judge_busy();
 561   1              _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
 562   1              _lcd160xb_judge_busy();
 563   1              _lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
 564   1              _lcd160xb_judge_busy();
 565   1              _lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
 566   1              _lcd160xb_judge_busy();
 567   1              _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON_CURSOR_FLUSH,CONST_LCD160XB_COMMAND);
 568   1              delay_25us();
 569   1      
 570   1              //20061128(2-4)
 571   1              //RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0   
 572   1              _lcd160xb_judge_busy();
 573   1              _lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
 574   1              _lcd160xb_judge_busy();
 575   1              _lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
 576   1              _lcd160xb_judge_busy();
 577   1              _lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
 578   1              _lcd160xb_judge_busy();
 579   1              _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
 580   1              ////////////
 581   1              
 582   1      #endif
 583   1      
 584   1      }

⌨️ 快捷键说明

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