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 p>
{
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
.