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.
- ;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
- ;**************************************
- LJMP START
- ORG 0BH
- LJMP INT_T0
- ORG 100H
- START:
- MOV TMOD,#1
- SETB RS1
- MOV R7,#20
- MOV B2R7,#20
- CLR RS1
- MOV TL0,#00H
- MOV TH0,#4CH
- SETB EA
- SETB ET0
- SETB TR0
- MOV DISPLAY,#7 ;wpisz kody cyfr
- MOV DISPLAY+1,#5 ;dla kolejnych
- MOV DISPLAY+2,#9 ;wskaźników
- MOV DISPLAY+3,#5
- MOV DISPLAY+4,#3
- MOV DISPLAY+5,#2
- MOV DISPLAY+6,#SEVEN
- MOV SP,#DISPLAY+6
- 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, #00001000B,OMIN
- SETB ACC.7
- OMIN:
- CJNE R3, #00001000B,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 A,#1 ;czas 1ms - świecenie
- LCALL DELAY_MS ;jednego wskaźnika
- DJNZ R2,LOOP ;kolejne świecenie
- DJNZ R4, LOOP_DISP
- MOV R4, 142
- CPL P1.7
- ;siedmiu wskaźników
- SJMP LOOP_DISP ;zacznij od wskaźnika 1
- INT_T0:
- SETB RS1
- ORL TL0,#00H
- MOV TH0,#4CH
- DJNZ R7,EXIT
- MOV R7,#20
- CPL P1.7
- MOV R0,#DISPLAY
- INC @R0
- CJNE @R0,#10,EXIT
- MOV @R0,#0
- INC R0
- INC @R0
- ;------------------------------------------------------------------------------
- INC R0
- INC @R0
- CJNE @R0,#4,DALEJ
- MOV R5,DISPLAY+5
- CJNE R5,#12,DALEJ
- SJMP GODZ_00
- DALEJ:
- CJNE @R0,#10,EXIT
- MOV @R0,#0
- ;-------------------------------------------------------------------------------
- INC R0
- INC @R0
- ;CJNE @R0,#3,EXIT
- SJMP EXIT
- GODZ_00:
- CLR A
- 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 RS1
- 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