900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 15f104 c语言编程 DIY插座 STC15F104单片机红外遥控继电器(附程序源码)

15f104 c语言编程 DIY插座 STC15F104单片机红外遥控继电器(附程序源码)

时间:2018-07-28 23:16:22

相关推荐

15f104 c语言编程 DIY插座 STC15F104单片机红外遥控继电器(附程序源码)

//STC 15F104W

#include

#define TURE 1

#define FALSE 0

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

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

sbit Buzzer=P3^3;//蜂鸣器

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])//仅判断其中1个数据,如果防止串码,需要同时对比4个字节数据

{

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黑下载附件…………

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。