Red de conocimientos turísticos - Conocimientos sobre calendario chino - Canción de programación musical de MCU "Little Star"

Canción de programación musical de MCU "Little Star"

Solo el programa de ensamblaje de sonido musical, sin agregar luces LED, como referencia.

El código de datos ha sido cambiado a la voz de Little Star

;******************************** **** ************

ORG 0000H

SJMP PRINCIPAL

ORG 0BH

AJMP TIME0

;******************Programa principal********************* ****

PRINCIPAL: MOV SP,#60

MOV TMOD,#01H ;Modo de trabajo de temporización T0

MOV IE,#82H ;Interrupción de CPU habilitado, interrupción T0 habilitada

START0: MOV 30H,#00H ;Puntero de dirección relativa TABLE

NEXT: MOV A,30H MOV DPTR,#TABLE ;Vaya ​​a TABLE para obtener la configuración simplificada ¿Código de notación musical? Código de ritmo

MOVC A,@A+DPTR

MOV R2,A ;¿El código de notación musical simplificado obtenido se almacena temporalmente en R2

JZ ENDF ;Obtiene 00 y final

ANL A,#0FH ;No, obtiene los cuatro dígitos inferiores del código de ritmo

MOV R5,A ;Guardar el código de ritmo en R5

MOV A, R2 ; ¿Código de notación musical simplificado en A

SWAP A ;Intercambiar los 4 bits altos con los 4 bajos bits

ANL A,#0FH ;Obtener el código de notación musical simple

JNZ SING ; Si el código de notación musical simplificada obtenido no es 0, entonces sonará

<; p> CLR TR0 ; Si es 0, no sonará

SJMP DLY1 ; Subrutina de retardo de ritmo (seguida de El código de ritmo cambia y el tiempo de retardo es diferente)

;- --------------Voz----------------- ------

CANTAR: DEC A ; ¿El código de notación musical simplificada obtenido se reduce en 1?

;(La primera dirección del almacenamiento de datos de 16 bits del valor de recuento del código de notación musical simplificada es de la TABLA1

MOV 22H,A; Almacena en (22H)

RL A; Multiplica por 2 porque los datos tomados ocupan dos bytes (16 bits)

;Por lo tanto, el incremento del puntero debe multiplicarse por 2

MOV DPTR,#TABLE1

;..... El código de notación musical simplificada se convierte en el correspondiente 16- valor de recuento de bits del temporizador.......

MOVC A,@A+DPTR Vaya a la TABLA1 para obtener el valor de recuento de bytes alto correspondiente

MOV TH0,A ; El valor de recuento de bytes alto se almacena en TH0 y (21H)

MOV 21H,A

MOV A,22H Resto de 1 código de notación musical simplificado; para A

RL A ;Multiplique por 2 porque los datos recuperados ocupan dos bytes (16 bits)

;Por lo tanto, el incremento del puntero debe multiplicarse por 2

INC A ;A incrementa el siguiente valor de conteo de bytes

;.....convierte el código de notación musical simplificada al valor de conteo de 16 bits correspondiente del temporizador..... .....

MOVC A,@A+DPTR ;Vaya ​​a la TABLA1 para obtener el valor de recuento de bytes bajo correspondiente

MOV TL0,A ;El valor de recuento de bytes bajo se almacena en TL0 y (20H )

MOV 20H,A

SETB TR0 ; Inicia el temporizador T0 para permitir que el altavoz emita sonidos de diferentes frecuencias

;------ - ---------Retraso del ritmo-----------------

DLY1: ACALL DELAY; El tiempo de la unidad básica es 1/4 Take 187ms

INC 30H; ¿Anotar el siguiente código de notación musical simplificado?

Código de ritmo

SJMP NEXT

;---------------La canción termina------------ - --

ENDF: CLR TR0 ;Cerrar temporizador T0

AJMP START0 ;Repetir bucle

;****Subrutina de interrupción T0 (utilizada para controlar el altavoz para emitir sonidos de diferentes frecuencias)***************

TIME0: PUSH ACC

PUSH PSW

MOV TL0 ,20H ;Reinstalar valor de recuento

MOV TH0,21H

CPL P3.7 ;Sonido del controlador

POP PSW

POP ACC

RETI

;******************retardo de latido 187ms*********** ** **************

RETARDO: MOV R7,#187;subrutina de retardo de 187 ms

DLY2: MOV R4,#02

DLY3: MOV R3,#248

DJNZ R3,$

DJNZ R4,DLY3

DJNZ R7,DLY2

DJNZ R5,DELAY

RET

;*******Nota la tabla de valores T (utilizada para hacer que el temporizador emita diferentes frecuencias)**DW significa que un valor de conteo ocupa dos bytes de unidad de almacenamiento ***************

TABLA1: DW 64260,64400,64524,64580,64684 Bajo SO Bajo LA Bajo SI ?/Medio DO Medio; ¿RE?

DW 64777, 64820, 64898, 64968, 65030; Medio MI Medio FA Medio SO Medio LA Medio SI

DW 65058,65110,65157,65178,65217;Agudos DO , agudos RE, agudos MI, agudos FA, agudos SO

;************ ¿Código de notación musical simplificado? Código de ritmo (código de notación musical simple de 4 dígitos alto, bajo). código de ritmo de 4 dígitos)******************

TABLA: DB 44H,44H,84H,84H ? >

DB 094H,094H,88h;

DB 74H,74H,63H,63H; ?4 4 3 3?

DB 52H,52H,48h; ?2 2 1 -

DB 84H,84H,74H,74H

DB 64H,64H,58h?; p> DB 84H, 84H, 74H, 74H; DB 44H, 44H, 84H, 84H; 1 5 5

p>

DB 094H,094H,88h?; ?4 4 3 3?

>

DB 52H, 52H,48h?; ?2 2 1-

FIN

Se agregaron luces LED, el nivel es limitado, el efecto no es muy bueno

;**** ****************************************

ORG 0000H

SJMP PRINCIPAL

ORG 0BH

AJMP TIME0

;******************Programa principal************************

PRINCIPAL: MOV SP,#60

MOV TMOD,#01H ;TO modo de trabajo de sincronización

MOV IE,#82H ;Interrupción de CPU habilitada, interrupción TO habilitada

START0: MOV 30H,#00H ;Puntero de dirección relativa TABLE

NEXT: MOV A,30H MOV DPTR,#TABLE ;¿Ir a TABLE para obtener el código de notación musical simplificado?

MOVC A ,@A+DPTR

MOV R2,A ;¿El código de notación musical simple obtenido? El código de ritmo se almacena temporalmente en R2

JZ ENDF. ;Obtenga 00 y finalice

ANL A,#0FH ;No, tome los cuatro dígitos inferiores del código de ritmo

MOV R5,A ;Guarde el código de ritmo en R5

MOV A ,R2 ;¿Código de notación musical simplificado? Código de ritmo para A

SWAP A ;Intercambia los 4 bits altos con los 4 bits bajos

ANL A,#0FH ;Obtener el código de notación musical simple

JNZ SING; Si el código de notación musical simplificada obtenido no es 0, sonará.

CLR TR0; es 0, no sonará.

SJMP DLY1; subrutina de retardo de ritmo (con los cambios de código de ritmo, el tiempo de retardo es diferente)

;-------- -------Sonido------------------ ----

SING: DEC A ;El código de notación musical simplificada obtenido se reduce por 1?

(La primera dirección del almacenamiento de datos de 16 bits del valor de recuento del código de notación musical simplificada es de la TABLA1 "dirección relativa" 0. Comienza a colocarse al principio, por lo que es necesario a restar por 1)

MOV 22H,A; almacenar en (22H)

RL A; multiplicar por 2 porque los datos tomados ocupan dos bytes (16 bits)

;Por lo tanto, el incremento del puntero debe multiplicarse por 2

MOV DPTR,#TABLE1

;..........Código de notación musical simplificado Convertir a el valor de recuento de 16 bits del temporizador correspondiente.......

MOVC A,@A+DPTR Vaya a TABLA1 para obtener el valor de recuento de bytes alto correspondiente

MOV TH0,A ; El valor de recuento de bytes alto se almacena en TH0 y (21H)

MOV 21H,A

MOV A,22H ; Dale A

RL A ;Multiplica por 2 porque los datos tomados ocupan dos bytes (16 bits)

;Por lo tanto, el incremento del puntero debe multiplicarse por 2

INC A ;A Aumenta y recupera el siguiente valor de conteo de bytes

;..........convierte el código de notación musical simplificada al valor de conteo de 16 bits correspondiente del temporizador... ....... ...

MOVC A,@A+DPTR ;Vaya ​​a la TABLA1 para obtener el valor de recuento de bytes bajo correspondiente

MOV TL0,A ;El valor bajo El valor del recuento de bytes se almacena en TL0 y (20H) en

MOV 20H,A

SETB TR0; inicia el temporizador T0 para permitir que el altavoz emita sonidos de diferentes frecuencias.

;-------- -------Retraso del compás-------------------

DLY1: ACALL DELAY; El tiempo de la unidad básica es 1/4 de tiempo 187 ms

INC 30H; ¿Eliminar el siguiente código de notación musical simplificado?

¿La luz LED CPL P1.0 parpadea? >

¿CPL P1.1?

CPL P1.2

CPL P1.3

CPL P1.4

CPL P1.5

CPL P1.6

CPL

P1.7

SJMP NEXT

;---------------La canción termina---------- -- --

ENDF: CLR TR0 ;Cerrar temporizador T0

AJMP START0 ;Bucle repetidamente

;****Subrutina de interrupción T0 (utilizada para controlar los altavoces para emitir sonidos de diferentes frecuencias)***************

TIME0: PUSH ACC

PUSH PSW

MOV TL0 ,20H ;Reinstalar valor de recuento

MOV TH0,21H

CPL P3.7 ;Sonido del controlador

POP PSW

POP ACC

RETI

;******************retardo de latido 187ms************** **** *******************

RETARDO: MOV R7,#187; subrutina de retraso de 187 ms

DLY2: MOV R4,# 02

DLY3: MOV R3,#248

DJNZ R3,$

DJNZ R4,DLY3

DJNZ R7 ,DLY2

p>

DJNZ R5,DELAY

RET

;*******Nota la tabla de valores T (utilizada para hacer que el temporizador emita diferentes frecuencias)**DW Indica que un valor de conteo ocupa dos bytes de la unidad de almacenamiento ***************

TABLA1: DW 64260,64400,64524,64580,64684 ; Bajo SO Bajo LA Bajo SI ?/Rango medio DO ¿Rango medio RE?

DW 64777, 64820, 64898, 64968, 65030;Rango medio MI,Rango medio FA,Rango medio SO,Rango medio LA,Rango medio SI

DW 65058,65110,65157,65178,65217;Agudos DO, agudos RE, agudos MI, agudos FA, agudos SO

;************ Musical simplificado código de notación? código de ritmo (código de notación musical simple de dígitos altos, código de ritmo de dígitos bajos)************

TABLA: DB 44H,44H,84H,84H ? 1 5 5

DB 094H,094H ,88h; - - significa que hay un ritmo

DB 74H,74H,63H,63H; /p>

DB 52H,52H,48h; ?2 2 1-

DB 84H,84H,74H,74H;

DB 64H,64H; 58h 3 3 2-

DB 84H, 84H,74H,74H ; > DB 44H, 44H, 84H, 84H ;

DB 74H, 74H, 63H, 63H ? 4 4 3 3?

DB 52H,52H ,48h ?2 2 1-

FIN