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

📄 disp4.asm

📁 web51的开发库
💻 ASM
字号:
;	Ctyrbitove ovladani dvouradkoveho displeje pro procesory x51;;	;	Popis pripojeni displeje;;	; 	K portu P1 je ctyrbitove pripojen dvouradkovy LCD displej takto:;	P1.4 az P1.7 ... D4 az D7 displeje,;	P1.1 ... RS;	P1.2 ... RW;	P1.3 ... E; -------------------------- EQU pro hardware ---------------------------------	.equ	disp, 0x90	;Port 1	.equ	RS, 0x91	;P1.1		;Instrukce/data displeje	.equ	RW, 0x92	;P1.2		;Read/write displeje	.equ	E,  0x93	;P1.3		;Enable displeje	.equ	ST, 0x97	;P1.7		;status displeje;PROCEDURY PRO DISPLEJ.global	d_inst, d_data, d_clr, d_home, d_read, d_init	.bitcomm	flag_disp,   1		;display init	.text; ----------------------- Cekani na ready stav displeje -----------------------d_wait:				;cekani na bussy flag displeje	mov	disp,#0xf4	;nastaveni cteni a nahozeni bitu dat	clr	await_znovu:	setb	E	jnb 	ST,dumy		;uz to spadlo?	clr	E		;vynulovani E	setb	E		; Pulz E na displej	clr	E		;dumy cyklus (4 bit)	djnz	acc,wait_znovu	; timeout !!!dumy:	setb	E		; Pulz E na displej				;dumy cyklus (4 bit)	clr	E		;vynulovani E	ret ; ------------------------ Vyslani dat na displej -----------------------------;	Data nebo instrukce se daji do R7 a zavola se tahle rutinka; ----- Instrukce -----d_inst:			push	acc	push	psw	clr	c		;jedna se o instrukci	sjmp	d_send		;vlastni zapisy na displej; ----- Data -----d_data:	push	acc	push	psw	setb	c; ----- Vlastni zapis -----	d_send:        lcall 	d_wait        mov 	a,#0b11110000	;priprava masky        anl 	a,r7		;prevzeti a vymaskovani instrukce z R7        mov 	disp,a		;vystaveni dat	mov	RS,c   	 	setb	E		; Pulz E na displej        			;zapis pulzem na E	clr	E		;vynulovani E        mov 	a,#0b00001111	;priprava masky        anl 	a,r7		;prevzeti a vymaskovani instrukce z R7        swap 	a		;prehozeni niblu        mov 	disp,a		;vystaveni dat	mov	RS,c	setb	E		; Pulz E na displej        			;zapis pulzem na E	clr	E		;vynulovani E        pop	psw        pop	acc        ret; ----------------------------- Cursor home -----------------------------------d_home:	mov r7,#0b00000010                  sjmp d_inst            ; ---------------------------- Display clear ----------------------------------d_clr:        mov r7,#0b00000001	;Clear Home        sjmp d_inst; ------------------------------- Readout displeje ----------------------------d_read:	lcall 	d_wait	setb	RS		; read data	setb	E		; Pulz E na displej	mov	a,disp	clr	E		;vynulovani E        anl	a,#0xF0	mov	r7,a	setb	E		; Pulz E na displej	mov	a,disp	clr	E		;vynulovani E        swap 	a		;prehozeni niblu        anl	a,#0x0F	orl	a,r7done:	ret; ------------------------------- Oziveni displeje ----------------------------d_init:	jb	flag_disp, done	setb	flag_disp	clr	E		;E dolu	mov	a,#7		;10 ms minL1:	lcall	plongpause	;1.6 ms	djnz	Acc,L1		;cekani (jeste nefunguje BUSY flag)        mov 	disp,#0b00110000;Prvni zapis	setb	E		; Pulz E na displej	clr	E		;vynulovani E	mov	a,#3		;4.1 ms minL2:	lcall	plongpause	;1.6 ms	djnz	Acc,L2		;cekani (jeste nefunguje BUSY flag);	mov	disp,#0b00110000	setb	E		; Pulz E na displej				;odeslani dat	clr	E		;vynulovani E	mov	a,#0		;100 us min	djnz	Acc,.		;cekani (jeste nefunguje BUSY flag);	mov	disp,#0b00110000	setb	E		; Pulz E na displej				;odeslani dat	clr	E		;vynulovani E	mov	a,#0		;100 us min	djnz	Acc,.		;cekani (128 us @ 48 MHz)        mov 	disp,#0b00100000;4bitovy interface	setb	E		; Pulz E na displej				;odeslani dat	clr	E		;vynulovani E; .................... Odtud uz se pouziva BUSY flag displeje .................        mov 	r7,#0b00101000       	;4Bit, 2radkovy, 5*7        lcall	d_inst        mov 	r7,#0b00001000       	;Display off        lcall 	d_inst        mov 	r7,#0b00001100       	;Display on, cursor on, blink off        lcall 	d_inst        mov 	r7,#0b00000110       	;Entry mode increment, no shift        lcall 	d_inst	ljmp	d_clr			;Clear displeje; 	A tady uz je displej Vas a pomoci call d_inst nebo call d_data mu muzete ;	posilat veskera Vase prani.	;; END

⌨️ 快捷键说明

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