PRINT zobrazit číslo na LCD
vloženo:09.05.2009
Podprogram zobrazí 4místné číslo na LCD displeji, zarovnané vždy vpravo. Číslo může mít 0 až 3 desetinná místa, může být i záporné a nevýznamné nuly se nezobrazují.
Příprava před zavoláním podprogramu (CALL PRINT)
- rozložit binární číslo do 4 řádů R1,2,3,4 (např. pomocí HEXDEC)
- zadat desetinnou tečku do TE
- nastavit požadovanou pozici kurzoru v LCD (vždy 1. pozice)
Pořadí těchto kroků může být libovolné.
R1 - bajt s nejnižším řádem
R4 - bajt s nejvyšším řádem
TE - desetinná tečka
00000000 4321 (žádné desetinné místo)
00000001 432.1
00000010 43.21
00000100 4.321
Pro zobrazení záporného čísla musí být nastaven (log.1) příznakový bit "Znam" znaménko. Podprogram HEXDEC nastavuje tento příznak automaticky, při převodu.
HEXDEC
převod hexadecimálního čísla na dekadické
Před zobrazením čísla na LED nebo LCD displeji je potřeba převést číslo z binárního tvaru na jednotlivé řády. Ty se potom zobrazí jako samostatné znaky.
Například převod binárního čísla 10011010010, uloženého ve dvou bajtech A1 (dolní), A2 (horní). V assembleru se používá hexadecimální zápis, takže A1=0xD2, A2=0x04.
Podprogram HEXDEC rozloží hodnotu v A1,2 do 4 řádů R1,2,3,4 (R1 je nejnižší řád).
Výstup bude R1=0x04, R2=0x03, R3=0x02, R4=0x01.
Ještě jeden příklad se stejným číslem, ale záporným.
Binární tvar 1111101100101110.
Hex. tvar A1=0x2E, A2=0xFB.
Výstup po převodu R1=0x04, R2=0x03, R3=0x02, R4=0x01.
Ano je to stejné jako při kladném čísle, ale nyní je nastaven příznak záporného čísla Znam=1, na displeji se tedy zobrazí znaménko mínus.
Na začátku programu se zjistí, zda je číslo záporné (podle nejvyššího bitu, 1=záporné), pokud ano, nastaví se příznak záporného čísla (Znam=1) a samotné číslo se změní na kladné, binární negace a zvětšení o 1.
Potom následuje vlastní převod. Pomocí matematického podprogramu LOMENO se číslo dělí tisícem, zbytek stem a nakonec deseti. Výsledky po dělení odpovídají danému řádu, a poslední zbytek po dělení deseti, to už je nejnižší řád R1.
Jak nadefinovat příznak Znam a ostatní registry najdete ve zdrojovém textu LCDIP.
Je tam i jednoduchý doplněk pro pětimístné zobrazování teploty P5M.
(pouze pro nekomerční účely, only for non-commercial purposes)
;-------------------------------;
; PRINT ;
; zobrazit číslo na LCD ;
;-------------------------------;
;slovak@post.cz )S(08.2007;
;-------------------------------;
;vstup R4,3,2,1 (R1 nejnižší řád)
;Znam 0=kladné, 1=záporné
;TE desetinná tečka
;00000000 4321 (bez tečky)
;00000001 432.1 (#define TE1 TE,0)
;00000010 43.21 (#define TE2 TE,1)
;00000100 4.321 (#define TE3 TE,2)
PRINT MOVLW 0x20 ;mezera
MOVF TE,F
BTFSC SZ
CALL WRDATA ;TE=0, poslat mezeru
PRINT4 MOVF R4,F ;řád 1000 [-4321]
BTFSS SZ
GOTO PZR4 ;nenulové
BTFSC TE3
GOTO PZR4T ;TE3=ZAP
MOVLW 0x20 ;mezera
CALL WRDATA
PRINT3 MOVF R3,F ;řád 100 [-321]
BTFSS SZ
GOTO PZR3 ;nenulové
BTFSC TE2
GOTO PZR3T ;TE2=ZAP
MOVLW 0x20 ;mezera
CALL WRDATA
PRINT2 MOVF R2,F ;řád 10 [-21]
BTFSS SZ
GOTO PZR2 ;nenulové
BTFSC TE1
GOTO PZR2T ;TE1=ZAP
MOVLW 0x20 ;mezera
CALL WRDATA
CALL POZN ;znaménko nebo mezera
GOTO PR1
PZR2 CALL POZN ;znaménko nebo mezera
PRR2 CALL POR2 ;řád 10
BTFSC TE1
GOTO PTR1 ;TE1=ZAP
GOTO PR1 ;TE1=VYP
PZR3 CALL POZN ;znaménko nebo mezera
CALL POR3 ;řád 100
MOVF TE,F
BTFSC SZ
GOTO PR21 ;TE=0
PT2T BTFSS TE2
GOTO PR2T ;TE2=VYP
GOTO PTR21 ;TE2=ZAP
PZR4 CALL POZN ;znaménko nebo mezera
PR4 CALL POR4 ;řád 1000
MOVF TE,F
BTFSC SZ
GOTO PR321 ;TE=0
BTFSC TE3
GOTO PTR321 ;TE3=ZAP
CALL POR3 ;řád 100
GOTO PT2T
PZR2T CALL POZN ;znaménko nebo mezera
PR2T CALL POR2 ;řád 10
PTR1 CALL POTE ;poslat tečku
GOTO PR1
PZR3T CALL POZN ;znaménko nebo mezera
CALL POR3 ;řád 100
PTR21 CALL POTE ;poslat tečku
GOTO PR21
PZR4T CALL POZN ;znaménko nebo mezera
CALL POR4 ;řád 1000
PTR321 CALL POTE ;poslat tečku
PR321 CALL POR3 ;řád 100
PR21 CALL POR2 ;řád 10
PR1 MOVF R1,W ;řád 1
PIOR IORLW B'000110000'
PWRET CALL WRDATA ;PRINT W + RETURN
RETURN
;................................
;poslat znaménko nebo mezeru
POZN MOVLW 0x20 ;mezera
BTFSC Znam ;záoprné číslo? (Znam=1)
MOVLW 0x2D ;-
GOTO PWRET
;poslat tečku
POTE MOVLW 0x2E ;.
GOTO PWRET
;poslat řád 1000
POR4 MOVF R4,W ;řád 1000
GOTO PIOR
;poslat řád 100
POR3 MOVF R3,W ;řád 100
GOTO PIOR
;poslat řád 10
POR2 MOVF R2,W ;řád 10
GOTO PIOR
;--------------------------------
;převod HEX/DEC, vstup A1,2, výstup R1,2,3,4
HEXDEC
;upravit záporné číslo
BCF Znam ;=0
BTFSS A2,7 ;=1?
GOTO PHD
BSF Znam ;=1, záporné
;změna znaménka A1,2
COMF A2,F
COMF A1,F
INCFSZ A1,F ;+1=0?
GOTO PHD
INCF A2,F ;+1
;převod
PHD CLRF A3
MOVLW 0xE8 ;1000 do B
MOVWF B1 ;
MOVLW 0x03 ;
MOVWF B2 ;
CLRF B3 ;
CALL LOMENO ;A/B=C, zbytek je v A
MOVF C1,W ;uložit řád 1000
MOVWF R4 ;
HDPA1 MOVLW 0x64 ;100 do B
MOVWF B1 ;
CLRF B2 ;
CALL LOMENO ;A/B=C, zbytek je v A
MOVF C1,W ;uložit řád 100
MOVWF R3 ;
MOVLW 0x0A ;10 do B
MOVWF B1 ;
CLRF B2 ;
CALL LOMENO ;A/B=C, zbytek je v A
MOVF C1,W ;uložit řád 10
MOVWF R2 ;
MOVF A1,W ;uložit řád 1
MOVWF R1 ;
RETURN
Stáhnout PRINT_HEXDEC.asm (2,9 kB)