Red de conocimiento informático - Aprendizaje de código fuente - Requisitos de efecto: utilice cuatro LED para representar el valor de conteo binario Cada vez que se enciende y apaga el interruptor A, el contador aumenta en 1 y el valor actual se muestra a través de la luz LED cada vez que se enciende el interruptor B;

Requisitos de efecto: utilice cuatro LED para representar el valor de conteo binario Cada vez que se enciende y apaga el interruptor A, el contador aumenta en 1 y el valor actual se muestra a través de la luz LED cada vez que se enciende el interruptor B;

//Supongamos que los tres interruptores están conectados a P1.0, P1.1 y P1.2 respectivamente. Cuando se presiona, el puerto IO es 0

#include lt; reg51.hgt ;

carácter sin firmar Led1, Led2, Led3, Led4;

sbit KeyA=P1^0;

sbit KeyB=P1^1;

sbit KeyC=P1^2;

unsigned char LedSegmentTab[]= //definir *** tubo digital de cátodo

{0x3f, 0x06, 0x5b, 0x4f , 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

//0, 1, 2, 3, 4, 5, 6, 7, 8, 9

nulo Delay100us(int Times);

main()

{

int número, temp //número que se mostrará

número; = 0;

Led1 = 0x00; //Mostrar todos los 0

Led2 = 0x00

Led3 = 0x00; 0x00;

p>

//Inicialización del temporizador 1

TMOD = 0x10; //T1: Puerta = 0, no afectado por la señal de interrupción externa

// C/T = 0, selecciona el modo de temporización

// M1, M0 = 0, 1 constituye un temporizador de 16 bits

//T0: No se utiliza en el programa.

TH1 = 0x3c; //Especifique el tiempo de sincronización para que sea de 50 ms, es decir, escanee el tubo digital cada 50 ms.

TL1 = 0xb0; //65536-50*1000/(12/12) = 15536 ​​​​= 3cb0h

ET1 = 1; //Habilitar interrupción del temporizador 1

while(1)

{

while(KeyAamp; KeyBamp; KeyC); //Espera la clave

if(KeyA) // Clave A

{

número

if(número == 9999)

número = 0; > }

if(KeyB)

{

if(numbergt;0)

número--;

}

if(KeyC)

número = 0

Led4 = número/1000

temp = número1000; /p >

Led3 = temp/100;

temp = número100;

Led2 = número/10

Led1 = número10; >

}

}

//Descripción de la función: el temporizador 1 se utiliza para el escaneo de tubos digitales

void timer1() interrumpe 3 usando 2

{

TH1 = 0x3c; //Reasignación

TH0 = 0xb0

P0 = LedSegmentTab[Led1]; p > P2 = P2 amp; 0xfe; //Enciende el primer tubo digital

Delay100us(10); //Retraso 1ms

P0 = LedSegmentTab[Led2]; > p>

P2 = P2 amp; 0xfd; //Enciende el segundo tubo digital

Delay100us(10); //Retraso 1ms

P0 = LedSegmentTab[Led3 ]

P2 = P2 amp; 0xfb; //Enciende el tercer tubo digital

Delay100us(10); //Retraso 1ms

P0 = LedSegmentTab[ Led4];

P2 = P2 amp; 0xf7; //Enciende el cuarto tubo digital

Delay100us(10);

}

void Delay100us(int Veces)

{

Veces = Veces * 100;

while(Veces--);

}

El programa anterior fue compilado con Keil. En cuanto a si se puede utilizar, debe realizar la simulación usted mismo

.