📄 splc501hardware.asm
字号:
.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 + -