;************************************************
;Zegarek
;************************************************
SEG_ON EQU P1.6 ;włączenie wyświetlacza.
;Lista cyfr:
ZERO EQU 0111111B ;kod cyfry 0
ONE EQU 0000110B ;kod cyfry 1
TWO EQU 1011011B ;kod cyfry 2
THREE EQU 1001111B ;kod cyfry 3
FOUR EQU 1100110B ;kod cyfry 4
FIVE EQU 1101101B ;kod cyfry 5
SIX EQU 1111101B ;kod cyfry 6
SEVEN EQU 0000111B ;kod cyfry 7
EIGHT EQU 1111111B ;kod cyfry 8
NINE EQU 1101111B ;kod cyfry 9
DOT EQU 10000000B ;kod kropki
;Pamięć wewnętrzna RAM
DISPLAY EQU 30H
;**************************************
LJMP START
ORG 100H
START:
MOV DISPLAY,#SIX
MOV DISPLAY+1,#FIVE
MOV DISPLAY+2,#FOUR + DOT
MOV DISPLAY+3,#THREE ;wskaźniki
MOV DISPLAY+4,#ZERO + DOT ;dla kolejnych
MOV DISPLAY+5,#ONE ;wpisz kody cyfr
LOOP_DISP: ;ustawienie danych do
;wyświetlania na 1-szym
;wskaźniku
MOV R0,#DISPLAY ;adres pobierania kodów
MOV R2,#7 ;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
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
DJNZ R2,LOOP ;kolejne świecenie
;siedmiu wskaźników
SJMP LOOP_DISP ;zacznij od wskaźnika 1