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

📄 lcd.asm

📁 使用TI的DSP2407驱动液晶25F57lcd
💻 ASM
字号:
;===========================================================
;FILE NAME	:lcd.ASM
;===========================================================
;REALTED SYMBOLS
		.include	"x24x_app.h"
	
;--------------------------------------------------
;variables
;--------------------------------------------------
lcd_comdata		.usect "lcd",1	
lcd_temporary	.usect "lcd",1	
lcd_comdata_flg	.usect "lcd",1	;flag:0--command,1--data
lcd_column		.usect "lcd",1
lcd_page		.usect "lcd",1
lcd_count		.usect "lcd",1	;column count
lcd_bit_count	.usect "lcd",1	;send bit

lcd_innumber	.usect "lcd",1	;input number,decimal<10000
lcd_msb			.usect "lcd",1
lcd_lsb			.usect "lcd",1
lcd_number_flag	.usect "lcd",1
;===================================================
;program
;--------------------------------------------------------------
	.sect "vectors"
	b	_c_int0
	b	_c_int1
	b	_c_int2
	b	_c_int3
	b	_c_int4
	b	_c_int5
	b	_c_int6

	.text
	.def	_c_int0
;GLOBAL SYMBOLS	
	.def	lcd_comdata
	.def	lcd_innumber
	.def	lcd_temporary
_c_int0:
	DINT	
	CALL	sysinit
	CALL	lcd_ioconfigure
	CALL	lcd_init			;setting,clear screen,
								;line of COM1(fixed),显示转速
**************************************************
aa	
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	AND		#0ffefH		;(IOPE4)BLE背光不使能(L)
;	OR		#010H		;(IOPE4)BLE背光使能(H)
	SACL	PEDATDIR
	CALL	delay_250
	
	
	SPM		0					;#####
	LDP		#lcd_innumber
	SPLK	#5608,lcd_innumber	;number test
	CALL	lcd_speed_display

	LDP		#lcd_innumber
	SPLK	#305,lcd_innumber	;number test
	CALL	lcd_speed_display

	LDP		#lcd_innumber
	SPLK	#70,lcd_innumber	;number test
	CALL	lcd_speed_display
	
	LDP		#lcd_innumber
	SPLK	#8,lcd_innumber		;number test
	CALL	lcd_speed_display
	
	LDP		#lcd_innumber
	SPLK	#0,lcd_innumber		;number test
	CALL	lcd_speed_display
	
	nop
	nop
	B 		aa
	
;===============================================	
lcd_speed_display:				;10进制4位数显示
	SPM		0					;#####
	LDP		#lcd_number_flag
	SPLK	#0,lcd_number_flag	;display 0 or not
	LDP		#lcd_temporary
	SPLK	#1000,lcd_temporary
	LACL	lcd_innumber		;inpute number
	RPT		#15
	SUBC	lcd_temporary
	SACL	lcd_temporary		;千位
	SACH	lcd_innumber		;余数
	LACC	lcd_temporary
	ADD		lcd_number_flag		;+0
	SACL	lcd_number_flag
	BCND	lcd_bit4,GT
	SPLK	#10,lcd_temporary	;blank
lcd_bit4
	LDP		#lcd_msb			;column 64
	SPLK	#014H,lcd_msb		
	SPLK	#0H,lcd_lsb
	LT		lcd_temporary
	MPY		#18
	PAC
	LDP		#lcd_count
	SACL	lcd_count			;pointer
	CALL	send_number	

	LDP		#lcd_temporary		;百位
	SPLK	#100,lcd_temporary	;
	LACL	lcd_innumber
	RPT		#15
	SUBC	lcd_temporary		
	SACL	lcd_temporary		;hundred
	SACH	lcd_innumber
	LACC	lcd_temporary
	ADD		lcd_number_flag		;+0
	SACL	lcd_number_flag
	BCND	lcd_bit3,GT
	SPLK	#10,lcd_temporary	;blank
lcd_bit3
	LDP		#lcd_msb			;column 73
	SPLK	#014H,lcd_msb		
	SPLK	#09H,lcd_lsb
	LT		lcd_temporary
	MPY		#18
	PAC
	LDP		#lcd_count
	SACL	lcd_count			;pointer
	CALL	send_number	

	LDP		#lcd_temporary		;十位
	SPLK	#10,lcd_temporary
	LACL	lcd_innumber
	RPT		#15
	SUBC	lcd_temporary		
	SACL	lcd_temporary		;decade
	SACH	lcd_innumber		;个位	
	LACC	lcd_temporary
	ADD		lcd_number_flag		;+0
	SACL	lcd_number_flag
	BCND	lcd_bit2,GT
	SPLK	#10,lcd_temporary	;blank
lcd_bit2
	LDP		#lcd_msb			;column 82
	SPLK	#015H,lcd_msb		
	SPLK	#02H,lcd_lsb
	LT		lcd_temporary
	MPY		#18
	PAC
	LDP		#lcd_count
	SACL	lcd_count			;pointer
	CALL	send_number	

	LDP		#lcd_temporary
	BLDD	#lcd_innumber,lcd_temporary		;个位
	LDP		#lcd_msb			;column 91
	SPLK	#015H,lcd_msb		
	SPLK	#0BH,lcd_lsb
	LT		lcd_temporary
	MPY		#18
	PAC
	LDP		#lcd_count
	SACL	lcd_count			;pointer
	CALL	send_number	
	RET
;------------------------------------------------
send_number:					;(9*16)
	LDP		#lcd_comdata
	SPLK	#0B1H,lcd_comdata	;lcd_page secect(start lcd_page1)
	CALL	send_comd
	LDP		#lcd_comdata
	BLDD	#lcd_msb,lcd_comdata;lcd_column MSB	
	CALL	send_comd
	LDP		#lcd_comdata
	BLDD	#lcd_lsb,lcd_comdata;lcd_column LSB(MSB+LSB=start lcd_column8)
	CALL	send_comd
	;send data 
	MAR		*,AR0		
	LAR		AR0,#8				;9 columns				
number_nextcol
	LACC	#lcd_number_table
	ADD		lcd_count
	LDP		#lcd_comdata
	TBLR	lcd_comdata			;lcd_column data
	CALL	send_data
	lacl	lcd_count
	add		#1
	sacl	lcd_count			;0--8
	MAR		*,AR0		
	BANZ	number_nextcol,*-
	;next page  (position:page and column)
	LDP		#lcd_comdata
	SPLK	#0B2H,lcd_comdata	;lcd_page secect(start lcd_page1)
	CALL	send_comd
	LDP		#lcd_comdata
	BLDD	#lcd_msb,lcd_comdata;lcd_column MSB
	CALL	send_comd
	LDP		#lcd_comdata
	BLDD	#lcd_lsb,lcd_comdata;lcd_column LSB(MSB+LSB=start lcd_column8)
	CALL	send_comd
	;send data  lcd_count(table pointer=64)
	MAR		*,AR0		
	LAR		AR0,#8				;9 columns
number_nextcol1
	LACC	#lcd_number_table
	ADD		lcd_count
	LDP		#lcd_comdata
	TBLR	lcd_comdata			;lcd_column data
	CALL	send_data
	lacl	lcd_count
	add		#1
	sacl	lcd_count			;9--17
	MAR		*,AR0		
	BANZ	number_nextcol1,*-
	RET

lcd_number_table:	;0123456789+blank  (9*16) *11 (dotum)
	.word 	00H,0F0H,08H,04H,04H,04H,08H,0F0H,00H,00H,07H,08H,10H,10H,10H,08H,07H,00h	;0
	.word 	00H,00H,00H,08H,08H,0FCH,00H,00H,00H,00H,00H,00H,00H,00H,1FH,00H,00H,00h	;1
	.word 	00H,30H,08H,04H,04H,04H,88H,70H,00H,00H,18H,14H,12H,11H,11H,10H,10H,00h		;2
	.word 	00H,10H,08H,44H,44H,44H,0A8H,10H,00H,00H,04H,08H,10H,10H,10H,08H,07H,00h	;3
	.word 	00H,00H,80H,60H,18H,04H,0FCH,00H,00H,00H,06H,05H,04H,04H,04H,1FH,04H,04h	;4
	.word 	00H,0FCH,84H,44H,44H,44H,84H,04H,00H,00H,09H,10H,10H,10H,10H,08H,07H,00h	;5
	.word 	00H,0F0H,88H,44H,44H,44H,88H,10H,00H,00H,07H,08H,10H,10H,10H,08H,07H,00h	;6
	.word 	00H,04H,04H,04H,04H,0C4H,34H,0CH,00H,00H,00H,00H,00H,1EH,01H,00H,00H,00h	;7
	.word 	00H,30H,48H,84H,84H,84H,48H,30H,00H,00H,06H,09H,10H,10H,10H,09H,06H,00h		;8
	.word 	00H,70H,88H,04H,04H,04H,88H,0F0H,00H,00H,04H,08H,11H,11H,11H,08H,07H,00h	;9
	.word   00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00h		;blank
;=============================================	
	;显示转速(32*16)
hzspeed_display:					;send command(start position:page and column)
	LDP		#lcd_comdata
	SPLK	#0B1H,lcd_comdata	;lcd_page secect(start lcd_page1)
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#010H,lcd_comdata	;lcd_column MSB
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#07H,lcd_comdata	;lcd_column LSB(MSB+LSB=start lcd_column8)
	CALL	send_comd
	;send data 
	LDP		#lcd_count
	SPLK	#0,lcd_count		;table pointer=0
speed_nextcol
	LACC	#lcd_table_hzspeed
	ADD		lcd_count
	LDP		#lcd_comdata
	TBLR	lcd_comdata		;lcd_column data
	CALL	send_data
	lacl	lcd_count
	add		#1
	sacl	lcd_count		;0--31
	lacl	lcd_count
	SUB		#31
	bcnd	speed_nextcol,LEQ
	;next page 转速 (position:page and column)
	LDP		#lcd_comdata
	SPLK	#0B2H,lcd_comdata	;lcd_page secect(start lcd_page1)
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#010H,lcd_comdata	;lcd_column MSB
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#07H,lcd_comdata	;lcd_column LSB(MSB+LSB=start lcd_column8)
	CALL	send_comd
	;send data  lcd_count(table pointer=64)
speed_nextcol1
	LACC	#lcd_table_hzspeed
	ADD		lcd_count
	LDP		#lcd_comdata
	TBLR	lcd_comdata		;lcd_column data
	CALL	send_data
	lacl	lcd_count
	add		#1
	sacl	lcd_count		;32--63
	SUB		#63
	bcnd	speed_nextcol1,LEQ
	RET
lcd_table_hzspeed:	;转速 32*16	(宋体)
	.word 	00H,88H,0E8H,9EH,0E8H,88H,88H,40H,48H,0C8H,7EH,48H,48H,48H,40H,00H
	.word 	40H,42H,0CCH,00H,08H,0E8H,0A8H,0A8H,0FEH,0A8H,0A8H,0E8H,0CH,08H,00H,00H
	.word 	00H,08H,18H,08H,7FH,04H,04H,00H,0AH,0BH,12H,2AH,46H,02H,00H,00H
	.word 	20H,10H,0FH,10H,20H,48H,44H,42H,5FH,41H,42H,44H,48H,40H,00H,00H
****************************************************
lcd_init:				;液晶初始化
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	AND		#0FFFDH		;(IOPE1)LCD复位(L)
	SACL	PEDATDIR
	CALL	delay_long	;delay 0.8ms
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	OR		#02H		;(IOPE1)LCD恢复正常,不复位(H)
	SACL	PEDATDIR
	CALL	delay_250

	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
;	AND		#0ffdfH		;(IOPE4)BLE背光不使能(L)
	OR		#010H		;(IOPE4)BLE背光使能(H)
	AND		#0FFFBH		;(IOPE2)LCD_CS片选(低有效L)
	SACL	PEDATDIR
	CALL	delay_250
	;send command
	LDP		#lcd_comdata
	SPLK	#0A0H,lcd_comdata	;ADC secect(display from left to right)
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#0C0H,lcd_comdata	;SHL secect(display from top to bottom)
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#0A2H,lcd_comdata	;LCD Bias secect(LCD volatage)
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#02FH,lcd_comdata	;power control
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#025H,lcd_comdata	;regualtor resistor select 025H******
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#081H,lcd_comdata	;Set Reference Voltage Mode
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#02AH,lcd_comdata	;Set Reference Voltage Register
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#0AFH,lcd_comdata	;display on
	CALL	send_comd
	
	CALL	lcd_clear			;clear screen
	LDP		#lcd_comdata
	SPLK	#040H,lcd_comdata	;line of COM1(fixed)
	CALL	send_comd
	CALL	hzspeed_display		;显示转速
	RET	
**********************************************************
send_comd:						;8bit
	LDP		#lcd_comdata_flg
	SPLK	#0,lcd_comdata_flg	;send command
	CALL	send_byte
	CALL	delay_250
	RET

send_data:						;8bit
	LDP		#lcd_comdata_flg
	SPLK	#1,lcd_comdata_flg	;send data
	CALL	send_byte
	CALL	delay_250
	RET
;--------------------------
send_byte:				;byte(8bit)都移至第六位发送(对应IOPE6)
	LDP		#lcd_comdata_flg
	LACC	lcd_comdata_flg
	BCND	datago,GT
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	AND		#0FFF7H		;(IOPE3)RS低(L)(发送指令),lcd_comdata_flg=0
	SACL	PEDATDIR
	B   	sendall
datago
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	OR		#08H		;(IOPE3)RS高(H)(发送数据),lcd_comdata_flg=1
	SACL	PEDATDIR
sendall
	LDP		#lcd_comdata
	LACL	lcd_comdata
	SFR
	AND		#040H
	SACL	lcd_temporary
	CALL	send_bit	;send 7th bit
	
	LDP		#lcd_bit_count
	SPLK	#6,lcd_bit_count	;bit count
next_bit
	LDP		#lcd_comdata
	LACL	lcd_comdata
	AND		#040H
	SACL	lcd_temporary
	CALL	send_bit	;send 6-0 bit
	LDP		#lcd_comdata
	LACL	lcd_comdata
	SFL		
	SACL	lcd_comdata
	LDP		#lcd_bit_count
	LACC	lcd_bit_count
	SUB		#1
	SACL	lcd_bit_count
	BCND	next_bit,GEQ
	RET
;--------------------------------------------------------	
send_bit:				;bit
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	AND		#0FFDFH		;(IOPE5)CLK低(L)
	SACL	PEDATDIR
	
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	AND		#0FFBFH		;bit6=0
	LDP		#lcd_temporary
	OR		lcd_temporary
	LDP		#PEDATDIR>>7
	SACL	PEDATDIR	;send bit	
	CALL	delay_250	;delay
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	OR		#020H		;(IOPE5)CLK高(H)
	SACL	PEDATDIR
	CALL	delay_250	;delay
	RET
;---------------------------------------------------
sysinit:
	CLRC	SXM
	CLRC	OVM
	CLRC	CNF			;B0 DATA MEMORY
	LDP		#SCSR1>>7
	SPLK	#008CH,SCSR1
	LDP		#WDCR>>7
	SPLK	#0EFH,WDCR
	LDP		#IFR>>7
	SPLK	#0000H,IMR	
	SPLK	#0FFFFH,IFR
	RET

lcd_ioconfigure:
	LDP		#MCRC>>7
	LACL	MCRC
	AND		#0FF81H		;IOPE1~6一般I/O口
	SACL	MCRC
	LDP		#PEDATDIR>>7
	LACL	PEDATDIR
	OR		#07E00H		;IOPE1~6为输出方式
	SACL	PEDATDIR
	RET
;----------------------------------------------------
lcd_clear:
	LDP		#lcd_page
	SPLK	#0B8H,lcd_page		;lcd_page
next_page
	;send command
	LDP		#lcd_comdata
	BLDD	#lcd_page,lcd_comdata	;lcd_page 
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#010H,lcd_comdata	;lcd_column MSB
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#0H,lcd_comdata		;lcd_column LSB(MSB+LSB=start lcd_column0)
	CALL	send_comd
	LDP		#lcd_comdata
	SPLK	#040H,lcd_comdata	;line of COM1
	CALL	send_comd			
	;send data 0(clear screen)
	LDP		#lcd_column			;lcd_column
	SPLK	#128,lcd_column	
next_column
	LDP		#lcd_comdata
	SPLK	#0H,lcd_comdata		;data 0
	CALL	send_data			;----
	LDP		#lcd_column
	LACC	lcd_column
	SUB		#1
	SACL	lcd_column
	BCND	next_column,GEQ
	LDP		#lcd_page
	LACC	lcd_page
	SUB		#1
	SACL	lcd_page
	LACC	lcd_page
	SUB		#0B0H
	BCND	next_page,GEQ
	RET
;-----------------------------------------------------
delay_250:				;5cycle,1+5+4=10(clock),10*25=250ns
	RPT		#4
	NOP
	RET
;---------
delay_long:				;delay long time(1ms)
	MAR		*,AR0
	LAR		AR0,#01200H	;4600 cycles
delaycycle
	NOP
	NOP
	NOP
	NOP
	BANZ	delaycycle,*-
	RET	
;*******************************************
	.def	_c_int1
	.def	_c_int2
	.def	_c_int3
	.def	_c_int4
	.def	_c_int5
	.def	_c_int6
_c_int1
_c_int2
_c_int3
_c_int4
_c_int5
_c_int6	      
	       	








⌨️ 快捷键说明

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