锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

DIY插座 STC15F104单片机红外遥控继电器(附程序源码)

时间:2023-10-02 00:07:02 tr50继电器继电器插座p3g

//STC 15F104W

#include

#define TURE 1

#define FALSE 0

sbit IR=P3^2.//红外接口标志

sbit Relay=P3^4./继电器1输出端口

sbit Buzzer=P3^三、//蜂鸣器

sbit Key=P3^5;//按键

unsigned char irtime;//红外全局变量

unsigned char i;

bit flag;

bit irpro_ok,irok;

unsigned char IRcord[4];

unsigned char irdata[33];

void Delay(unsigned char mS); //声明函数延时函数

void Ir_work(void); //声明函数红外工作函数

void Ircordpro(void); //声明函数红外处理函数

void Keyscan(void)///键盘扫描

{

if(!Key)//按下按钮,开关电气

{

Delay(10);/去抖

if(!Key)

{

while(!Key)

{};

Delay(10);/去抖

while(!Key)

{};

{

Relay=!Relay;

Buzzer=!Buzzer;

Delay(500);

Buzzer=!Buzzer;

}

}

}

}

void Delay(unsigned char mS)///延迟声明

{

unsigned char us,usn;

while(mS!=0)

{

usn = 4;

while(usn!=0)

{

us=0xf0;

while (us!=0) {us--;};

usn--;

}

mS--;

}

}

void tim0_isr (void) interrupt 1 using 1//定时器声明

{

irtime ;

}

void ex0_isr (void) interrupt 0 using 0//外部中断声明

{

static unsigned chari; ////处理红外信号

static bit startflag; //是否开始处理标志位置

if(startflag)

{

if(irtime<63&&irtime>=33)//引导码 9ms 4.5ms

i=0;

irdata[i]=irtime;///存储每个电平的持续时间,以判断未来是0还是1

irtime=0;

i ;

if(i==33)

{

irok=1;

i=0;

}

}

else

{

irtime=0;

startflag=1;

}

}

void TIM0init(void)///定时器0初始化

{

TMOD=0x02//定时器0工作模式2,TH0是重装值,TL0是初值

TH0=0x00;//reload value

TL0=0x00;//initial value

ET0=1;//开中断

TR0=1;

}

void EX0init(void) //外部定时初始化

{

IT0 = 1; //INT0 (P3.2)

EX0 = 1; //Enable EX0 Interrupt

EA = 1;

}

void main(void) //主函数

{

Relay=1;

Buzzer=0;

Key=1;

EX0init(); // 初始化

TIM0init();

while(1)//主循环

{

Keyscan()//按键扫描

if(irok)

{

Ircordpro();

irok=0;

}

if(irpro_ok)///处理遥控信号

{

Ir_work();

}

}

}

void Ir_work(void)///红外处理可修改此值

{

switch(IRcord[2]//只判断其中一个数据,如果防止串码,需要同时比较四个字节数据

{

case 0x02: Relay=!Relay; // 0x02 红外遥控 用户码 可自行更改

Delay(10);

Buzzer=!Buzzer;

Delay(500);

Buzzer=!Buzzer;

Delay(400);

Buzzer=!Buzzer;

Delay(500);

Buzzer=!Buzzer;

break;

default:break;

}

irpro_ok=0;

IRcord[1]=0;///清除值,防止误码

IRcord[2]=0;

}

void Ircordpro(void)////红外值处理函数

{

unsigned char i, j, k;

unsigned char cord,value;

k=1;

……………………

…………本文篇幅有限 请从51黑下载剩余代码…………

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章