El lenguaje MCU C utiliza dos botones para controlar la lámpara de agua con patrón de 8 bits. P1.0 está conectado al botón k1, P1.1 está conectado al botón k2 y el puerto P0 de 8 bits está conectado a 8 luces. diodos emisores.
El programa de montaje es el siguiente:
; Patrón de luces de marcha (8 LED se encienden cíclicamente en varias formas)
; Función: luces de marcha (8 El El diodo emisor de luz se enciende cíclicamente en varias formas a intervalos de 1S)
ORG H ;Pseudoinstrucción, que especifica que el programa se almacenará a partir de H
LJMP MAIN ;Instrucción de salto , salto de programa Ejecutar a MAIN
ORG H ;Pseudo instrucción, especifica el programa para comenzar a almacenar desde H
MAIN: MO SP, #60H ;Asignar un valor inicial al puntero de pila
MO P1,#0FFH ;Asignar valor al puerto P1
MO DPTR,#TABLE;Consultar tabla
LIGHT: MO R4,#42 ;Establecer el número de ciclos
LOOP: MO A,#42 ;Asigna un valor inicial a A
SUBB A,R4 ;Resta el valor de A del valor de R4 y almacena el resulta en A
MOC A ,@A+DPTR ;Asigna el valor en TABLA correspondiente al valor de A+DPTR a A
MO P1,A ;Asigna el valor de A al puerto P1
LCALL DEL1S ; Llamar a la subrutina de retardo 1S
DJNZ R4,LOOP Determinar si R4 es 0, saltar si no es 0, ejecutar secuencialmente si es 0
LJMP LIGHT ;Saltar instrucción, Saltar a LIGHT y continuar ejecución
;Subrutina de retardo 1S (oscilador de cristal de 11.MHz, error 0 microsegundos)
DEL1S: MO R5, # H
DL1S0: MO R6, #0A4H
DL1S1: MO R7, #H
DJNZ R7, $
DJNZ R6, DL1S1
DJNZ R5, DL1S0
RET
TABLE: ;Definir datos de la tabla
DB 0FFH ;Destruir todo
DB 0FEH 0FDH 0FBH
DB 07EH 0BDH 0DBH 0E7H 0E7H 0DBH 0BDH 07EH ; Ambos lados se juntan y luego se separan
DB 07EH 03CH H H H H 03CH 07EH ;
DB H ;Completamente brillante
END ;Comando de finalización del programa
El programa en lenguaje C es el siguiente:
/* Este experimento es una lámpara de flujo de patrón (8 diodos emisores de luz circulan a través de los puntos de varias maneras), la función es una luz de agua corriente de patrón (8 diodos emisores de luz se iluminan de varias maneras en intervalos de 1S) */
#include//Contiene el archivo reg.52
# define uint
unsigned int//Definición de macro
#define uchar unsigned char//Definición de macro
void delay(uint z);//Declaración de la función de retardo
uint a;//Definir variables para el bucle
tabla de códigos uchar[]={
0xff,//Destruir todo
0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f,//iluminar uno por uno
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//superponer uno por uno
0x80 ,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//Disminuye uno por uno
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//Los dos los lados se juntan y luego se separan
0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//Disminuye después de superponer en ambos lados
0x00,//Totalmente brillante
;/ /?
/*A?
a?*/
void in()//in
{
a=0;//
mientras(1)//mientras
{
P1=tabla [a];//?aable
demora();//1S a ;//a?
if(a==42)//?a2
a=0;/ /
}
}
retraso nulo(uint z)//1ms?F{
uint x,y; p>
for(x=z;x