📄 lcd160xb.lst
字号:
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 + -