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

📄 lcd160xb.lst

📁 这是一个以RW1067为控制器的LCD模块的控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 585          
 586          //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 587          //      内部子函数部分
 588          //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 589          
 590          /********************************************************/
 591          //序号:
 592          //              HD_LCD160XB_B01
 593          //功能: 
 594          //              发送一个字节
 595          //输入: 
 596          //              da      送出的字节
 597          //              rs      =0 字节是命令, =1 字节是数据
 598          //输出: 
 599          //              无
 600          /********************************************************/
 601          static void _lcd160xb_send_byte(uchar da, uchar rs)
 602          {
 603   1      #if (LCD_PORT ==PORT_WIDTH_4BIT)        
                      CODE_CLR_LCD160XB_RW;
                      _nop_(); _nop_();
                      
                      if(rs ==CONST_LCD160XB_COMMAND)
                      {
                              CODE_CLR_LCD160XB_RS;
                      }
                      else
                      {
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 11  

                              CODE_SET_LCD160XB_RS;
                      }       
              
                      //4位数据端口时先送高半字节
                      #if (CONST_POS_OF_LCD_PORT ==CONST_LCD_PORT_LEFT_HALF)
                              HD_DATA_PORT =(da &0xf0);                       
                      #else
                              HD_DATA_PORT =(da >>4); 
                      #endif
                      
                      _nop_(); _nop_();
                      CODE_SET_LCD160XB_EN;
                      _nop_(); _nop_();
                      CODE_CLR_LCD160XB_EN;
              
                      _nop_(); _nop_();
                      _nop_(); _nop_();
                      CODE_CLR_LCD160XB_RW;
                      _nop_(); _nop_();
              
                      if(rs ==CONST_LCD160XB_COMMAND)
                      {
                              CODE_CLR_LCD160XB_RS;
                      }
                      else
                      {
                              CODE_SET_LCD160XB_RS;
                      }       
              
                      //4位数据端口时再送低半字节
                      #if (CONST_POS_OF_LCD_PORT ==CONST_LCD_PORT_LEFT_HALF)
                              HD_DATA_PORT =( (da <<4) &0xf0);        //20050513 改正原来没有左移半字节的情形!
                      #else
                              HD_DATA_PORT =(da >>4); 
                      #endif
                      
                      _nop_(); _nop_();
                      CODE_SET_LCD160XB_EN;
                      _nop_(); _nop_();
                      CODE_CLR_LCD160XB_EN;
              
              #elif   (LCD_PORT ==PORT_WIDTH_4SPI)
              uchar data i;
                      CODE_SET_LCD160XB_CLK;
                      CODE_CLR_LCD160XB_CS;
                      if(rs ==CONST_LCD160XB_COMMAND)
                      {
                              CODE_CLR_LCD160XB_RS;
                      }
                      else
                      {
                              CODE_SET_LCD160XB_RS;
                      }
              
                      for(i=0; i<8; i++)
                      {
                              if(da &0x80)
                              {
                                      CODE_SET_LCD160XB_DAT;
                              }
                              else
                              {
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 12  

                                      CODE_CLR_LCD160XB_DAT;
                              }
                              CODE_CLR_LCD160XB_CLK;
                              da <<=1;
                              CODE_SET_LCD160XB_CLK;          
                      }       
                      CODE_SET_LCD160XB_CS;
                      delay_25us();
              
              #elif   (LCD_PORT ==PORT_WIDTH_3SPI)
              uchar data i;
                      CODE_SET_LCD160XB_CLK;
                      CODE_CLR_LCD160XB_CS;
              
                      for(i=0; i<8; i++)
                      {
                              if(da &0x80)
                              {
                                      CODE_SET_LCD160XB_DAT;
                              }
                              else
                              {
                                      CODE_CLR_LCD160XB_DAT;
                              }
                              CODE_CLR_LCD160XB_CLK;
                              da <<=1;
                              CODE_SET_LCD160XB_CLK;
                      }       
                      rs =rs;                 //防止编译警告
                      CODE_SET_LCD160XB_CS;
                      delay_25us();
              
              #else   //8位数据端口
 708   1      
 709   1              if(rs ==CONST_LCD160XB_COMMAND)
 710   1              {
 711   2                      CODE_CLR_LCD160XB_RS;
 712   2              }
 713   1              else
 714   1              {
 715   2                      CODE_SET_LCD160XB_RS;
 716   2              }
 717   1              
 718   1              _nop_(); _nop_();       
 719   1              CODE_CLR_LCD160XB_RW;
 720   1              HD_DATA_PORT =da;
 721   1              _nop_(); _nop_();       
 722   1              CODE_SET_LCD160XB_EN;
 723   1              _nop_(); _nop_();
 724   1              CODE_CLR_LCD160XB_EN;
 725   1      #endif
 726   1      
 727   1      }
 728          
 729          /********************************************************/
 730          //序号:
 731          //              HD_LCD160XB_B02
 732          //功能: 
 733          //              接收一个字节
 734          //输入: 
 735          //              rs      =0 字节是状态, =1 字节是数据
 736          //输出: 
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 13  

 737          //              读出的字节
 738          /********************************************************/
 739          #if ((LCD_PORT ==PORT_WIDTH_8BIT) ||(LCD_PORT ==PORT_WIDTH_4BIT))
 740          static uchar _lcd160xb_recv_byte(uchar rs)
 741          {
 742   1      uchar data da;
 743   1      uchar data tmp;
 744   1      
 745   1      #if (LCD_PORT ==PORT_WIDTH_4BIT)
              uchar data tmp1;
                      #if (CONST_POS_OF_LCD_PORT ==CONST_LCD_PORT_LEFT_HALF)
                              HD_DATA_PORT |=0xf0;
                      #else
                              HD_DATA_PORT |=0x0f;    
                      #endif
              
                      if(rs ==CONST_LCD160XB_COMMAND)
                      {
                              CODE_CLR_LCD160XB_RS;
                      }
                      else
                      {
                              CODE_SET_LCD160XB_RS;
                      }
              
                      CODE_SET_LCD160XB_RW;
                      CODE_SET_LCD160XB_EN;
                      //4位数据端口时先收数据的高半字节
                      tmp =HD_DATA_PORT;
                      CODE_CLR_LCD160XB_EN;
              
                      #if (CONST_POS_OF_LCD_PORT ==CONST_LCD_PORT_LEFT_HALF)
                              HD_DATA_PORT |=0xf0;
                      #else
                              HD_DATA_PORT |=0x0f;    
                      #endif
              
                      if(rs ==CONST_LCD160XB_COMMAND)
                      {
                              CODE_CLR_LCD160XB_RS;
                      }
                      else
                      {
                              CODE_SET_LCD160XB_RS;
                      }
              
                      CODE_SET_LCD160XB_RW;
                      CODE_SET_LCD160XB_EN;
                      //4位数据端口时再收数据的低半字节
                      tmp1 =HD_DATA_PORT;
                      CODE_CLR_LCD160XB_EN;
                      
                      //注意读出数据的半字节的位置
                      #if (CONST_POS_OF_LCD_PORT ==CONST_LCD_PORT_LEFT_HALF)
                              da =(tmp &0xf0) |(tmp1 >>4);    
                      #else
                              da =(tmp <<4) |(tmp1 &0x0f);
                      #endif
                      
              #else   //8位数据端口
 797   1      
 798   1              HD_DATA_PORT =0xff;
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 14  

 799   1              if(rs ==CONST_LCD160XB_COMMAND)
 800   1              {
 801   2                      CODE_CLR_LCD160XB_RS;
 802   2              }
 803   1              else
 804   1              {
 805   2                      CODE_SET_LCD160XB_RS;
 806   2              }
 807   1              CODE_SET_LCD160XB_RW;
 808   1              CODE_SET_LCD160XB_EN;
 809   1              tmp=HD_DATA_PORT;       //防止不使用tmp产生编译警告
 810   1              CODE_CLR_LCD160XB_EN;
 811   1              da =tmp;
 812   1      #endif
 813   1              
 814   1              return(da);
 815   1      }
 816          
 817          /********************************************************/
 818          //序号:
 819          //              HD_LCD160XB_B03
 820          //功能: 
 821          //              液晶忙的判断,等到不忙退出
 822          //输入: 
 823          //              无
 824          //输出: 
 825          //              无
 826          /********************************************************/
 827          static void _lcd160xb_judge_busy(void)
 828          {
 829   1              while( (_lcd160xb_recv_byte(CONST_LCD160XB_COMMAND) &0x80) !=0);        
 830   1      }
 831          #endif
 832          
 833          /********************************************************/
 834          //序号:
 835          //              HD_LCD160XB_B04
 836          //功能: 
 837          //              发送半个字节命令(限于4位接口方式)
 838          //输入: 
 839          //              da      送出的半字节(固定在高半字节位置)
 840          //              rs      =0 字节是命令
 841          //输出: 
 842          //              无
 843          /********************************************************/
 844          #if (LCD_PORT ==PORT_WIDTH_4BIT)        
              static void _lcd160xb_send_half_cmd(uchar da)
              {
                      //命令格式
                      CODE_CLR_LCD160XB_RW;
                      //4位数据端口时,半字节命令在高半字节
                      #if (CONST_POS_OF_LCD_PORT ==CONST_LCD_PORT_LEFT_HALF)
                              HD_DATA_PORT =(da &0xf0);
                      #else
                              HD_DATA_PORT =(da >>4); 
                      #endif
                      
                      CODE_CLR_LCD160XB_RS;   
                      _nop_(); _nop_();
                      CODE_SET_LCD160XB_EN;
                      _nop_(); _nop_();
                      CODE_CLR_LCD160XB_EN;
C51 COMPILER V8.01   LCD160XB                                                              12/08/2006 10:51:10 PAGE 15  

              }
              #endif
 863          
 864          //==============================================================================
 865          //End Of File


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    437    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34       6
   IDATA SIZE       =   ----    ----
   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 + -