Red de conocimiento informático - Conocimiento del nombre de dominio - Hola, veo que una vez preguntaste sobre un programa en lenguaje C para controlar una lavadora usando un microcontrolador. Me pregunto si puedo echarle un vistazo a tu programa.

Hola, veo que una vez preguntaste sobre un programa en lenguaje C para controlar una lavadora usando un microcontrolador. Me pregunto si puedo echarle un vistazo a tu programa.

Se han ajustado los siguientes programas y el circuito de visualización del botón es visible:

//MCU: utilice los compatibles con la serie 51;

//4× Teclado de 4 matrices: conecte al puerto P1;

//Pantalla digital de dos dígitos: el puerto P0 genera un código de siete segmentos y el puerto P2 genera un código de selección de bits.

/=========================================

//El programa en lenguaje C es el siguiente.

/****************************************** *******************

* Nombre de archivo: KEY_LED.c

* Función: Realizar salida de teclado matricial 4×4 , los dos últimos dígitos del tubo digital muestran el valor clave.

********************************************* *** *******************/

#include

#include

p>

#define uint unsigned int

#define uchar unsigned char

tabla de códigos uchar[10] =

uchar seg, t_50ms;

/*************************************** ***** *******************

* Nombre: Delay_1ms()

* Función: Retrasar subrutina, el tiempo de retardo es 1 ms * x

* Entrada: x (número de retrasos por milisegundo)

* Salida: Ninguna

******* ************************************************** * *****/

void Delay_1ms(uint x)

{

uint i

uchar j

p >

for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);

}

/***); * ************************************************* ** ********

* Nombre: Display(uchar k)

* Función: Dividir los parámetros en decenas y unidades y mostrarlos respectivamente

* Entrada: k (valor del teclado)

* Salida: el puerto P0 genera un código de siete segmentos, el puerto P2 genera un código de selección de bits

******* ** ************************************************* *** */

void Display(uchar k)

{

P2 = 0 //Blanqueamiento

P0 = tabla; [k / 10];

P2 = 0x02; Delay_1ms(5); //Mostrar dígitos de decenas 5ms

P2 = 0 //Blanqueo

P0; = table[k % 10];

P2 = 0x01; Delay_1ms(5); //Mostrar dígitos de unidades de 5 ms

}

/**** * ************************************************* ** *******

* Nombre: Keyscan()

* Función: P1 está conectado a un botón externo 4×4 y se lee el valor de la clave según el método de escaneo

* Salida: Valor clave 0~15/Si no se presiona ninguna tecla, devuelve 16

************** ************** ************************************* ******/

uchar Keyscan(void )

{

uchar i, j, temp,

Buffer[4] = ;

for(j = 0; j < 4; j++) { //Recorrido cuatro veces

P1 = Buffer[j]; Cada uno de los cuatro bits genera un nivel bajo

temp = 0x01; //Planifica juzgar el bit P1.0 primero

for(i = 0; i < 4; i++) { // Realizar un bucle cuatro veces

if(!(P1 & temp)) //Truncar 1 bit de los cuatro bits inferiores de P1

return (i + j * 4); // Regresar para obtener El valor clave de Si no se presiona ninguna tecla, regresar a 16

} // Jaja, la declaración sustantiva tiene solo 8 líneas, ¡es muy concisa!

/****************************************** ************************

* Nombre: GetKey()

* Función: Leer claves , elimina la inquietud, esperando la liberación de la tecla

* Salida: valor de la clave 0~15/Si no se presiona ninguna tecla, devuelve 16

********** ******* ******************************************* ****/

uchar GetKey(void)

{

uchar Key_Temp1, Key_Temp2 //Valores clave leídos dos veces

<; p> P1 = 0xff;

Key_Temp1 = Keyscan(); //Lee las claves primero

if(Key_Temp1 == 16) return 16; return 16

Display(sec); //Usar visualización en lugar de retraso

Key_Temp2 = Keyscan() //Leer la clave nuevamente

if(Key_Temp1 != Key_Temp2) return 16; //Diferente, devuelve 16

while(Keyscan() < 16) //Espera a que se suelte la tecla

Display(sec); esperando

return Key_Temp1;

}

/************************ ************ *******************************

* Nombre: Main()

* Función: Función principal

*************************** **************** *******************************/

void Main(void)

{

uchar Key_Value; //Leer valor clave

sec = 0;

TMOD = 0x01;

TH1

= (65536-50000)/256;

TL1 = (65536-50000)%256;

TR0 = 1;

ET0 = 1; p>

EA = 1;

while(1) {

Mostrar(sec); //Mostrar

if (GetKey()); == 10) {

TR0 = 0;

while (TR0 == 0) {

Display(sec); //Display

Key_Value = GetKey();

if (Key_Value < 10) {

seg %= 10;

seg = seg * 10 + Key_Value;

}

si (Key_Value == 10) TR0 = 1;

} } }

}

/ ************************************************ *** ************

* Nombre: T0_INT()

* Función: Función de interrupción T0

** *** ************************************************* **** ********/

void T0_INT() interrupción 1

{

TH1 = (65536-50000)/256 ;

TL1 = (65536-50000)%256;

t_50ms++;

if(t_50ms >= 20) {

t_50ms = 0;

seg++;

seg %= 60;

}

}

/** ************************************************* ***** *****/