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

📄 splc501hardware.asm

📁 电子词典的设计开发
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.include    hardware.inc
.define		C_data
.include	splc501c_io.inc
.code
//////////////////////////////////////////////////////////////////////////////
//Filename : F_Init_LCD_501
//Function : Intialize  SPLC501c
//Input    : None
//Output   : None
//Destory  : R1,R2,r3
//////////////////////////////////////////////////////////////////////////////
.public		_Init_LCD_501
_Init_LCD_501:		.proc
		R1 = 0x0001;
        [P_Watchdog_Clear] = R1;   // reset watchdog
        CALL    F_LCD_Reset_Command;//Destory  : r3
        CALL    F_LCD_Command_Nop;	//Destory  : r3
        CALL    F_LCD_Solomon_Freq;	//Destory  : r3
        CALL    F_LCD_Power_Set;	//Destory  : r3
        CALL    F_LCD_Display_On;	//Destory  : r3
        R1 = 0x0000;                //Page No. = 0
        CALL    F_Set_LCD_Page_No;	//Destory  : r3,r1
        R1 = 0x0000;                //Start line = 0
        CALL    F_Set_LCD_Start_Line;//Destory  : r3,r1
        R2 = 0x0000;                //Column address = 0
        CALL    F_Set_LCD_Column_Addr;//Destory  : r3,r2,r1
        CALL    F_LCD_ALL_On;		//Destory  : r3
        CALL    F_LCD_Normal_Display;//Destory  : r3
        R3 = 0x0000;                //Fill "00"
        CALL  F_Fill_All_LCD_Value;	
        RETF;
		.endp
	
	
//////////////////////////////////////////////////////////////////////////////
//Subroutine
//////////////////////////////////////////////////////////////////////////////
F_LCD_Reset_Command:
		r3=[P_IO_Data_Data]
		r2=C_DataBus
		r2^=0xffff
		r3&=r2
		r3|=0xe200
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			   
//        R1=0x0AE2;                //Reset
//        [P_Lcd501Ctrl]=R1;
//        CALL    F_Delay_Bus_Time;

        RETF;

//////////////////////////////////////////////////////////////////////////////
F_LCD_Command_Nop:
		r3=[P_IO_Data_Data]
		
		r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0xe300
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			   
//        R1=0x0AE3;                //Nop
//        [P_Lcd501Ctrl]=R1;
//        CALL F_Delay_Bus_Time;

        RETF;

//////////////////////////////////////////////////////////////////////////////
F_LCD_Solomon_Freq:
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0xC800					//C8
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			  
//        R1=0x0AA9;                //
//        [P_Lcd501Ctrl]=R1;
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0xa000					//A0
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			  
//        R1=0x0AA1;                //ADC : Normal
//        [P_Lcd501Ctrl]=R1;
//        CALL F_Delay_Bus_Time;

        RETF;

//////////////////////////////////////////////////////////////////////////////
F_LCD_Power_Set:
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0xa200
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			   
//        R1=0x0AA2;
//        [P_Lcd501Ctrl]=R1;        // 1/9 bias
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0x2400
		.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			   
//        R1=0x0A24;
//        [P_Lcd501Ctrl]=R1;        // V5 RATIO 5 FOR 1/9 BIAS
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0x8100
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			  
//        R1=0x0A81;
//        [P_Lcd501Ctrl]=R1;        // ELECTRONIC VOLUME MODE
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0x1a00
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			   
//        R1=0x0A1A;
//        [P_Lcd501Ctrl]=R1;        // MS Column : A
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0xd200
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			  
//        R1=0x0AD2;
//        [P_Lcd501Ctrl]=R1;        // Set driving mode register
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0x0000
		.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			  
//        R1=0x0A00;
//        [P_Lcd501Ctrl]=R1;        // LS Column : 0
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0x2c00
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			  
//        R1=0x0A2C;
//        [P_Lcd501Ctrl]=R1;        // REGULATOR on
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0x2e00
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			 
//        R1=0x0A2E;
//        [P_Lcd501Ctrl]=R1;        // +FOLLOWER oFF
//        CALL F_Delay_Bus_Time;
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0x2f00
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			
//        R1=0x0A2F;
//        [P_Lcd501Ctrl]=R1;        // +FOLLOWER oFF
//        CALL F_Delay_Bus_Time;

        RETF;

//////////////////////////////////////////////////////////////////////////////
F_LCD_Display_On:
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0xaf00
	.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			  
//        R1=0x0AAF;
//        [P_Lcd501Ctrl]=R1;
//        CALL F_Delay_Bus_Time;

        RETF;

//////////////////////////////////////////////////////////////////////////////
F_LCD_ALL_On:
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0xa500
		.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			  
//        R1=0x0AA5;              	//All points on
//        [P_Lcd501Ctrl]=R1;
//        CALL F_Delay_Bus_Time;

        RETF;

//////////////////////////////////////////////////////////////////////////////
F_LCD_Normal_Display:
		r3=[P_IO_Data_Data]
				r2=C_DataBus
		r2^=0xffff
		r3&=r2
	
		r3|=0xa400
		.if	C_BusHighLow
	.else
		R3	=	R3	lsr	4;
		R3	=	R3	lsr	4;		
	.endif
		[P_IO_Data_Data]=r3
		CALL F_Send_data			 
//        R1=0x0AA4;              	//Normal display
//        [P_Lcd501Ctrl]=R1;
//        CALL F_Delay_Bus_Time;

        RETF;
//////////////////////////////////////////////////////////////////////////////
//Filename : F_Set_LCD_Page_No
//Function : Set the LCD page No.
//Input    : Page No. (R1:0x0000~0x0007)
//Output   : None
//Destroy  : R1

⌨️ 快捷键说明

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