Red de conocimientos turísticos - Información de alquiler - Programación MCU, programa para controlar el encendido y apagado del LED,

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);

}

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;

}

}

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--;

}