Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "io430fg4618.h"
- #include "msp430.h"
- NAME LCD_A
- ;LCD_segmenty
- ; ----- przypisanie wartości poszczególnym segmentom wyświetlacza --------------
- ; a
- ; -
- ; f | g | b
- ; -
- ; e | | c
- ; - . h
- ; d
- a EQU 01h ; EQU - przypisuje stałą wartość do a
- b EQU 02h
- c EQU 10h
- d EQU 04h
- e EQU 80h
- f EQU 20h
- g EQU 08h
- h EQU 40h ;0x80
- ;_________________________________________________________
- ORG 0x1200 ;początek rezerwacji pamięci
- ;rezerwacja przestrzeni dla 16bitowych liczb typu int
- sekundy DC16 1
- minuty DC16 1
- godziny DC16 1
- ;_________________________________________________________
- ;============================================================================
- ; init_lcd
- ;============================================================================
- PUBLIC init_lcd ; Declare symbol to be exported
- RSEG CODE ; Code is relocatable
- init_lcd;
- MOV.B #0x7D,&LCDACTL ; ustawienia LCD ( tryb mux 4 oraz uruchomienie modułu ( LCDFREQ_128 | | LCDMX1 | LCDMX0 | LCDSON | LCDON ))
- MOV.B #0xFF,LCDAPCTL0 ; uruchomienie segnentów
- MOV.B #0,LCDAPCTL1 ; wylaczenie kolejnych segmentow LCD
- MOV.B #0x0008,LCDAVCTL0 ; wlaczenie wewnetrznego generatora ( LCDCPEN )
- MOV.B #0x03,LCDAVCTL1 ; wlaczenie ustawienie napięcia
- MOV.B #0x1C,&P5SEL ; ustawienienie pinow 2 3 i 4 z portu 5 na funkcje COMx
- MOV.B #0x1C,&P5DIR ; ustawienie pinow 2 3 i 4 z portu 5 jako wyjscia
- CLR R4
- CLR R5
- CLR R6
- CLR R7
- CLR R8
- CLR R9
- CLR R10
- CLR R11
- CLR R12
- CLR R13
- CLR R14
- CLR R15
- CLR sekundy
- CLR minuty
- CLR godziny
- ret
- ;============================================================================
- ; lcd_display_time
- ;============================================================================
- PUBLIC lcd_display_time ; Declare symbol to be exported
- RSEG CODE ; Code is relocatable
- lcd_display_time;
- CLR R4
- CLR R5
- CLR R6
- CLR R7
- CLR R8
- CLR R9
- CLR R10
- CLR R11
- ; CLR R12
- ; CLR R13
- ; CLR R14
- CLR R15
- CLR sekundy
- CLR minuty
- CLR godziny
- MOV R12,sekundy ; przeniesienie pierwszego argumentu funkcji z rejestru R12 do sekundy
- MOV R13,minuty ; przeniesienie drugiego argumentu funkcji z rejestru R13 do minuty
- MOV R14,godziny ; przeniesienie drugiego argumentu funkcji z rejestru R14 do godziny
- ; ********* blok przekształcający wartość dziesiętną w BCD, w celu wyświetlenia na LCD_A sekund *********
- dziesiec:
- CMP #0,sekundy
- JL dziesiec_petla ; skok do petli
- CMP #0xA,sekundy ; sprawdzenie czy sekundy większe od 10
- JGE dziesiec_petla ; jesli wynik wiekszy lub rowny 0 to skok do pętli
- JMP jeden ; skok do jeden
- dziesiec_petla:
- INC R4 ; inkrementacja R4
- SUB #0xA, sekundy ; odjecie 100 od wyniku
- JMP dziesiec ; skok bo może być kolejne 10
- jeden:
- MOV sekundy, R5 ; wpisanie sekundy do R5
- JMP wyswietl_wynik
- ; *******************************************************************************************************
- ; ********* blok przekształcający wartość dziesiętną w BCD, w celu wyświetlenia na LCD_A minut **********
- dziesiec_2:
- CMP #0,minuty
- JL dziesiec_petla_2 ; skok do petli
- CMP #0xA,minuty ; sprawdzenie czy minuty większe od 10
- JGE dziesiec_petla_2 ; jesli wynik wiekszy lub rowny 0 to skok do pętli
- JMP jeden_2 ; skok do jeden
- dziesiec_petla_2:
- INC R6 ; inkrementacja R6
- SUB #0xA,minuty ; odjecie 100 od wyniku
- JMP dziesiec_2 ; skok bo może być kolejne 10
- jeden_2:
- MOV minuty, R7 ; wpisanie minuty do R7
- JMP wyswietl_wynik_2
- ; *******************************************************************************************************
- ; ********* blok przekształcający wartość dziesiętną w BCD, w celu wyświetlenia na LCD_A godzin **********
- dziesiec_3:
- CMP #0,godziny
- JL dziesiec_petla_3 ; skok do petli
- CMP #0xA,godziny ; sprawdzenie czy godziny większe od 10
- JGE dziesiec_petla_3 ; jesli wynik wiekszy lub rowny 0 to skok do pętli
- JMP jeden_3 ; skok do jeden
- dziesiec_petla_3:
- INC R8 ; inkrementacja R8
- SUB #0xA,godziny ; odjecie 100 od wyniku
- JMP dziesiec_3 ; skok bo może być kolejne 10
- jeden_3:
- MOV godziny, R9 ; wpisanie godziny do R9
- JMP wyswietl_wynik_3
- ; *******************************************************************************************************
- wyswietl_wynik: ; wyświetlenie na ekranie LCD sekund
- MOV.B wysw(R4), LCDM2
- MOV.B wysw(R5), LCDM1
- MOV #10,R10
- MOV.B wysw(R10), LCDM5 ; wyświetlenie znaku 0xB8 'h'( dziesiąta pozycja w tabeli, dlatego do R10 wpisane jest 10 )
- JMP dziesiec_2 ; skok do przekształcenia minut z wartości dziesiętnej na BCD
- wyswietl_wynik_2: ; wyświetlenie na ekranie LCD minut
- MOV.B wysw(R6), LCDM4
- MOV.B wysw_2(R7), LCDM3
- JMP dziesiec_3
- wyswietl_wynik_3: ; wyświetlenie na ekranie LCD godzin
- MOV.B wysw(R9), LCDM7
- MOV.B wysw(R8), LCDM6
- RET
- ;----- utworzenie tablicy znaków LCD do wyświetlenia sekund -----------------------------------------------------------
- wysw: ; Przekształcenie wyniku na kod BCD możliwy do wyświetlenia
- DB a+b+c+d+e+f ;0 0B7h, DB - ośmio bitowa stała
- DB b+c ;1 012h
- DB a+b+d+e+g ;2 08Fh
- DB a+b+c+d+g ;3 01Fh
- DB b+c+f+g ;4 03Ah
- DB a+c+d+f+g ;5 03Dh
- DB a+c+d+e+f+g ;6 0BDh
- DB a+b+c+f ;7 013h
- DB a+b+c+d+e+f+g ;8 0BFh
- DB a+b+c+d+f+g ;9 03Fh
- DB 0xB8 ;h
- ;------------------------------------------------------------------------------------------------
- ;----- utworzenie tablicy znaków LCD do wyświetlenia minut -----------------------------------------------------------
- wysw_2: ; Przekształcenie wyniku na kod BCD możliwy do wyświetlenia
- DB 0xF7 ;0. DB - ośmio bitowa stała
- DB 0x52 ;1.
- DB 0xCF ;2.
- DB 0x5F ;3.
- DB 0x7A ;4.
- DB 0x7D ;5.
- DB 0xFD ;6.
- DB 0x53 ;7.
- DB 0xFF ;8.
- DB 0x7F ;9.
- ;------------------------------------------------------------------------------------------------
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement