Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;************************************************
- ;LEKCJA 6 - WYŚWIETLACZ 7-SEGMENTOWY
- ;PRZYKŁAD 3 - PRZEGLĄDANIE WYŚWIETLACZA
- ;************************************************
- B2R7 EQU 23
- SEG_ON EQU P1.6 ;włączenie wyświetlacza 7-segm.
- KEY EQU P3.5
- ;Stałe używane w programie
- ONE EQU 006H ;kod cyfry 1
- TWO EQU 05BH ;kod cyfry 2
- THREE EQU 04FH ;kod cyfry 3
- FOUR EQU 066H ;kod cyfry 4
- FIVE EQU 06DH ;kod cyfry 5
- SIX EQU 07DH ;kod cyfry 6
- SEVEN EQU 007H ;kod cyfry 7
- ;Pamięć wewnętrzna RAM
- DISPLAY EQU 30H
- KEY_LAST EQU DISPLAY+6
- ;**************************************
- LJMP START
- ORG 0BH
- LJMP INT_T0
- ORG 100H
- START:
- MOV TMOD,#1
- SETB RS0
- MOV R7,#20
- CLR RS0
- MOV B2R7,#20
- MOV TL0,#00H
- MOV TH0,#4CH
- SETB EA
- SETB ET0
- SETB TR0
- MOV DISPLAY,#0 ;wpisz kody cyfr
- MOV DISPLAY+1,#0 ;dla kolejnych
- MOV DISPLAY+2,#0 ;wskaźników
- MOV DISPLAY+3,#0
- MOV DISPLAY+4,#0
- MOV DISPLAY+5,#0
- MOV DISPLAY+6,#SEVEN
- MOV R4,#142
- MOV SP,#DISPLAY+6
- LOOP_DISP: ;ustawienie danych do
- ;wyświetlania na 1-szym
- ;wskaźniku
- MOV R0,#DISPLAY ;adres pobierania kodów
- MOV R2,#6 ;licznik-il. wskaźników
- MOV R3,#00000001B ;wybór wskaźnika
- ;-kod 1 z 8
- LOOP:
- SETB SEG_ON ;wyłącz poprzedni
- ;wskaźnik
- MOV R1,#CSDS ;adres wyboru wskaźnika
- MOV A,R3 ;aktualny wskaźnik (1z8)
- MOVX @R1,A ;wpisz nr wskaźnika
- ;RL A ;obrót w lewo - numer
- ;MOV R3,A ;następnego wskaźnika
- ;(kod 1 z 8)
- MOV R1,#CSDB ;adres danych wskaźnika
- MOV A,@R0 ;kod aktualnego wskaźnika
- LCALL GET_COD7
- CJNE R3, #00000100B,OMIN
- SETB ACC.7
- OMIN:
- CJNE R3, #00010000B,OMIN1
- SETB ACC.7
- OMIN1:
- MOVX @R1,A ;wpisz kod segmentów
- ;INC R0 ;adres pobierania kodu
- ;dla następnego wskaźnika
- CLR SEG_ON ;włączenie wskaźnika
- MOV C,KEY ;wstępny odczyt klawisza
- MOV A,#1 ;odczekanie 1ms-świecenie
- LCALL DELAY_MS ;jednego wskaźnika
- JC KEY_ON ;kontrola jednoznaczności
- JB KEY,KEY_END ;odczytu klawisza
- KEY_OFF:
- MOV A,R3 ;klawisz zwolniony
- CPL A
- ANL KEY_LAST,A ;zeruj odpowiedni bit
- SJMP KEY_END
- KEY_ON:
- JNB KEY,KEY_END
- MOV A,R3 ;klawisz naciśnięty
- ANL A,KEY_LAST
- JNZ KEY_END ;klawisz był naciśnięty
- ;bez reakcji
- MOV A,R3 ;klawisz był zwolniony
- ORL KEY_LAST,A ;ustaw odpowiedni bit
- INC @R0 ;zwiększ licznik
- ;naciśnięć - liczbę na
- ;odpowiednim wskaźniku
- KEY_END:
- MOV A,R3
- RL A ;numeru następnego
- MOV R3,A ;wskaźnika (kod 1 z 8)
- INC R0 ;adres danych następnego
- ;wskaźnika
- DJNZ R2,LOOP ;kolejne świecenie
- ;siedmiu wskaźników
- DJNZ R4,LOOP_DISP
- MOV R4,142
- CPL P1.7
- SJMP LOOP_DISP ;zacznij od wskaźnika 1
- INT_T0:
- SETB RS0
- ORL TL0,#00H
- MOV TH0,#4CH
- DJNZ R7,EXIT
- MOV R7,#20
- CPL P1.7
- MOV R0,#DISPLAY ;jednostki sekund
- INC @R0
- CJNE @R0,#10,EXIT
- MOV @R0,#0
- INC R0 ;dziesiątki sekund
- INC @R0
- CJNE @R0,#6,EXIT
- MOV @R0,#0
- INC R0 ;jednostki minut
- INC @R0
- CJNE @R0,#10,EXIT
- MOV @R0,#0
- INC R0 ;dziesiątki minut
- INC @R0
- CJNE @R0,#6,EXIT
- MOV @R0,#0
- ;---------------------------------------------
- INC R0
- INC @R0 ;zliczanie jednostek godzin
- CJNE @R0,#4,DALEJ ;W DISPLAY+4
- MOV R5,DISPLAY+5
- CJNE R5,#2,DALEJ
- SJMP GODZ_00
- DALEJ:
- CJNE @R0,#10,EXIT
- MOV @R0,#0
- ;---------------------------------------------
- INC R0
- INC @R0 ;zliczanie dziesiatek godzin
- ;CJNE @R0,#3,EXIT ;W DISPLAY+5
- SJMP EXIT
- GODZ_00:
- CLR A ;nadejscie godziny 00.00.00
- MOV DISPLAY,A
- MOV DISPLAY+1,A
- MOV DISPLAY+2,A
- MOV DISPLAY+3,A
- MOV DISPLAY+4,A
- MOV DISPLAY+5,A
- ;---------------------------------------------
- EXIT:
- CLR RS0
- RETI
- ;**************************************
- ;Podprogram zamienia cyfrę na kod 7-segmentowy
- GET_COD7:
- ANL A,#0FH ;tabela kodów 0..15
- INC A ;pomiń rozkaz RET
- MOVC A,@A+PC ;pobierz kod
- RET
- COD_7SEG:
- DB 03FH ;kod znaku 0
- DB 006H ;kod znaku 1
- DB 05BH ;kod znaku 2
- DB 04FH ;kod znaku 3
- DB 066H ;kod znaku 4
- DB 06DH ;kod znaku 5
- DB 07DH ;kod znaku 6
- DB 007H ;kod znaku 7
- DB 07FH ;kod znaku 8
- DB 06FH ;kod znaku 9
- ;DB 077H ;kod znaku A
- ;DB 07CH ;kod znaku b
- ;DB 039H ;kod znaku C
- ;DB 05EH ;kod znaku d
- ;DB 079H ;kod znaku E
- ;DB 071H ;kod znaku F
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement