Programación MCU, programa para controlar el encendido y apagado del LED,
#include
#include
#define?u16?unsigned?int
#define?u8?unsigned?char
#define?Pin0?0x01
#define?Pin1?0x02
#define?Pin2?0x04
#define?Pin3?0x08
#define?Pin4?0x10
#define?Pin5?0x20
#define?Pin6?0x40
#define?Pin7?0x80
sbit?led1=P1^1;
sbit?led2=P1^2;
sbit ?led3=P1^3;
sbit?led4=P1^4;
sbit?led5=P1^5;
sbit?kg1=P3^ 1;
sbit?key2=P3^2;
sbit?key3=P3^3;
/********** **************************/
void?init() //Función de inicialización
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA= 1;
ET0=1;
}
//////////////////// // ///
u8?s(){//Botón de escaneo
static?u8?ms;
u8?t=0;
p>// if(key1==0)t|=Pin1;
if(key2==0)t|=Pin2;
if(key3== 0)t|=Pin3;
si(t!=0x00){
si(ms<100)ms++;
si(ms==5 ){
retorno?t;
}
}else?ms=0;
retorno?0x00;
}
////////////////////////
typedef?struct{
u16?time;//n milisegundos después
u8?l;//Luz encendida
u8?m ?//Luz apagada
< p; >}ledcmd;#define?LED_CMD_SIZE?10
código?ledcmd?lcmd[]={
{0,Pin2,0},/ / ¿Después de 0s? Se enciende el led2
{500,Pin4,0,},//Después de 0,5s?Se enciende el led4
{1000,0,Pin4},//Después de 1s ?led4 apagado
{300,Pin3,0,},
{300,Pin4,0,},
{1000,0,Pin4,} ,
{300,0,Pin2,},
{200,Pin5,0,},
{40,0,Pin5|Pin3},
{500,0,Pin1},
};
void?led_l(u8?v){//Programa de iluminación
P1=P1&(~
v);
}
void?led_m(u8?v){//procedimiento de apagado
P1=P1|(v); p >
}
u8?ledzt=0xff;//la tarea led zt? es 0xff, lo que indica espera
u16?ledjs;//cuenta regresiva
void ?led_start(){?//Iniciar programa
ledzt=0;
ledjs=lcmd[ledzt].time;
}
void?ledcx(){?//programa de proceso led
if(ledzt if((ledjs==0)&&(ledzt ledzt++; if(ledzt!=LED_CMD_SIZE){ ledjs=lcmd[ledzt].time; p> } } if(ledzt>1){// led_l(lcmd[ledzt-1].l); led_m(lcmd[ledzt-1].m } } } / ** *********************************/ void?main()// función principal { u8?k; init();//Inicialización del sistema TR0=1;?// Temporizador Iniciar el tiempo while(1){ if(ledzt==0xff){led1=(kg1!=0);};//El LED cambia según el interruptor cuando no está ejecutando led1 k=s();//Leer valor clave if((k&Pin2)!=0){//key2 if(led1 ==0&&ledzt==0xff){ led_start(); } } if((k&Pin3) !=0 ){//key3 ledzt=0xff; led_m(Pin2|Pin4); } ledcx( } } /************************ **** */ void?timer0()?interrupt?1//temporizador de 1 ms { TH0=(65536-1000)/256 ;// Sobrecarga valor inicial TL0=(65536-1000)%256; if(ledjs>0)ledjs--; } p>