Diseño del curso de cronómetro MCU, ¡urgente! ! ! !
El diagrama esquemático es el siguiente,
el programa es el siguiente:
===============; ====== ============================
; p>; === ======================= ===================== ==
LED_BUF EQU 50H; Mostrar datos primera dirección
COUNTER_INT EQU 3BH; Contador de interrupciones
SEGUNDA EQU 3DH; ===== ============== ==============================
;Definición constante
================================== ===== =========== CN_COUNT_INT ?EQU ?100 ;10ms * 100 = 1S SET_MODEL EQU 0FFH ;Modo de decodificación completa SET_BRIGHT EQU 04H ;Ciclo de trabajo 15/32 ;Brillo de pantalla ;SET_LIMIT EQU 01H ;Modo de visualización de 2 bits; SET_NORMAL EQU 01H; Modo de prueba SET_ START EQU 01H; ¿Ingresar al modo de funcionamiento de inicio?
;================= ===== ===========================
;Definición de asignación de PIN
=== =============================================== m7219_DIN BIT P3.0 m7219_LOAD BIT P3.1 m7219_CLK BIT P3.2 KEYSTART BIT P1.0 KEYRESET BIT P1.1
; ================== === =======================
; simular el programa principal
; === ===================================
org 0000h
ajmp principal
ORG 000BH
LJMP Timer0Interrupt
org 0030h
principal:?
MOV SP, #70H
lcall Init_M7219
lcall InitTimer0
MOV SEGUNDO, #95H?;
Bucle:
CALL disp
key_reset:
SETB KEYRESET
JB KEYRESET, key_start
; RETRASO
NOP
NOP
NOP
MOV SEGUNDO, #95H ?p>
<p> NOP
JB KEYRESET, key_start
JNB KEYRESET, $
CLR ?TR0
MOV A, #0
MOV SEGUNDO, A
MOV led_buf, A
MOV LED_BUF 1, A
JMP key_SCAN_END
key_start:
SETB KEYSTART
JB KEYSTART, key_SCAN_END
DELAY
NOP
NOP
NOP
JB KEYSTART, key_SCAN_END
JNB KEYSTART, $
SETB ?TR0
key_SCAN_END:
Bucle JMP
; ========== ============================== ===
InitTimer0:; interrupción de 10 ms
MOV TMOD, #01H
MOV TH0, #0D8H
MOV TL0, # 0F0H
SETB EA
SETB ET0
RET
;=============== = ============================
Temporizador0Interrupción:
PUSH DPH
PUSH DPL
PUSH ACC
MOV TH0, #0D8H
MOV TL0, #0F0H
; ====================
INC COUNTER_INT
MOV ?A, COUNTER_INT; 10ms COUNTER_INT, #0 p >
MOV ?COUNTER_INT, #0
MOV A, SEGUNDO
CJNE ?A, #99H, Timer0Int_sec
CJNE ?A, #99H , Temporizador0Int_sec
CLR TR TR, #99H, Temporizador0Int_sec
CJNE ?A, #99H, Temporizador0Int_sec
CJNE ?A, #99H, Temporizador0Int_sec
CLR TR0; desactivar el tiempo
JMP Timer0Interrupt_EXIT?
Timer0Int_sec:
¿AÑADIR A, #01; segundos más 1?
DA A
MOV ?SECOND, A
SWAP A
ANL A, #0fH
MOV led_buf, A
MOV A, SEGUNDO
ANL A, #0FH
MOV LED _BUF 1, A
;= =======================
Timer0Interrupt_EXIT
:
POP ACC
POP DPL
POP DPH
RETI
==== == ===============================================
; función: Init_M7219; Inicializar max719
; entrada: ------------
; -- ?
; Uso: a, b
; ========================== ==========================
Init_M7219: ;Inicializar Max7219
MOV a, # 0bh ?;establecer límite de escaneo
MOV b,#set_limit;establecer número de bits
lcall w_7219
MOV a,#09h ?establecer modo de decodificación
MOV b, #set_model; 00h modo sin decodificación; ffh es el modo de decodificación BCD
lcall w_7219
MOV a, #0ah?
MOV b, #set_bright; brillo 15/32
lcall w_7219
MOV a, #0fh ?Establecer modo de trabajo
MOV b, #set_normal ;Modo de funcionamiento normal
lcall w_7219
MOV a, #0ch ?; Entrar en modo de inicio
MOV b, #set_start
lcall ?w_7219
RET
; ================================ ===================
; función: disp? función: mostrar subrutina
; /p>
; salida: -----------
; uso: r0, r3, r4, a, b
; ============================================== === p>
disp:
MOV r0, #led_buf
MOV r4, #01h
MOV r3, #set_limit
INC r3
disp1:
MOV a, @r0
MOV b, a
MOV a, r4
lcall w_7219
INC r0
INC r4
djnz r3, disp1
RET?
===================================== ========= = ====
; Función: w_7219; Controlador de pantalla;
;
?Transmitir la dirección de 7219
; b ?Transmitir los datos de 7219
; >; Uso: a, r2
; =================================== ==== ===============
w_7219.
CLR M7219_clk
CLR M7219_din
CLR ?M7219_load; set load=0
lcall ?sd_7219 ?Transmitir la dirección de 7219
MOV a, b?
lcall sd_7219 ?Transmitir datos
setb M7219_load ?; carga de datos
CLR M7219_din
RET
============ ==== =================================
; transmitir datos o subrutina de dirección a 7219
; entrada: a
; salida: max7219
; === =================================================
sd_7219: ? ; Enviar dirección o datos al 7219
MOV r2, #08h ?
c_sd: ?
CLR C
CLR M7219_clk
RLC a
MOV M7219_din, c; preparar datos
NOP
setb M7219_clk; datos sobre el flanco ascendente
NOP
NOP
NOP
CLR M7219_clk
djnz r2, c_sd p>
FINALIZAR RET