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

📄 51xp.asm

📁 【绝版-原创-经典】51单片机做的一个趣味程序【仿xp开机画面】显示在12232LCD上
💻 ASM
字号:
;=========================================
;*****   51制作Xp开机画面   ——测试 *****
;********  LCD:12232(SED1520)  ********
;*****   作者: aki_studio@163.com   *****
;=========================================
;设置缓存
CACHE_LCD_INS	EQU	40H
CACHE_LCD_DAT	EQU	41H
;LCD-PRINT入口
PAGE_LCD	EQU	50H	;起始页
Y_COUNT_LCD	EQU	51H	;页数
LINE_LCD	EQU	52H	;起始列
X_COUNT_LCD	EQU	53H	;列数
P_LOOP_LCD	EQU	54H	;循环数
;LCD端口地址
ADDR_LCD_RD1	EQU	8100H	;E1读状态字
ADDR_LCD_INS1	EQU	8000H	;E1送指令
ADDR_LCD_DAT1	EQU	8200H	;E1送数据
;
ADDR_LCD_RD2	EQU	9100H	;E2读状态字
ADDR_LCD_INS2	EQU	9000H	;E2送指令
ADDR_LCD_DAT2	EQU	9200H	;E2送数据
;
	ORG	0000H
	SJMP	MAIN
	ORG	0030H
MAIN:	LCALL	DELAY3
;===============程序开始运行==========================================================
START:
	MOV	R3,#0
	LCALL	INIT_LCD		;初始化LCD
;=====开机LOGO====
	MOV	DPTR,#TAB_XP1
	LCALL	LCD_3PAGE_DOT
	LCALL	PRINT1
	MOV	DPTR,#TAB_XP2
	LCALL	LCD_3PAGE_DOT
	LCALL	PRINT2
	;
	LCALL	LCD_START_LOGO
	;
	SJMP	START
;*******************************************;*******************************************
;*************   液晶子程序区  *************;*******************************************
;*******************初始化******************;*******************************************
INIT_LCD:	MOV	CACHE_LCD_INS,#11100010B	;复位
	LCALL	INS1	
	LCALL	INS2
	MOV	CACHE_LCD_INS,#10100100B	;正常模式
	LCALL	INS1
	LCALL	INS2
	MOV	CACHE_LCD_INS,#10101001B	;1/32
	LCALL	INS1
	LCALL	INS2
	MOV	CACHE_LCD_INS,#10100000B	;正向排序0
	LCALL	INS1
	LCALL	INS2
	MOV	CACHE_LCD_INS,#10101111B	;开屏
	LCALL	INS1
	LCALL	INS2
	MOV	PAGE_LCD,#0		;清屏
	LCALL	CLR_P
	RET
;=========清屏==========
CLR_P:	MOV	A,PAGE_LCD
	ORL	A,#0B8H
	MOV	CACHE_LCD_INS,A		;起始页0
	LCALL	INS1
	LCALL	INS2
	MOV	CACHE_LCD_INS,#0C0H	;行
	LCALL	INS1
	LCALL	INS2
	MOV	CACHE_LCD_INS,#0	;起始列0
	LCALL	INS1
	LCALL	INS2
;
	MOV	R4,#61
CLRP:	MOV	CACHE_LCD_DAT,#00H	;;;;;;;;;;
	LCALL	DAT1
	LCALL	DAT2
	DJNZ	R4,CLRP
	INC	PAGE_LCD
	MOV	A,PAGE_LCD
	CJNE	A,#04H,CLR_P
	RET
;=========显示==========
;显示E1
PRINT1:	MOV	R1,#0			;起始指针
DISP1:	MOV	A,PAGE_LCD
	ORL	A,#0B8H
	MOV	CACHE_LCD_INS,A		;页
	LCALL	INS1
	MOV	CACHE_LCD_INS,#0C0H	;行
	LCALL	INS1
	MOV	CACHE_LCD_INS,LINE_LCD	;列
	LCALL	INS1
	MOV	R4,X_COUNT_LCD
DIS_P1:	MOV	A,R1
	MOVC	A,@A+DPTR
	MOV	CACHE_LCD_DAT,A
	LCALL	DAT1
	INC	R1
	DJNZ	R4,DIS_P1
	MOV	R4,X_COUNT_LCD
	INC	PAGE_LCD
	INC	P_LOOP_LCD
	MOV	A,P_LOOP_LCD
	CJNE	A,Y_COUNT_LCD,DISP1
	RET
;显示E2
PRINT2:	MOV	R1,#0			;起始指针
DISP2:	MOV	A,PAGE_LCD
	ORL	A,#0B8H
	MOV	CACHE_LCD_INS,A		;页
	LCALL	INS2
	MOV	CACHE_LCD_INS,#0C0H	;行
	LCALL	INS2
	MOV	CACHE_LCD_INS,LINE_LCD	;列
	LCALL	INS2
	MOV	R4,X_COUNT_LCD
DIS_P2:	MOV	A,R1
	MOVC	A,@A+DPTR
	MOV	CACHE_LCD_DAT,A
	LCALL	DAT2
	INC	R1
	DJNZ	R4,DIS_P2
	MOV	R4,X_COUNT_LCD
	INC	PAGE_LCD
	INC	P_LOOP_LCD
	MOV	A,P_LOOP_LCD
	CJNE	A,Y_COUNT_LCD,DISP2
	RET
;显示LOGO1
PRINT_LOGO1:	MOV	PAGE_LCD,#3	;起始页
	MOV	Y_COUNT_LCD,#1		;页数
	MOV	LINE_LCD,#45		;起始列
	MOV	X_COUNT_LCD,#16		;列数
	MOV	P_LOOP_LCD,#0
	LCALL	PRINT1
	RET
;显示LOGO2
PRINT_LOGO2:	MOV	PAGE_LCD,#3	;起始页
	MOV	Y_COUNT_LCD,#1		;页数
	MOV	LINE_LCD,#0		;起始列
	MOV	X_COUNT_LCD,#16		;列数
	MOV	P_LOOP_LCD,#0
	LCALL	PRINT2
	RET
;===========开机LOGO==============
LCD_START_LOGO:	MOV	R5,#3
LOGO_LOOP:
	MOV	DPTR,#TAB_SPEED1
	LCALL	PRINT_LOGO1
;
	MOV	DPTR,#TAB_SPEED0
	LCALL	PRINT_LOGO2
	LCALL	DELAY3
;
	MOV	DPTR,#TAB_SPEED2
	LCALL	PRINT_LOGO1
	LCALL	DELAY3
;
	MOV	DPTR,#TAB_SPEED3
	LCALL	PRINT_LOGO1
	LCALL	DELAY3
;
	MOV	DPTR,#TAB_SPEED4
	LCALL	PRINT_LOGO1
	LCALL	DELAY3
;
	MOV	DPTR,#TAB_SPEED5
	LCALL	PRINT_LOGO1
;
	MOV	DPTR,#TAB_SPEED6
	LCALL	PRINT_LOGO2
	LCALL	DELAY3
;
	MOV	DPTR,#TAB_SPEED1
	LCALL	PRINT_LOGO1
;
	MOV	DPTR,#TAB_SPEED7
	LCALL	PRINT_LOGO2
	LCALL	DELAY3
;
	MOV	DPTR,#TAB_SPEED8
	LCALL	PRINT_LOGO2
	LCALL	DELAY3
;
	MOV	DPTR,#TAB_SPEED9
	LCALL	PRINT_LOGO2
	LCALL	DELAY3
	DJNZ	R5,LOGO_LOOP
	;===============
;
	MOV	DPTR,#TAB_WELCOME1
	LCALL	LCD_4PAGE_DOT
	LCALL	PRINT1
	MOV	DPTR,#TAB_WELCOME2
	LCALL	LCD_4PAGE_DOT
	LCALL	PRINT2
;
	LCALL	DELAY3
	RET
;=========================
LCD_4PAGE_DOT:	MOV	PAGE_LCD,#0	;起始页
	MOV	Y_COUNT_LCD,#4		;页数
	MOV	LINE_LCD,#0		;起始列
	MOV	X_COUNT_LCD,#61		;列数
	MOV	P_LOOP_LCD,#0
	RET
;
LCD_3PAGE_DOT:	MOV	PAGE_LCD,#0	;起始页
	MOV	Y_COUNT_LCD,#3		;页数
	MOV	LINE_LCD,#0		;起始列
	MOV	X_COUNT_LCD,#61		;列数
	MOV	P_LOOP_LCD,#0
	RET
;=================================
;指令E1
INS1:	PUSH	DPL
	PUSH	DPH
	MOV	DPTR,#ADDR_LCD_RD1
	LCALL	TEST_CLD_BUSY
	MOV	DPTR,#ADDR_LCD_INS1
	MOV	A,CACHE_LCD_INS		;取指令码
	MOVX	@DPTR,A
	POP	DPH
	POP	DPL
	RET
;数据E1
DAT1:	PUSH	DPL
	PUSH	DPH
	MOV	DPTR,#ADDR_LCD_RD1
	LCALL	TEST_CLD_BUSY
	MOV	DPTR,#ADDR_LCD_DAT1
	MOV	A,CACHE_LCD_DAT		;取数据码
	MOVX	@DPTR,A
	POP	DPH
	POP	DPL
	RET
;=================================
;指令E2
INS2:	PUSH	DPL
	PUSH	DPH
	MOV	DPTR,#ADDR_LCD_RD2
	LCALL	TEST_CLD_BUSY
	MOV	DPTR,#ADDR_LCD_INS2
	MOV	A,CACHE_LCD_INS		;取指令码
	MOVX	@DPTR,A
	POP	DPH
	POP	DPL
	RET
;数据E2
DAT2:	PUSH	DPL
	PUSH	DPH
	MOV	DPTR,#ADDR_LCD_RD2
	LCALL	TEST_CLD_BUSY
	MOV	DPTR,#ADDR_LCD_DAT2
	MOV	A,CACHE_LCD_DAT		;取数据码
	MOVX	@DPTR,A
	POP	DPH
	POP	DPL
	RET
;=================================
TEST_CLD_BUSY:	MOVX	A,@DPTR
	JB	ACC.7,TEST_CLD_BUSY
	RET
;*******************************************;*******************************************
;*******************************************;*******************************************
;*******************************************;*******************************************
;=========延时入口R2;占用R6、R7==========
DELAY:	MOV	R6,#250
	MOV	R7,#250
	DJNZ	R7,$
	DJNZ	R6,$
	DJNZ	R2,DELAY
	RET
;=========无入口;占用R6、R7==========
DELAY2:	MOV	R6,#250
	MOV	R7,#250
	DJNZ	R7,$
	DJNZ	R6,$
	RET
;=========无入口;占用R2、R6、R7==========
DELAY3:	MOV	R2,#255
	LCALL	DELAY
	RET
;=========字表==========
TAB_XP1:
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,030H,0BEH,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,0E0H,0E0H,080H,0F0H,060H,060H,0E0H,060H,060H,060H,000H
DB	060H,060H,0F0H,060H,000H,000H,078H,03FH,03FH,03FH,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	01CH,070H,0C0H,070H,038H,0C0H,070H,01CH,000H,0F4H,004H,0E0H,010H,010H,0F0H,000H
DB	0E0H,090H,090H,07CH,000H,0E0H,090H
TAB_XP2:
DB	0BFH,0BFH,03FH,07FH,07EH,0FEH,00EH,0E0H,0F8H,0FCH,0FCH,0F8H,0F0H,0F0H,0F0H,030H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,03FH,07FH,0FFH
DB	07FH,00EH,0E0H,0FCH,0FDH,0FBH,0FBH,0FBH,0F7H,0F7H,017H,001H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,090H,070H,000H,0F0H,081H,0C1H
DB	071H,083H,0F3H,007H,0B7H,0ABH,0E8H,000H,022H,014H,008H,036H,000H,03EH,00AH,00AH
DB	006H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB	000H,000H,000H,000H,000H,000H,000H
TAB_SPEED1:
DB 07CH,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H
TAB_SPEED2:
DB 07CH,082H,0BAH,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H
TAB_SPEED3:
DB 07CH,082H,082H,0BAH,0BAH,082H,0BAH,0BAH,082H,082H,082H,082H,082H,082H,082H,082H
TAB_SPEED4:
DB 07CH,082H,082H,082H,082H,082H,0BAH,0BAH,082H,0BAH,0BAH,082H,0BAH,0BAH,082H,082H
TAB_SPEED5:
DB 07CH,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,0BAH,0BAH,082H,0BAH
TAB_SPEED6:
DB 0BAH,082H,0BAH,0BAH,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,07CH
TAB_SPEED7:
DB 082H,082H,0BAH,0BAH,082H,0BAH,0BAH,082H,0BAH,0BAH,082H,082H,082H,082H,082H,07CH
TAB_SPEED8:
DB 082H,082H,082H,082H,082H,082H,082H,082H,0BAH,0BAH,082H,0BAH,0BAH,082H,082H,07CH
TAB_SPEED9:
DB 082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,0BAH,082H,07CH
TAB_SPEED0:
DB 082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,082H,07CH
TAB_WELCOME1:
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,080H,080H,080H,080H,080H
DB 080H,080H,080H,080H,080H,0C0H,0C0H,080H,080H,080H,080H,080H,080H,080H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,030H,0F0H,0F0H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,007H,007H,007H,0FFH,0FBH,00BH,003H,003H
DB 003H,0F3H,0FFH,03FH,003H,000H,000H,000H,000H,0FCH,0FCH,000H,000H,000H,080H,080H
DB 0C0H,0C0H,000H,000H,000H,000H,0FCH,07FH,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,03FH,0FFH,0C0H,0C0H,070H,03CH,00FH,0FFH
DB 0F8H,080H,0C0H,0F0H,07CH,03FH,007H,000H,000H,0FCH,0FFH,007H,084H,007H,003H,000H
DB 000H,000H,0FCH,0FFH,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,003H,003H,003H,000H,000H,000H,000H,003H,003H,003H
DB 000H,000H,000H,000H,000H,000H,003H,003H,003H,003H,000H,000H,000H,000H,000H,003H
DB 003H,000H,000H,000H
TAB_WELCOME2:
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 080H,080H,0C0H,000H,000H,000H,000H,080H,080H,080H,000H,000H,000H,000H,000H,0C0H
DB 0C0H,000H,000H,080H,0C0H,0C0H,000H,000H,080H,0C0H,040H,000H,000H,000H,000H,080H
DB 080H,0C0H,0C0H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,0FCH,0FFH,083H,080H,000H
DB 000H,000H,0FCH,0FFH,003H,0C0H,07FH,00FH,000H,000H,000H,0C0H,0FFH,03FH,004H,003H
DB 0F3H,0FFH,00FH,004H,083H,0FFH,03FH,000H,000H,000H,0FCH,0FFH,007H,084H,007H,003H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,003H,003H,000H,000H,000H,000H,003H
DB 003H,003H,000H,000H,000H,000H,000H,000H,003H,000H,000H,000H,000H,003H,000H,000H
DB 000H,003H,003H,000H,000H,000H,000H,003H,003H,003H,003H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H
	END

⌨️ 快捷键说明

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