📄 hongwai_fashe.c
字号:
//以下为试验简单但可行的的程序,发射数据,键盘对应的按键为b键,用于控制万年历闹铃的开关,简化了协议
//发射部分:接入两个外部中断,2个按键分别对应两个按键码被发射出去
#include <reg52.h>
#define uchar unsigned char
sbit NA=P3^6; //控制红外发射管的亮灭,高电平时发射信号
int count; //延时计数器
int endcount; //终止延时计数
uchar flag; //红外发送标志
uchar hongwai_fashe_enable=0;
uchar k=0x06;
void Senddata(uchar p_data); //发送函数
void delay(); //延时程序,1秒
void zhongduan1(void) interrupt 0
{
k=0x38;
hongwai_fashe_enable=1;
}
void zhongduan2(void) interrupt 2
{
k=0x64;
hongwai_fashe_enable=1;
}
void main(void)
{
count = 0;
flag = 0;
endcount=0;
NA=0; //
EA = 1; //允许CPU中断
EX0=1;
EX1=1;
IT0=1;
IT1=1;
TMOD = 0x11; //设定时器0和1为16位模式1
ET0 = 1; //定时器0中断允许
TH0 = 0xff;
TL0 = 0xe6; //设定时值0的装入值,输出脉冲频率为38K,即26us中断一次
TR0 = 1; //开始计数
delay();
for(;;)
{
if( hongwai_fashe_enable==1)
{
Senddata(k); //开始发送数据
hongwai_fashe_enable=0;
}
}
}
void timeint(void) interrupt 1 //定时器0中断处理
{
TH0=0xff;
TL0=0xe6; //26us中断一次,再重装数据
count++;
if (flag==1) //如果允许发送
{
NA=~NA; //开始红外发射管发射载波信号(不停的反相),接收时认做低电平
}
else
{
NA = 0; //没有发射载波信号
}
}
void Senddata(uchar p_data) //发送函数
{
int i;
uchar getdata; //操作的数据
//发送9ms的起始码(发射载波),9000us,为26us的346倍
endcount=346;
flag=1; //允许发送载波
count=0;
do{}while(count<endcount);
//发送4.5ms的结果码(红外管不发光,接收时认做高电平)
flag=0;
endcount=173; //红外管发射信号
count=0;
do{}while(count<endcount);
//发送八位数据
getdata=p_data;
for(i=0;i<8;i++)
{
if(getdata-(getdata/2)*2) //取出每一位的信息
{
endcount=65;
}
else
{
endcount=21;
}
flag=1;
count=0;
do{}while(count<endcount);
flag=0;
endcount=22; //发出高电平
count=0;
do{}while(count<endcount);
getdata=getdata>>1;
}
flag=0;
NA=0;
}
void delay() //延时程序,大约 1s
{
int i,j;
for(i=0;i<1000;i++)
{
for(j=0;j<125;j++){;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -