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