Diseño de teclado electrónico de caja experimental de principio de microcomputadora, utilizando 8254,8255
Apéndice 1: Tabla de frecuencias musicales con oscilador de cristal de 12M
Frecuencia de notas (Hz) Código de notación simplificada (valor T)
Baja 1DO 262 63628 TH0=F7H TL0 =24H
#1DO# 277 63731 TH0=F8H TL0=F3H
Baja 2RE 294 63835 TH0=F9H TL0=5BH
#2RE# 311 63928 TH0 =F9H TL0=B8H
Bajo 3M 330 64021 TH0=FAH TL0=15H
Bajo 4FA 349 64103 TH0=FAH TL0=67H
#4FA# 370 64185 TH0=FAH TL0=B9H
Bajo 5SO 392 64260 TH0=FBH TL0=04H
#5SO# 415 64331 TH0=FBH TL0=4BH
Baja 6LA 440 64400 TH0=FBH TL0=90H
#6 466 64463 TH0=FBH TL0=CFH
Baja 7SI 494 64524 TH0=FCH TL0=0CH
1DO 523 64580 TH0=FCH TL0=44H
#1DO# 554 64633 TH0=FCH TL0=79H
2RE 587 64684 TH0=FCH TL0=ACH
#2RE# 622 64732 TH0=FCH TL0=DCH
中3M 659 64777 TH0=FDH TL0=09H
中4FA 698 64820 TH0=FDH TL0=34H
#4FA# 740 64860 TH0=FDH TL0=5CH
中5SO 784 64898 TH0=FDH TL0=82H
#5SO# 831 64934 TH0=FDH TL0=A6H
中6LA 880 64968 TH0=FDH TL0=C8H
#6 932 64994 TH0=FDH TL0=E2H
中7SI 988 65030 TH0=FEH TL0= 06H
Alta 1DO 1046 65058 TH0=FEH TL0=22H
#1DO# 1109 65085 TH0=FEH TL0=3DH
Alta 2RE 1175 65110 TH0=FEH TL0 =56H
#2RE# 1245 6513
4 TH0=FEH TL0=6EH
Alta 3M 1318 65157 TH0=FEH TL0=85H
Alta 4FA 1397 65178 TH0=FEH TL0=9AH
#4FA # 1480 65198 TH0=FEH TL0=AEH
高5SO 1568 65217 TH0=FEH TL0=C1H
#5SO# 1661 65235 TH0=FEH TL0=D3H
Alta 6LA 1760 65252 TH0=FEH TL0=E4H
#6 1865 65268 TH0=FEH TL0=F4H
Alta 7SI 1967 65283 TH0=FFH TL0=03H
El resto está representado por TH0=FFH, TL0=FFH
Apéndice 2: información relacionada con la pantalla LCD
La dirección de la pantalla LCD de dos líneas: (ambas son de dieciséis dígitos recuentos)
0 1 2 3 4 5 6 7 8 9 A B C D E F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
Requisitos y configuración del formato del comando El octavo bit del puntero de dirección es 1, seguido de la dirección, es decir, AC0 ~ AC6, que corresponde a la dirección en la tabla anterior.
Apéndice 3: Procedimiento experimental:
RS BIT P2.0; Definir la etiqueta del puerto LCD
RW BIT P2.1
EBIT P2.2
;*************************************** ***** *******
T0TH EQU 24H;T0 dos variables temporales
T0TL EQU 23H
ORG 0000H
INICIO LJMP
ORG 000BH
LJMP T0INT
ORG 0100H
;********** ****** *******************************
;***** ************ *******************Inicialización de LCD****************** *
INICIO:
MOV SP,#70H
MOV P0,#01H ;Borrar pantalla
LLAMADA HABILITADA
MOV P0,#38H ;8 dígitos, 2 líneas de visualización
HABILITACIÓN DE LLAMADA
p>
HABILITACIÓN DE LLAMADA
MOV P0,# 0CH ;Visualización de pantalla encendida, apagar cursor
HABILITAR LLAMADA
MOV P0,#06H ;Dirección de conteo Agregar 1, moverse automáticamente hacia la derecha
HABILITAR LLAMADA p>
;********************************************* *
;Indicador de arranque
;************************ ********* ****************
MOV P0,#80H
LLAMADA HABILITADA
MOV DPTR,#TABLE0 ; Escribe la primera fila de datos
CALL WRITE1
MOV P0,#00010000B ;Mueve el cursor dos lugares hacia la izquierda
CALL ENABLE
MOV P0,#00010000B
LLAMADA HABILITADA
LLAMADA DEL0
LJMP PRINCIPAL
;** ****** ***********************************Escribir instrucciones
HABILITAR: p>
CLR RS
CLR RW
SETB E
LLAMADA DEL0
CLR E
RET
;****************************************** * *************Escribir datos
WRITE1:
MOV R1,#00H programa de búsqueda de tablas, desde el encabezado hasta el final de la tabla; p>
A1:
MOV A,R1
MOVC A,@A+DPTR
LLAMADA ESCRITURA2
INC R1
CJNE A,#00H,A1 ;Continuar antes de llegar al final de la cadena
RET
WRITE2:
MOV P0, A ; Transfiere directamente los datos Escribe en la pantalla LCD
SETB RS
CLR RW
SETB E
CALL DEL0
CLR E
RET
<p>DEL0:MOV R4,#020H
C0:MOV R5,#020H
C1: DJNZ R5,C1
DJNZ R4,C0
RET
;*************************************** *****
TABLE0:DB 'BIENVENIDO AQUÍ',00H
;********************* *** ****Inicialización de memoria******************
INICIAL:
MOV R3,#08H
MOV R0,#30H
M1:
MOV @R0,#00H
INC R0
DJNZ R3,M1
RET
;******************************Seleccione la clave para reproducir ocho tonos**** *******************
PRINCIPAL: MOV SP,#80H ;Pila de inicialización
MOV TMOD,#11H ;Temporizador 0 modo de trabajo 0, Temporizador 1 modo de trabajo 0
SETB EA
SETB ET0; Contador 0 permitido
SETB ET1; permitido
INICIO : SETB P3.7 ;Apagar el timbre
CLR TR0 ;Temporizador no permitido
ESCANEO: ;Escaneo de teclado
MOV A,P1
CJNE A,#0FFH,SU_KEY Determina si el teclado está presionado, salta a SU_KEY, si no, continúa escaneando
NOP
LJMP SCAN
SU_KEY:
SU_KEY1:
JB P1.0,SU_KEY2 ;Si no es la primera tecla presionada, vaya a
MOV DPH,#0FCH
p>MOV DPL,#44H
SJMP PLAY
SU_KEY2:
JB P1. 1,SU_KEY3; si no se presiona la segunda tecla, transfiera
MOV DPH,#0FCH
MOV DPL,#0ACH
SJMP PLAY
SU_KEY3:
JB P1.2,SU_KEY4 ;Si no se presiona la tercera tecla, vaya a
MOV DPH,#0FDH
MOV DPL ,#09H
SJMP PLAY
SU_KEY4:
JB P1.3,SU_KEY5 ;Si no es la 4ta tecla presionada, vaya a
MOV DPH,#0FDH
MOV DPL
,#34H
SJMP PLAY
SU_KEY5:
JB P1.4,SU_KEY6 ;Si no se presiona la quinta tecla, vaya a
MOV DPH,#0FDH
MOV DPL,#82H
SJMP PLAY
SU_KEY6:
JB P1.5,SU_KEY7 ;Si no es la 6ta tecla presionada, vaya a
MOV DPH,#0FDH
MOV DPL,#0C8H
SJMP PLAY
SU_KEY7:
JB P1.6,SU_KEY8 ;Si no se presiona la séptima tecla, vaya a
MOV DPH,#0FEH
MOV DPL, # 06H
SJMP PLAY
SU_KEY8:
JB P1.7,KEY1; Si no se presiona la octava tecla, vaya a
MOV DPH,#0FEH
MOV DPL,#22H
SJMP PLAY
PLAY:
MOV T0TH,DPH Almacenar alto; -ordenar caracteres
MOV T0TL,DPL ;Guardar caracteres de orden inferior
MOV TH0,T0TH
MOV TL0,T0TL
SETB TR0 ;Iniciar temporizador 0
MOV R2,#01B ;1/4 de tiempo
DJNZ R2,PLAY
LCALL DELAY
SJMP JUEZ
JUEZ:
JB P2.4,START ;Si no se presiona el botón, continúa escaneando, de lo contrario, comienza a reproducir música
;*** ***** *******************Seleccione la tecla para reproducir música****************** p>
TECLA1: p>
JB P2.5, TECLA2 ; Presione la primera tecla (P2.5) para reproducir música 1
MOV R2, #00H
LCALL MODD; visualización del número de canción
MOV DPTR,#MU_TAB1
AJMP MUSIC
KEY2:
JB P2.6 ,KEY3; segunda Presione la tecla (P2.6) para reproducir música 2
MOV R2,#01H
LCALL MODD muestra el número de canción
MOV DPTR,#MU_TAB2
AJMP MUSIC
TECLA3:
JB P2.7, NEXT_2; Presione la tercera tecla (P2.7) para reproducir música 3
MOV R2,#02H
LCALL MODD; Visualización del número de canción
MOV D
PTR,#MU_TAB3
MÚSICA AJMP
NEXT_2: LJMP INICIO ;Volver
MÚSICA:
MOV TMOD,#01H
MOV IE,#82H ;Habilitar interrupción T0
MOV R7,#00H
BUCLE:
CLR A
MOVC A,@A+DPTR ;Busque la tabla y obtenga el código
MOV R1,A ;Los ocho bits superiores del temporizador almacenan R1
INC DPTR
PUSH DPH ; Proteger la escena
PUSH DPL
GECI1:
JB P2.5,GECI2 Presione la primera tecla (P2.5) para mostrar la letra 1
MOV DPTR,#GE1
AJMP GECI
GECI2:
JB P2.6,GECI3; Tecla (P2. 6) Presione para mostrar la letra 2
MOV DPTR, #GE2
AJMP GECI
GECI3:
JB P2 .7, TIAOCHU ; Presione la tercera tecla (P2.7) para mostrar la letra 3
MOV DPTR,#GE3
AJMP GECI
TIAOCHU:LJMP START
GECI:
LCALL QINGCHU
MOV P0,#0C0H ;posición mostrada
CALL ENABLE
XIANSHI1 : MOV A,R7 Busque la tabla para obtener la visualización de música en Pinyin chino
MOVC A,@A+DPTR
CALL WRITE2
INC R7
CJNE A,#00H,XIANSHI1
MOV P0,#00010000B ;Mueve el cursor una posición hacia la izquierda
LLAMADA HABILITADA
MOV P0,#00010000B ; Mueve el cursor una posición hacia la izquierda
CALL ENABLE
POP DPL
POP DPH
CLR A
MOVC A,@A+DPTR
MOV R0,A ;Los ocho bits inferiores del temporizador se almacenan en R0
ORL A,R1 p>
JZ NEXT0 ;El resultado de la fase O es todo 0 es el carácter restante
MOV A,R0
ANL A,R1
CJNE A, #0FFH,NEXT; el resultado AND es 0FFH, lo que indica el final de la música
p>MOV P
0,#01H ;Borrar pantalla
LLAMADA HABILITADA
LJMP INITION ;Reproducir desde el principio
NEXT: MOV T0TH,R1 ;Instalar valor inicial de temporización p >
MOV TH0,T0TH
MOV T0TL,R0
MOV TL0,T0TL
SETB TR0 ; SJMP NEXT1
NEXT0: CLR TR0 ;Cerrar temporizador
NEXT1: CLR A
INC DPTR
MOVC A,@A+ DPTR ; Comprobar constante de retardo
MOV R2,A
LOOP1:
ACALL D200
DJNZ R2,LOOP1 ;Controlar tiempos de retardo
INC DPTR
AJMP LOOP
D200: MOV R3,#81H; programa de retardo
D200B: MOV A,# 0FFH
D200A: DEC A
JNZ D200A
DEC R3
CJNE R3,#00H,D200B
RET
QINGCHU:MOV A,#00100000B
MOV P0,#0C0H ; Establezca la primera posición de la segunda línea en 0
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ; Establece la segunda posición de la segunda línea en 0
MOV P0,#0C1H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ; Establezca la tercera posición de la segunda línea en 0
MOV P0,#0C2H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ; Establece la cuarta posición de la segunda línea en 0
MOV P0,#0C3H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ; Establezca la quinta posición de la segunda fila en 0
MOV P0,#0C4H
LCALL ENABLE
LCALL WRITE2
MOV A,#00100000B ; Establezca la sexta posición de la segunda línea en 0
MOV P0,#0C5H<; / p>
LCALL ENABLE
LCALL WRITE2
MOV A,#00
100000B ; Establece la séptima posición de la segunda fila en 0
MOV P0,#0C6H
LCALL ENABLE
LCALL WRITE2 ; fila 0
;El programa equivalente anterior es el siguiente
;GECI:MOV R3,#00H ;Controla el número de ciclos
;QINGCHU: p>
;MOV A,#00100000B ;Pon un espacio
;PUSH A
;MOV R4,#0C0H ;Dirección
;MOV A ,R4
;MOV P0,A
;POP A
;INC R4
;DEC R3 ;Controlar el número de ciclos
; CJNE R3,#00H,QINGCHU ;La transferencia se ejecutará después de diez veces.
;****************** *********** *************************
;Temporizador 0 interrumpir subrutina, música temporizada
;* ******************************************* **********
T0INT: ;Interrumpir subrutina de servicio
MOV TH0,T0TH
MOV TL0,T0TL
CPL P3.7 ;Salida de inversión, música de demostración
RETI
;************************ ******** *************
;Mostrar
;************* ********* **********************
MOD:
MOV P0,# 8EH
LCALL ENABLE
MOV A,R2
MOV DPTR,#TABLE2
MOVC A,@A+DPTR
LCALL WRITE2
RET
TABLA2:DB 31H,32H,33H
GE1: db 'xin',00h,'nian',00h ,'hao',00h,'ya ',00h,'xin',00h,'nian',00h,'hao',00h,'ya',00h
db 'zhu',00h, 'fu',00h,'da' ,00h,'jia',00h,'xin',00h,'nian',00h,'hao',00h
GE2: DB 'liang',00H ,'zhi',00H,'lao ',00H,'hu',00H,'liang',00H,'zhi',00H,'lao',00H,'hu',00H,'pao',00H,' de',00H,'kuai', 00H
DB 'pao',00H,'de',00H,'kuai',00H,'yi',00H,'zhi',00H,'mei ',00H,'tú',00H ,'yan',00H,'jing',00H,'yi',00H,'zhi',00H
DB 'mei',00H,'tú' ,00H,'er',00h, 'duo',00h,'zhen',00h,'qi',00h,'guai',00h,'zhen',00h,'q
i',00h,'guai',00h
GE3: DB 'wo',00h,'ai',00h,'bei',00h,'jing',00h,'tian',00h, 'an',00h,'men',00h,'tian',00h,'an',00h
;********************* *** ******Subrutina de retardo******************
DELAY:MOV 30H, #100; Ampliar el tiempo de espera y eliminar fluctuación del teclado
D1:MOV R5,#200
D2:DJNZ R5,D2
DJNZ 30H,D1
RET p>
;************************Feliz año nuevo****************** ******* *****
MU_TAB1: DB 0FEH,25H,04H,0FEH,25H,04H
DB 0FEH,25H,06H,0FDH,80H ,06H
DB 0FEH,84H,04H,0FEH,84H,04H
DB 0FEH,84H,06H,0FEH,25H,06H
DB 0FEH, 25H,04H,0FEH,84H,04H
DB 0FEH,0C0H,04H,0FEH,84H,04H
DB 0FEH,98H,04H,0FEH,84H,04H
DB 0FEH, 57H,06H
DB 0FFH,0FFH
;********************* ***Dos tigres****** *************************
MU_TAB2: DB 0FCH,44H,06H ,0FCH,0ACH,06H,0FDH,09H,06H, 0FCH,44H,06H
DB 0FCH,44H,06H,0FCH,0ACH,06H,0FDH,09H,06H,0FCH,44H,06H
DB 0FDH,09H,06H, 0FDH,34H,06H,0FDH,0A6H,06H
DB 0FDH,09H,06H,0FDH,34H,06H,0FDH,0A6H,06H
DB 0FBH,04H,04H, 0FDH,0C8H,04H,0FBH,04H,04H,0FDH,34H,04H
DB 0FDH,09H,04H,0FCH,44H,04H, 0FBH,04H,04H,0FDH,0C8H,04H
p>DB 0FBH,04H,04H,0FDH,34H,04H,0FDH,09H,04H,0FCH,44H,04H
DB 0FCH,44H,06H,0FDH,0A6H,06H,0FCH ,44H,06H
DB 0FCH,44H,06H,0FDH,0A6H,06H,0FCH,44H,06H
DB 0FFH,0FFH
;** *******************Me encanta Beijing Tiananmen************ ******************
MU_TAB3: DB 0FDH,82H,06H,0FEH,22H,04H,0FDH,82H,04H,0FDH,34H, 04H
DB 0FDH,09H,04H,0FCH,0ACH, 04H,0FCH,44H,06H
DB 0FFH,0FFH,0FFH,0FFH
FIN