¡Diseño del curso de cronómetro MCU, se necesita con urgencia! ! ! !
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 completo SET_BRIGHT EQU 04H; 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
=================== === ======================
Programa principal de simulación
; === ==================================
org 0000h
ajmp principal
ORG 000BH
LJMP Timer0Interrupt
org 0030h
principal:?
mov sp, #70h
lcall Init_M7219
lcall InitTimer0
; MOV SEGUNDO, #95H?; p>Bucle:
CALL disp
key_reset:
SETB KEYRESET
JB KEYRESET, key_start
; DELAY
p>NOP
NOP
NOP
JB KEYRESET, key_start
JNB KEYRESET, $
CLR ?TR0
MOV A, #0
MOV SEC
OND, 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
============================================< / p>
InitTimer0:; interrumpir una vez cada 10ms
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 el valor del recuento aumenta en 1 en 10 ms
CJNE ?A, #CN_COUNT_INT, Timer0Interrupt_EXIT
MOV ?COUNTER_INT, #0
MOV A, SEGUNDO
CJNE ?A, #99H, Timer0Int_sec
CLR TR0; desactivar el tiempo
JMP Timer0Interrupt_EXIT
Timer0Int_sec:
AGREGAR A, #01; ?
DA A
MOV ?SEGUNDO, A
INTERCAMBIO 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
;===================== ======== ==========================
; inicializar max719
; p><p>; entrada: ------------
; salida: ---------- ?
; b
; ========================================= ===========
Init_M7219: ?Inicializar Max7219
MOV a, #0bh ?;Establecer límite de escaneo
MOV b , #set_limit; establece el número de bits
lcall w_7219
MOV a, #09h?; establece el modo de decodificación
MOV b, #set_model 00h; no es el modo de código traducido; ffh es el modo de decodificación BCD
lcall w_7219
MOV a, #0ah?; Establecer brillo
MOV b, #set_bright 15; /32 Brillo
lcall w_7219
MOV a, #0fh ?; Establecer modo de trabajo
MOV b, #set_normal modo de trabajo
<; p> lcall w_7219MOV a, #0ch ?; Ingresar al modo de inicio
MOV b, #set_start
lcall ?w_7219
=========================================== =========
; función: disp?; mostrar subrutina
; entrada: r0
; ------
; uso: r0, r3, r4, a, b
; ================ = ==================================
disp:
MOV r0, #led_buf
MOV r4, #01h
MOV r3, #set_limit
INC r3
disp1:
p>MOV a, @r0
MOV b, a
MOV a, r4
lcall w_7219
INC r0
INC r4
djnz r3, disp1
RET?
============ = ======================================
; ; controlador de pantalla;
; entrada: a ?; transmitir la dirección de 7219
; transmitir los datos de 7219
; ----------
; uso: a, r2
================== == ================================
w_7219:
CLR M7219_clk
CLR M7219_din
CLR ?M7219_load; establecer carga=0
lcall ?sd_721
9?;Transferir la dirección de 7219
MOV a, b?
lcall sd_7219?;Transmitir datos
setb M7219_load?;Carga de datos
CLR M7219_din
RET
============================= === ===================
; función: sd_7219?; Subrutina para transmitir datos o dirección a 7219
; entrada: a
; salida: ? max7219
; uso: ? a, r2
; === ===================================
sd_7219: ?; dirección al 7219 o datos
MOV r2, #08h ?
c_sd:?
CLR C
CLR M7219_clk
RLC a
MOV M7219_din, c; preparar datos
NOP
setb M7219_clk en flanco ascendente
NOP
p>NOP
CLR M7219_clk
djnz r2,c_sd
RET END