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

📄 1602lcddriver.asm

📁 2005年全国大学生电子设计竞赛论文集
💻 ASM
字号:
.include hardware.inc
//.include 1602Lcd_IO.inc
//////////////////////////////////////////////////////////////////////////////
//Filename : F_WrCom
//Function : void WrCom(unsigned int)
//Input    : None
//Output   : None
//Destory  : R1
//////////////////////////////////////////////////////////////////////////////
//========================================================
//SPLC501C Library Pin Definition
//==========================================================
//6800 Control Pin
//-----------------------------------------------------------------------------
//User can change  any of control pins at any bit, except user select the IO port 
//of control pin the same as control bus. 
//=======================================================
//								FEDCBA9876543210					
//.define		C_AOP_Pin    	00100000000000b;		//IO AOP
//.define		C_EP_Pin   		01000000000000b;		//IO EP
//.define		C_RWP_Pin     	10000000000000b;		//IO as RWP
//								FEDCBA9876543210
//.define		C_AOP_Pin    	    0000000000100000b;		//IO AOP       RS   IOA5
//.define		C_EP_Pin   			0000000010000000b;		//IO EP        E    IOA7
//.define		C_RWP_Pin     		0000000001000000b;		//IO as RWP    RW   IOA6
.define		C_AOP_Pin    	    0000000000000010b;		//IO AOP       RS   IOA5
.define		C_EP_Pin   			0000000000001000b;		//IO EP        E    IOA7
.define		C_RWP_Pin     		0000000000000100b;		//IO as RWP    RW   IOA6
//========================================================
//Define the SPLC Data Bus Pin
//Only Two Type Can Select
//=====================================================
//							FEDCBA9876543210
.define		C_DataBus		1111111100000000b;		//IO Data Bus
//.define		C_DataBus		0000000011111111b;
.define		C_BusHighLow	1;			//Set Data High/Low Byte 1:High	
//.define	C_AddressBus	0000000011111111b;		//IO Data Bus
//.define	C_DataBus		0000000011111111b;		//IO Data Bus
//.define	C_BusHighLow	0;			//Set Data High/Low Byte 0:Low
//=====================================================
//================================================
//Set Control Pins Port
//================================================
//Set Control Pins At Port A
//.define	P_IO_Control_Data			0x7000;		//P_IOA_Data
//.define	P_IO_Control_Buffer			0x7001;		//P_IOA_Buffer
//.define	P_IO_Control_Dir			0x7002;		//P_IOA_Dir
//.define	P_IO_Control_Attrib			0x7003;		//P_IOA_Attrib
//=========================================================
//Set Control Pins At Port B
.define	P_IO_Control_Data		0x7005;		//P_IOB_Data
.define	P_IO_Control_Buffer		0x7006;		//P_IOB_Buffer
.define	P_IO_Control_Dir		0x7007;		//P_IOB_Dir
.define	P_IO_Control_Attrib		0x7008;		//P_IOB_Attrib
//========================================================
//=========================================================
//Set Control Bus Port
//==========================================================
//Set Control Bus At Port A
//.define	P_IO_Data_Data				0x7000;		//P_IOA_Data
//.define	P_IO_Data_Buffer			0x7001;		//P_IOA_Buffer
//.define	P_IO_Data_Dir				0x7002;		//P_IOA_Dir
//.define	P_IO_Data_Attrib			0x7003;		//P _IOA_Attrib
//==========================================================
//Set Control Bus At Port B
.define	P_IO_Data_Data			0x7005;		//P_IOB_Data
.define	P_IO_Data_Buffer		0x7006;		//P_IOB_Buffer
.define	P_IO_Data_Dir			0x7007;		//P_IOB_Dir
.define	P_IO_Data_Attrib		0x7008;		//P_IOB_Attrib
//=========================================================





.code
.public _InitLcd
_InitLcd:  .proc
   r1=0x0023
    [P_SystemClock]=r1
	r3=0x0030
	.if	C_BusHighLow
		R3	=	R3	lsl	4;
		R3	=	R3	lsl	4;		
	.endif

    r1=[P_IO_Data_Dir]
 	r1|=C_DataBus
	[P_IO_Data_Dir]=r1
	r1=[P_IO_Data_Attrib]					
	r1|=C_DataBus
	[P_IO_Data_Attrib]=r1				
	r1=[P_IO_Data_Data]
	r2=C_DataBus
	r3&=r2
	r2^=0xffff
	r1&=r2
	r3|=r1
	[P_IO_Data_Data]=r3	
	r4=r3;			
    r3=[P_IO_Control_Data]
    r3|=C_EP_Pin				//0x4000
	[P_IO_Control_Data]=r3
	r1=C_EP_Pin
	r1^=0xffff
	r3&=r1						//0xbfff
	[P_IO_Control_Data]=r3
    call delay

	[P_IO_Data_Data]=r4				
    r3=[P_IO_Control_Data]
    r3|=C_EP_Pin				//0x4000
	[P_IO_Control_Data]=r3
	r1=C_EP_Pin
	r1^=0xffff
	r3&=r1						//0xbfff
	[P_IO_Control_Data]=r3
//    call delay
//    call delay
	[P_IO_Data_Data]=r4				
    r3=[P_IO_Control_Data]
    r3|=C_EP_Pin				//0x4000
	[P_IO_Control_Data]=r3
//    call delay
	r1=C_EP_Pin
	r1^=0xffff
	r3&=r1						//0xbfff
	[P_IO_Control_Data]=r3
//    call delay
//    call delay
//    call _delay
//    call delay
//	call F_Com00
    retf
    .endp


.public		F_WrCom
.public		_WrCom
_WrCom:
F_WrCom:   .proc
//l1:	call F_Com01
//    call F_Led_Rd
//    test r1,0x0080
//    jnz  l1 
	PUSH BP,BP TO [SP];
    bp=sp
    bp+=0x04
    r3=[bp]				
	call F_Com00
	call F_Led_Wr
	call _delay
    POP BP,BP FROM [SP]
    retf
	.endp
	

.public		F_WrAdd
.public		_WrAdd
_WrAdd:
F_WrAdd:   .proc
	PUSH BP,BP TO [SP];
    bp=sp
    bp+=0x0004
    r3=[bp]				
	call F_Com00
	call F_Led_Wr
    POP BP,BP FROM [SP]
    retf
	.endp

//////////////////////////////////////////////////////////////////////////////
//Filename : F_WrDat
//Function : void WrDat(unsigned int)
//Input    : None
//Output   : None
//Destory  : R1
//////////////////////////////////////////////////////////////////////////////

.public		F_WrDat
.public		_WrDat
_WrDat:
F_WrDat:    .proc
	PUSH BP,BP TO [SP];
    bp=sp
    bp+=0x0004
    r3=[bp]				
	call F_Com10
	call F_Led_Wr
    POP BP,BP FROM [SP]
    retf
	.endp
		
//////////////////////////////////////////////////////////////////////////////
//Filename : F_RdDat
//Function : unsigned int RdDat(void)
//Input    : None
//Output   : None
//Destory  : R1
//////////////////////////////////////////////////////////////////////////////

.public		F_RdDat
F_RdDat:		.proc
//l3:	
//	call F_Com01
//    call F_Led_Rd
//    test r1,0x0080
//    jnz  l3 
	call F_Com11
	call F_Led_Rd
//	call delay
    retf
	.endp

	


//////////////////////////////////////////////////////////////////////////////
//Filename : F_LedRd
//Function : unsigned int ledRD(void)
//Input    : None
//Output   : r1
//Destory  : R1
//////////////////////////////////////////////////////////////////////////////


F_Led_Rd:		
    r1=[P_IO_Data_Dir]
    r2=C_DataBus
    r2^=0xffff
    r1&=r2
	[P_IO_Data_Dir]=r1
	r1=[P_IO_Data_Attrib]					
	r1|=C_DataBus
	[P_IO_Data_Attrib]=r1				
	r1=[P_IO_Data_Data]
	r2=C_DataBus
	r2^=0xffff
	r1&=r2	
	retf


//////////////////////////////////////////////////////////////////////////////
//Filename : F_LedWr
//Function : void Ledwr(unsigned int)
//Input    :r3
//Output   :none
//Destory  : R1
//////////////////////////////////////////////////////////////////////////////	

F_Led_Wr:
	.if	C_BusHighLow
		R3	=	R3	lsl	4;
		R3	=	R3	lsl	4;		
	.endif

    r1=[P_IO_Data_Dir]
 	r1|=C_DataBus
	[P_IO_Data_Dir]=r1
	r1=[P_IO_Data_Attrib]					
	r1|=C_DataBus
	[P_IO_Data_Attrib]=r1				
	r1=[P_IO_Data_Data]
	r2=C_DataBus
	r3&=r2
	r2^=0xffff
	r1&=r2
	r3|=r1
	[P_IO_Data_Data]=r3	
    r3=[P_IO_Control_Data]
    r3|=C_EP_Pin				//0x4000
	[P_IO_Control_Data]=r3   
    call _delay
	r1=C_EP_Pin
	r1^=0xffff
    r3=[P_IO_Control_Data]
	r3&=r1						//0xbfff
	[P_IO_Control_Data]=r3
    call _delay
    retf	

//////////////////////////////////////////////////////////////////////////////
//Filename : F_Rd_BF_AC
//Function : read bf,ac
//Input    : None
//Output   :r1
//Destory  : R1
//////////////////////////////////////////////////////////////////////////////
.public		F_Rd_BF_AC
.public		_Rd_BF_AC
_Rd_BF_AC:
F_Rd_BF_AC:		.proc
//    call F_Com01
    call F_Led_Rd   
    call delay 
	.endp
	

//////////////////////////////////////////////////////////////////////////////
//Filename : F_Wr_Com
//Function : read bf,ac
//Input    : None
//Output   : None
//Destory  : R1
//////////////////////////////////////////////////////////////////////////////

F_Com00:
push r3 to [sp]
        r1=[P_IO_Control_Dir]
//        r1|=C_EP_Pin
        r1|=C_AOP_Pin
		r1|=C_RWP_Pin
		[P_IO_Control_Dir]=r1
		r1=[P_IO_Control_Attrib]					
//        r1|=C_EP_Pin
        r1|=C_AOP_Pin
		r1|=C_RWP_Pin
	    [P_IO_Control_Attrib]=r1		
        r3=[P_IO_Control_Data]
        r1=C_AOP_Pin
		r1^=0xffff
		r3&=r1
		r1=C_RWP_Pin
		r1^=0xffff
		r3&=r1
//        r3&=0x1fff
        [P_IO_Control_Data]=r3
    //call _delay
pop r3 from [sp]
        retf

//////////////////////////////////////////////////////////////////////


F_Com01:		
push r3 to [sp]
        r1=[P_IO_Control_Dir]
        r1|=C_EP_Pin
        r1|=C_AOP_Pin
		r1|=C_RWP_Pin
		[P_IO_Control_Dir]=r1
		r1=[P_IO_Control_Attrib]					
        r1|=C_EP_Pin
        r1|=C_AOP_Pin
		r1|=C_RWP_Pin
	    [P_IO_Control_Attrib]=r1		
        r3=[P_IO_Control_Data]
        r1=C_AOP_Pin
		r1^=0xffff
		r3&=r1
		r1=C_RWP_Pin
		r3|=r1
        [P_IO_Control_Data]=r3
   // call _delay
pop r3 from [sp]
        retf


//////////////////////////////////////////////////////////////////////////////
//Filename : F_Wr_Com
//Function : read bf,ac
//Input    : None
//Output   : None
//Destory  : R1
//////////////////////////////////////////////////////////////////////////////

        

F_Com10:
push r3 to [sp]
        r1=[P_IO_Control_Dir]
//        r1|=C_EP_Pin
        r1|=C_AOP_Pin
		r1|=C_RWP_Pin
		[P_IO_Control_Dir]=r1
		r1=[P_IO_Control_Attrib]					
//        r1|=C_EP_Pin
        r1|=C_AOP_Pin
		r1|=C_RWP_Pin
	    [P_IO_Control_Attrib]=r1		
        r3=[P_IO_Control_Data]
        r1=C_AOP_Pin
        r3|=r1
        r1=C_RWP_Pin
		r1^=0xffff
		r3&=r1
        [P_IO_Control_Data]=r3
    //call delay
pop r3 from [sp]
        retf
        
        

F_Com11:
push r3 to [sp]
        r1=[P_IO_Control_Dir]
//        r1|=C_EP_Pin
        r1|=C_AOP_Pin
		r1|=C_RWP_Pin
		[P_IO_Control_Dir]=r1
		r1=[P_IO_Control_Attrib]					
//        r1|=C_EP_Pin
        r1|=C_AOP_Pin
		r1|=C_RWP_Pin
	    [P_IO_Control_Attrib]=r1		
        r1=C_AOP_Pin
		r3|=r1
		r1=C_RWP_Pin
		r3|=r1
        [P_IO_Control_Data]=r3
    //call delay
pop r3 from [sp]
        retf
        
.public _delay
_delay:
       r1=0x0000
       delay1:
       r2=0x0000
       loop1:
       r2+=1
       cmp r2,50
       jb loop1
       r1+=1
       cmp r1,80
       jb delay1
       retf
       

delay:      
       r2=0x0000
       loop2:
       r2+=1
       cmp r2,1
       jb loop2
       retf
       
       
.data 
TBkeyval: 
.dw 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39; 
.CODE

.public		F_convert
.public		_convert
_convert:
F_convert:   .proc
	PUSH BP,BP TO [SP];
    bp=sp
    bp+=0x0004
    r3=[bp]	
    r3+=TBkeyval;			
    r1=[r3];
    POP BP,BP FROM [SP]
    retf
	.endp
    
    

.public _delay100ms
_delay100ms:
       r1=0x0000
       delay3:
       r2=0x0000
       loop4:
       r2+=1
       cmp r2,21
       jb loop1
       r1+=1
       cmp r1,10000
       jb delay3
       retf

⌨️ 快捷键说明

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