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

📄 z1602.c.bak

📁 汉字液晶显示LCM 160X2的控制源程序
💻 BAK
字号:
;                    SMC1602接口程序(MCS51总线方式)
;****************************************************************************
;*  Title : Accessing to LCD-CONTROLLER                                    	*
;*  Date :  2000.4.27                                                      	*
;*  Support telephone:  0731-4167806,4167808(CHANGSHA SUMAN)               	*
;*  Support fax :0731-4167807  Support E-mail:sunman@public.cs.hn.cn       	*
;*  Create by :褚建军(chujianjun),朱长春(zhuchangchun)                     	*
;*  DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER  	*
;****************************************************************************
;连线图: 	*LCM---8031* 	*LCM---8031* 	*LCM------------8031			*
;        	*DB0---P0.0* 	*DB4---P0.4* 	*RS-------------P2.0			*
;        	*DB1---P0.1* 	*DB5---P0.5* 	*RW-------------P2.1			*
;        	*DB2---P0.2* 	*DB6---P0.6* 	*E--NAND GATE---P2.7*  (参见说明书)
;        	*DB3---P0.3* 	*DB7---P0.7* 	*VLCD接10K可调电阻到GND			*
;注:8031的晶振频率为12MHz													*
;****************************************************************************
RSADDR  EQU     0100H
RWADDR  EQU     0200H
CSADDR  EQU     8000H
XPOS    EQU     20H        ;列方向地址指针(用于LCDPOS子程序)
YPOS    EQU     21H        ;行方向地址指针(用于LCDPOS子程序)

        ORG     0000H
        JMP     START
START:  MOV     SP,#60H
MAIN:
        MOV     R7,#'0'    ;测试主程序
MN_PA:                     ;整屏循环显示"0"到"9"及空格
        CALL    LCDRESET
        MOV     A,R7
        CALL    LCDFILL
        CALL    DELAY400MS
        INC     R7
        MOV     A,R7
        CJNE    A,#'9'+1,MN_PA
        MOV     A,#' '
        CALL    LCDFILL
        CALL    DELAY400MS
        JMP     MAIN
LCDFILL:       
        MOV     B,A
        MOV     YPOS,#0
LFL_PB: MOV     XPOS,#0    ;整屏显示A中所代表字符
LFL_PA: MOV     A,B
        CALL    LCDWRITE
        INC     XPOS
        MOV     A,XPOS
        CJNE    A,#16,LFL_PA
        INC     YPOS
        MOV     A,YPOS
        CJNE    A,#2,LFL_PB
        RET

/*=======================================================
设置第(XPOS,YPOS)个字符的DDRAM地址
=======================================================*/
void LocateXY( char posx,char posy)
{
	Uchar temp;
	temp = posx & 0xf;
	posy &= 0x1;
	if ( posy )temp |= 0x40;
	temp |= 0x80;
	LCDWCN(temp,1);
}

void LCDWRITE(Uchar x,Uchar y,Uchar Wdata)		//定位写字符子程序
        CALL    LCDPOS         ;定位显示地址
        CALL    LCDWD          ;写字符
        RET

/*=======================================================
 初始化程序
=======================================================*/
void LCDRESET( void )
{                       				// 初始化程序
	DELAY5MS();							// 延时15MS
	DELAY5MS();
	DELAY5MS();

    LCDWCN( 0x38,0);					// 显示模式设置(不检测忙信号)
	LCDWCN( 0x38,0);					// 共三次
	DELAY5MS();
	LCDWCN( 0x38,0);
	DELAY5MS();
	LCDWCN( 0x38,0);					// 共三次

	LCDWCN( 0x38,1);					// 显示模式设置(以后均检测忙信号)
    LCDWCN( 0x8,1);						// 显示关闭
    LCDWCN( 0x1,1);						// 显示清屏
    LCDWCN( 0x6,1);						// 显示光标移动设置
    LCDWCN( 0xc,1);						// 显示开及光标设置
}

/*=======================================================
 写控制字符子程序: CS=1 RS=0 RW=0
=======================================================*/
void LCDWC( Uchar CMD,Uchar AttribC )
{
	if (AttribC) WAITIDLE();				// 检测忙信号?
	PortLcmCmdOut = CMD;					// 送控制字子程序
}
	
/*=======================================================
写字符子程序: CS=1 RS=1 RW=0
=======================================================*/
void LCDWD( char dataW )
{
        WAITIDLE();
        PortLcmDataOut = daraW;
}

/*=======================================================
正常读写操作之前必须检测LCD控制器状态:	CS=1 RS=0 RW=1
DB7:    0  LCD控制器空闲; 1  LCD控制器忙
========================================================*/
void WAITIDLE( void )
{
	while( PortLcmBusyStatus };
}	
                       

void DELAY5MS(void)
{
	Uint i = 2500;
	while(i--);
}

void DELAY400MS(void)
{
	Uchar i = 20;
	Uint j= 10000;
	while(i--){while(j--);};
}

⌨️ 快捷键说明

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