Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LJMP START
- ORG 000BH
- MOV TH0, #88H
- MOV TL0, #00H
- DEC R0
- RETI
- LCDstatus equ 0FF2EH
- LCDControl equ 0FF2CH
- LCDdataWR equ 0FF2DH
- #define HOME 0x80
- #define INITDISP 0x38
- #define HOM2 0xc0
- #define LCDON 0x0e
- #define CLEAR 0x01
- P5 EQU 0F8H
- P7 EQU 0DBH
- ORG 0100H
- LCDcntrlWR MACRO x
- LOCAL loop
- loop: MOV DPTR,#LCDstatus
- MOVX A,@DPTR
- JB ACC.7,loop
- MOV DPTR,#LCDcontrol
- MOV A,x
- MOVX @DPTR,A
- ENDM
- LCDcharWR MACRO
- LOCAL tutu
- PUSH ACC
- tutu: MOV DPTR,#LCDstatus
- MOVX A,@DPTR
- JB ACC.7, tutu
- MOV DPTR,#LCDdataWR
- POP ACC
- MOVX @DPTR,A
- ENDM
- init_LCD MACRO
- LCDcntrlWR #INITDISP
- LCDcntrlWR #CLEAR
- LCDcntrlWR #LCDON
- ENDM
- START:
- MOV DPTR,#8000H
- MOV A,#'0'
- MOVX @DPTR,A
- MOV DPTR,#8001H
- MOV A,#'1'
- MOVX @DPTR,A
- MOV DPTR,#8002H
- MOV A,#'2'
- MOVX @DPTR,A
- MOV DPTR,#8003H
- MOV A,#'3'
- MOVX @DPTR,A
- MOV DPTR,#8004H
- MOV A,#'4'
- MOVX @DPTR,A
- MOV DPTR,#8005H
- MOV A,#'5'
- MOVX @DPTR,A
- MOV DPTR,#8006H
- MOV A,#'6'
- MOVX @DPTR,A
- MOV DPTR,#8007H
- MOV A,#'7'
- MOVX @DPTR,A
- MOV DPTR,#8008H
- MOV A,#'8'
- MOVX @DPTR,A
- MOV DPTR,#8009H
- MOV A,#'9'
- MOVX @DPTR,A
- init_LCD
- MOV TMOD, #01H
- MOV TH0, #8CH
- MOV TL0, #00H
- SETB TR0
- MOV IE, #82H
- ;MOV A, #00H
- ;MOV P1, A
- MOV B, #00H
- MOV R3, #00H
- MOV R4, #0AH
- MOV R5, #00H
- MOV R6, #00H
- DALEJ:
- MOV R0, #20H ;odmierza 32 odliczenia czasu ~sekunde
- CZEKAM:
- MOV A, R0 ;jak odmierzy, to przechodzi dalej
- JNZ CZEKAM
- init_LCD ;zeruje wyswietlacz
- MOV A, R6
- MOV DPH, #80H
- MOV DPL, A
- MOVX A,@DPTR
- LCDcharWR
- MOV A, ':'
- LCDcharWR
- MOV B, R5 ;przypisujemy wartosc z R5 do B
- MOV A, R3 ;przypisujemy wartosc z R3 do A zeby wyswietlic odpowiednia cyfre
- MOV DPH, #80H
- MOV DPL, A ;ustawiamy DPTR na odpowiednia wartosc
- MOVX A,@DPTR ;odczytujemy z DPTR'a odpowiednia cyfre do wyswietlenia
- LCDcharWR ;drukujemy cyfre dla dziesiatek sekund
- JMP CONTINUE
- DALEJ2:
- JMP DALEJ
- CONTINUE:
- MOV DPH, #80H
- MOV DPL, B ;ustawiamy DPTR na odpowiednia cyfre do odczytania dla B
- MOVX A,@DPTR
- LCDcharWR ;drukujemy cyfre dla sekund
- CJNE R6, #02H, ELO3 ;sprawdza, czy wartosc R6 jest równa 2. Jesli tak to wychodzi z programu, bo odliczyl 2 minuty
- JMP EXIT
- ELO3:
- INC B ;inkrementuje B (B jest cyfra dla sekund)
- MOV R5, B ;przerzuca B do rejestru R5
- CJNE R5, #0AH, ELO ;sprawdza, czy wartosc B jest równa 10. Jesli tak to inkrementuje R3 (R3 odpowiada za cyfre dziesiatek sekund)
- INC R3
- MOV R5, #00H ;po inkrementacji R3, zeruje R5, które potem przypiszemy do B
- ELO:
- CJNE R3, #06H, ELO2 ;sprawdza, czy wartosc R3 jest równa 6. Jesli tak to inkrementuje R6 (R6 odpowiada za cyfre minut)
- INC R6
- MOV R3, #00H ;po inkrementacji R6, zeruje R3
- ELO2:
- MOV R1, #7FH ;\
- MOV A, R1 ; |
- MOV P5, A ; \
- MOV A, P7 ; |
- ANL A, R1 ; >>> sprawdza, czy nie nacisnelismy czegosc z pierwszej kolumny, jesli tak, to resetuje licznik
- MOV R2, A ; |
- CLR C ; /
- SUBB A, R1 ; |
- JZ DALEJ2 ;/
- MOV B, #00H
- MOV R3, #00H
- MOV R6, #00H
- JMP DALEJ2
- EXIT:
- NOP
- NOP
- NOP
- JMP $
- END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement