#include <AT89X51.h>
static bit OP; //红外发射管的亮灭
static unsigned int count; //延时计数器
static unsigned int endcount; //终止延时计数
static unsigned char Flag; //红外发送标志
char iraddr1; //十六位地址的第一个字节
char iraddr2; //十六位地址的第二个字节
void SendIRdata(char p_irdata);
void delay();
char getkey()
{
P1=0xfe;P3_6=P3_7=1;P3_3=1;
if(!P1_4)return 1; //ON
if(!P1_5)return 2; //7
if(!P1_6)return 3; //8
if(!P1_7)return 4; //9
if(!P3_6)return 5; //X
if(!P3_7)return 6; //÷
P1=0xfd;
if(!P1_4)return 11; //+-
if(!P1_5)return 12; //4
if(!P1_6)return 13; //5
if(!P1_7)return 14; //6
if(!P3_6)return 15; //-
if(!P3_7)return 16; //MRC
P1=0xfb;
if(!P1_4)return 21; //%
if(!P1_5)return 22; //1
if(!P1_6)return 23; //2
if(!P1_7)return 24; //3
if(!P3_6)return 25; //+
if(!P3_7)return 26; //M-
P1=0xf7;
if(!P1_4)return 31; //□
if(!P1_5)return 32; //0
if(!P1_6)return 33; //.
if(!P1_7)return 34; //=
if(!P3_6)return 35; //+
if(!P3_7)return 36; //M+
P1=0xfF;P3_3=0;
if(!P1_4)return 41; //
if(!P1_5)return 42; //
if(!P1_6)return 43; //
if(!P1_7)return 44; //
if(!P3_6)return 45; //
if(!P3_7)return 46; //
return 0;
}
void main(void)
{
char key;
count = 0;
Flag = 0;
OP = 0;
P3_4 = 1;
EA = 1; //允许CPU中断
TMOD = 0x11; //设定时器0和1为16位模式1
ET0 = 1; //定时器0中断允许
P1=0xff;
TH0 = 0xFF;
TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次
TR0 = 1;//开始计数
iraddr1=0xff;
iraddr2=0xff;
do{
key=getkey();
if(key==1)SendIRdata(0x12);//set
if(key==11)SendIRdata(0x0b);//exit
if(key==25||key==35)SendIRdata(0x1a);//+
if(key==15)SendIRdata(0x1e);//-
if(key==6)SendIRdata(0x0e);//↑ ÷
if(key==16)SendIRdata(0x1d);//↓ MRC
if(key==26)SendIRdata(0x1f);//← M-
if(key==36)SendIRdata(0x1b);//→ M+
if(key==32)SendIRdata(0x00);//0
if(key==22)SendIRdata(0x01);//1
if(key==23)SendIRdata(0x02);//2
if(key==24)SendIRdata(0x03);//3
if(key==12)SendIRdata(0x04);//4
if(key==13)SendIRdata(0x05);//5
if(key==14)SendIRdata(0x06);//6
if(key==2)SendIRdata(0x07);//7
if(key==3)SendIRdata(0x08);//8
if(key==4)SendIRdata(0x09);//9
if(key==21)SendIRdata(0x2A);//%
if(key==5)SendIRdata(0x2B);//X
if(key==33)SendIRdata(0x2C);//.
if(key==34)SendIRdata(0x2D);//=
if(key==31)SendIRdata(0x2E);//□
if(key==41)SendIRdata(0x2F);//
if(key==42)SendIRdata(0x30);//
if(key==43)SendIRdata(0x31);//
if(key==44)SendIRdata(0x32);//
if(key==45)SendIRdata(0x33);//
if(key==46)SendIRdata(0x34);//
}while(1);
}
//定时器0中断处理
void timeint(void) interrupt 1
{
TH0=0xFF;
TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次
count++;
}
void SendIRdata(char p_irdata)
{
int i;
char irdata=p_irdata;
//发送9ms的起始码
endcount=223;
Flag=1;
count=0;
P3_4=0;
do{}while(count<endcount);
//发送4.5ms的结果码
endcount=117;
Flag=0;
count=0;
P3_4=1;
do{}while(count<endcount);
//发送十六位地址的前八位
irdata=iraddr1;
for(i=0;i<8;i++)
{
//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
endcount=10;
Flag=1;
count=0;
P3_4=0;
do{}while(count<endcount);
//停止发送红外信号(即编码中的高电平)
if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
{
endcount=15; //1为宽的高电平
}
else
{
endcount=41; //0为窄的高电平
}
Flag=0;
count=0;
P3_4=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
//发送十六位地址的后八位
irdata=iraddr2;
for(i=0;i<8;i++)
{
endcount=10;
Flag=1;
count=0;
P3_4=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=15;
}
else
{
endcount=41;
}
Flag=0;
count=0;
P3_4=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
//发送八位数据
irdata=~p_irdata;
for(i=0;i<8;i++)
{
endcount=10;
Flag=1;
count=0;
P3_4=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=15;
}
else
{
endcount=41;
}
Flag=0;
count=0;
P3_4=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
//发送八位数据的反码
irdata=p_irdata;
for(i=0;i<8;i++)
{
endcount=10;
Flag=1;
count=0;
P3_4=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=15;
}
else
{
endcount=41;
}
Flag=0;
count=0;
P3_4=1;
do{}while(count<endcount);
irdata=irdata>>1;
}
endcount=10;
Flag=1;
count=0;
P3_4=0;
do{}while(count<endcount);
P3_4=1;
Flag=0;
}
void delay()
{
int i,j;
for(i=0;i<400;i++)
{
for(j=0;j<100;j++)
{
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
51单片机 红外遥控模拟.rar
共34个文件
bak:4个
plg:3个
lst:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 153 浏览量
2023-04-15
19:04:04
上传
评论
收藏 98KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
51单片机 红外遥控模拟.rar (34个子文件)
0021、红外遥控模拟
解码.hex 7KB
解码.lnp 41B
解码LCD.LST 7KB
红外遥控.M51 12KB
解码.Uv2 2KB
遥控 10KB
解码.OBJ 14KB
遥控.M51 12KB
红外遥控 10KB
红外遥控的仿真.PWI 3KB
main.OBJ 12KB
解码LCD.c 4KB
解码.LST 10KB
遥控.plg 166B
解码.c 4KB
解码_Uv2.Bak 2KB
遥控.hex 3KB
main.LST 10KB
红外遥控.Opt 1KB
解码_Opt.Bak 2KB
红外遥控_Opt.Bak 1KB
Last Loaded 红外遥控的仿真.DBK 135KB
解码LCD.OBJ 10KB
遥控.lnp 40B
解码.plg 6KB
红外遥控.Uv2 2KB
解码.M51 20KB
红外遥控的仿真.DSN 135KB
红外遥控.lnp 44B
红外遥控.plg 166B
main.c 5KB
红外遥控_Uv2.Bak 2KB
解码.Opt 2KB
解码 22KB
共 34 条
- 1
资源评论
荣华富贵8
- 粉丝: 150
- 资源: 7649
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功