FAQ | Points | Add... | Recent posts | Search | Register | Log in


Wyświetlanie liczb na LCD w asamblerze


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Wyświetlanie liczb na LCD w asamblerze
Author
Message
jareks91
Poziom 18
Poziom 18


Joined: 30 Dec 2004
Posts: 570
Location: Milówka

Post#1 Post from the author of the topic 13 Mar 2008 22:27   

Wyświetlanie liczb na LCD w asamblerze


Witam,
Czy ktoś mogby podzielić się procedurą ktora optymalnie wyświetla liczbe ktorą posiadam w zmiennej np licz=223 na wyswietlaczu LCD oczywiscie napisaną w asamblerze.
Pojedyncze znaki i stringi zapisane w programie potrafie wyswietlać natomiast nie wiem jak ze zeminnymi.
z góry dziękuje.
Back to top
   
tplewa
Poziom 22
Poziom 22


Joined: 01 Jul 2003
Posts: 1721
Location: Kamienna Góra/Wawa

Post#2 13 Mar 2008 22:42   

Re: Wyświetlanie liczb na LCD w asamblerze


tutaj masz kod dla AVR (sterownik syntezy ktory kiedys pisalem):

http://www.elektroda.pl/rtvforum/topic673331-30.html
Back to top
   
Google

Google Adsense


Post# 13 Mar 2008 22:42   





Back to top
   
jareks91
Poziom 18
Poziom 18


Joined: 30 Dec 2004
Posts: 570
Location: Milówka

Post#3 Post from the author of the topic 13 Mar 2008 22:45   

Re: Wyświetlanie liczb na LCD w asamblerze


Potrzebowałbym to do procesora at89s2051 czyli 51' i dla wysiwtlacza LCD ze sterownikiem hd44780 czyli standardowym.
I to bylaby raczej liczba 4 bajtowa umieszczana gdzieś w pamięci czy ktoś ma jakiś pomysł jak wyłuskać poszczególne cyfry tej liczby i wysłąć na LCD?
z góry dziękuje
Back to top
   
Pokey
Poziom 15
Poziom 15


Joined: 28 Jun 2003
Posts: 205
Location: Rzeszów

Post#4 13 Mar 2008 23:53helpful post - solution   

Re: Wyświetlanie liczb na LCD w asamblerze


Sposób który pierwszy narzuca się aby liczbę przedstawić w postaci tekstu to znaleźć ilość jednostek, dziesiątek, setek, tysięcy, itd... w danej liczbie (dzieląc przez 1000,100,10). Następnie te znaki pozostaje już tylko "przesunąć" do znaków ASCII, a wiec dodać 0x30.
Dla przykładu mamy liczbę 123, liczba setek: 1, liczba dziesiątek 2, liczba jednostek 3. Znaki ASCII odpowiadające tym cyfrom to: 0x31,0x32,0x33.
Wiąże się to z napisaniem w asemblerze procedur dzielenia liczb kilkubajtowych, co nie jest przyjemne, zwłaszcza w asemblerze '51. W internecie na pewno znajdziesz gotowe procedury takich działań.
Przychodzi mi do głowy też inny sposób. Jeśli na liczbie o której mówisz przeprowadzasz bardzo proste działania - tylko dodawanie, to możesz ją przechowywać w formie BCD. Nie zapomnij po każdej operacji dodawania liczb BCD wykonać operacji DA A. Liczbę BDC już jest bardzo łatwo przedstawić w formie znaków ASCII. Wystarczy odseparować poszczególne nibble od siebie i dodać do uzyskanej cyfry 0x30.
Przykład: Liczba 23 w formacie BCD to 0x23. Zwiększenie wartości o 1 jeśli znajduje się w akumulatorze:
ADD A,#1
DA A
(nie używaj INC A bo zburzy ona format BCD :) )

Pozdrawiam.
Back to top
   
Google

Google Adsense


Post# 13 Mar 2008 23:53helpful post - solution   





Back to top
   
zumek
Poziom 23
Poziom 23


Joined: 08 Oct 2003
Posts: 3122
Location: Włocławek

Post#5 14 Mar 2008 00:33helpful post - solution   

Re: Wyświetlanie liczb na LCD w asamblerze


A ja rzucę gotowcem :D
Code:

; -------------------------------------------------------------------------
;konwersja liczby binarnej X-bitowej do postaci dziesietnej X-cyfrowej ;) |
;-------------------------------------------------------------------------
 
bajty   equ 4     ;z ilu bajtow sklada sie liczba
bity   equ bajty*8
cyfry   equ 10    ;maksymalna ilosc cyfr po konwersji
licznik   equ r3

dseg    at 8
dane:   ds bajty ;liczba w pamieci zapisana od MSB do LSB
;dseg   at 10H
wynik:   ds cyfry ;kolejnosc od najbardziej znaczacej cyfry
nul_term: ds 1
stack:

;program
cseg   at 00H
   sjmp   main
org   40H   
main:
   mov   sp,#stack
   mov   dane,#0FFH ;MSB
   mov   dane+1,#0FFH ;
   mov   dane+2,#0FFH ;
   mov   dane+3,#0FFH ;LSB
   acall   bin2str
stop:   sjmp   $   
   
bin2str:
   acall   clear_tab   ;wyzerowanie tablicy z wynikiem konwersji
   mov   licznik,#bity   ;z ilu bitów sklada sie liczba
lop0:
   acall   rotate_left
   mov   r0,#(wynik+cyfry)
   mov   r2,#cyfry
lop1:
   dec   r0
   mov   a,@r0
   rlc   a
   push   acc
   addc   a,#-10
   pop   acc
   jnc   lop2
   add   a,#-10
lop2:   mov   @r0,a
   dec   r2
   mov   a,r2
   jnz   lop1
lop2a:
   dec   licznik
   mov   a,licznik
   jnz   lop0
   acall   tab_to_string
   ret

rotate_left:
   push   acc
   mov   r1,#(dane+bajty)
   clr   c
   push   psw
lop2b:
   pop   psw
   dec   r1
   xch   a,@r1
   rlc   a
   xch   a,@r1
   push   psw
   cjne   r1,#dane,lop2b
   pop   psw
   pop   acc
   ret
clear_tab:
   mov   r0,#(wynik+cyfry)
lop3:
   dec   r0
   mov   @r0,#0
   cjne   r0,#wynik,lop3
   ret
tab_to_string:
   mov   r0,#(wynik+cyfry)
lop4:
   dec   r0
   mov   a,@r0
   orl   a,#30H
   mov   @r0,a
   cjne   r0,#wynik,lop4
   mov   nul_term,#0
   ret
end

Można konwertować do stringa , dowolną liczbę X-bajtową , byle RAM-u i czasu starczyło :D
Ta jest dla 4-bajtowej , ale może być 1 lub 100-bajtowa , czyli taka ... uniwersalka ;)
Back to top
   
Pokey
Poziom 15
Poziom 15


Joined: 28 Jun 2003
Posts: 205
Location: Rzeszów

Post#6 14 Mar 2008 14:16   

Re: Wyświetlanie liczb na LCD w asamblerze


Bardzo sprytna funkcyjka zumek :) Wygląda na czasochłonną dla dużych liczb, ale jeśli chodzi o kod programu, to krócej chyba by się tego nie dało zrobić. I nie ma żadnego "dzielenia wielobajtowego" :)
Back to top
   
jareks91
Poziom 18
Poziom 18


Joined: 30 Dec 2004
Posts: 570
Location: Milówka

Post#7 Post from the author of the topic 14 Mar 2008 14:21   

Re: Wyświetlanie liczb na LCD w asamblerze


tak dziękuje bardzo problem rozwiązany, funkcja zumka działa :-)
Back to top
   
Michal19881
Poziom 21
Poziom 21


Joined: 03 Sep 2007
Posts: 1122
Location: Konin

Post#8 15 Mar 2008 13:33   

Re: Wyświetlanie liczb na LCD w asamblerze


DLA DSM-51:

Code:
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV A,#'A'
LCALL WRITE_DATA
LJMP $


Program ten spowoduje wypisanie na wyświetlaczu LCD literki A.
Back to top
   
Google

Google Adsense


Post# 15 Mar 2008 13:33   





Back to top
   
Pokey
Poziom 15
Poziom 15


Joined: 28 Jun 2003
Posts: 205
Location: Rzeszów

Post#9 15 Mar 2008 15:38   

Re: Wyświetlanie liczb na LCD w asamblerze


Michal19881 ale koledze jareks91 chodziło o wyświetlenie liczby przechowywanej jako binarna, czyli zupełnie inna bajka :) Procedura zumeka nadaje się do tego idealnie.
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Wyświetlanie liczb na LCD w asamblerze
Page 1 of 1
Similar topics
[bascom] wyświetlanie liczb całkowitych (4)
Program w C. Wyświetlanie liczb na wyświetlaczach. (13)
[WINAPI] Wyświetlanie liczb. (3)
Wyświetlanie po kolei liczb [C] (9)
Wyświetlanie liczb rzeczywistych (4)
Wyświetlanie liczb na LCD i konwersja hex na dec i odwrotnie (3)
AVR LCD Wyświetlanie liczb niecałkowitych (2)
Wyświetlanie na LCD liczb BCD (2)
bash - wyświetlanie liczb z pliku (4)
Pascal, wyświetlanie liczb w jednej linii (9)

Page generation time: 0.087 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed