7 szegmenses kijelző meghajtása ATM128-cal

Papp Zoltán oneway at onewayelectronics.hu
Tue Jul 5 00:14:14 CEST 2005


Mon, 4 Jul 2005 23:12:20 +0200-n, Laurinyecz Zoltán  
<lauri at mail.globonet.hu> írta:

> Sziasztok,
>
> A kérdés nagyjából adott a tárgyban. A PORTB-re rá van téve egy  
> hétszegmenses kijelző
> (PB0-PB7)illetve van egy regiszter aminek az értéke 0-9-ig változik.  
> Milyen bevált megoldás
> létezik amivel a regiszter értékét át lehet konvertálni olyan formátumra  
> amit kiküldve a portra
> megjelenik a szám?
>
> Az elvileg működik a kőbaltás módszer hogy megnézem hogy mely  
> szegmenseknek kell bekapcsolva
> lenniük, majd minden számhozhozzárendelem az így kialakult értéket és  
> ezeket jeleztetem ki de
> ettől profibb megoldás kéne Hogy csinálják ezt a nagyok? Ja és mindezt  
> asm-ben C, Bascom nálam
> még nem játszik.
>
> Kulcsszavak amire rákeresve találok valami hasznosat a témában szintén  
> érdekelnek.

Hát először is a nagyok sokszor C-ben csinálják, mivel a kód nem lesz  
lassabb (mivel avr-re jól lehet C-t írni), csak könyebb és gyorsabb  
megírni és átlátni.

Node: szerintem konstans tömbnél nincs egyszerűbb és gyorsabb megoldás.  
Bár lehet, hogy fel lehet írni minden egyes kimenő bitnek (8 db PORTB_Bit)  
a 4 bemenő bit (regiszter alsó 4 bit) függvényében egy-egy VK táblát, de  
asszem nagyobb is lenne, meg lassabb is. :-)

Ebben találsz ilyet, bár ez annyival több, hogy 8 digit multiplexelt  
kijelzése van benne:
http://www.onewayelectronics.hu/papp.zoltan/software/peldak/kijelzo8515.asm

A lényeg kiemelve (bővíthető egyéb karakterek kijelzésére):

Táblázat:

.CSEG
LEDNO:
;	  pgfedcba   pgfedcba  0=light 1=blank
.DB	0b11000000,0b11111001		;0,1
.DB	0b10100100,0b10110000		;2,3
.DB	0b10011001,0b10010010		;4,5
.DB	0b10000010,0b11111000		;5,7
.DB	0b10000000,0b10010000		;8,9
; egyéb karakterek
.DB	0b10001000,0b10000011		;A,b
.DB	0b11000110,0b10100001		;C,d
.DB	0b10000110,0b10001110		;E,F
.DB	0b11111111,0b00000000		;empty,full
.DB	0b01111111,0b10111111		;dp,minus (-)

.equ	D_a=10
.equ	D_b=11
.equ	D_c=12
.equ	D_d=13
.equ	D_e=14
.equ	D_f=15
.equ	D_empty=16
.equ	D_full=17
.equ	D_pixel=18
.equ	D_minus=19

.equ	PLed	=LEDNO*2	; a táblázat tényleges címe bájtban



; kijelző makró (R17-et használja)

.MACRO _Display		;@0
	ldi	R17, at 0		;i <- aktualis karakter kodja
	_ldi16	ZH,ZL,PLed	;Z <- karakter-tabla cime
	_add16	ZH,ZL,R17	;Z <- Z+i
	lpm				;R0 <- prg(Z)	(karakter formaja)
	out	PORTB,R0		;karakter kiir
.ENDMACRO	;_Display


; kijelző kiíratás programban:
....
	_Display 1		; //kiír 1-et
....
	_Display D_a	; //kiír A-t
....
	_Display D_pixel	; //csak a dp világít
....
	_Display R16	; //R16 regiszter értéket írja ki
....

-- 
Papp Zoltán
OneWay Electronics




More information about the Elektro mailing list