
谁能给个单片机红外收发的简单程序 20
用的51单片机,程序不要复杂,只要A单片机发送数据,能控制B单片机进行一些简单动作,如LED控制,发射需要38K调制,串口编码发送,接收用红外一体接收.最好C语言,带注释...
用的51单片机,程序不要复杂,只要A单片机发送数据,能控制B单片机进行一些简单动作,如LED控制,发射需要38K调制,串口编码发送,接收用红外一体接收.最好C语言,带注释,谢了
展开
展开全部
1.接收程序:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit in=P3^2;
sbit beer=P1^3;
uchar i,a,num;
bit fleg;
void init()
{
fleg=1;
in=1;
EA=1;
EX0=1;
IT0=1;
}
void delayms(uchar aa)
{
for(i=aa;i>0;i--)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
void delay(uchar z)
{
uchar x,y;
{
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
}
void main()
{
init();
//delayms(45);//0.642ms
//delayms(35);//0.502ms
//delayms(115);//1.623ms
//delayms(72);//1.02ms
//delayms(84);//1.188ms
//delayms(31);//0.446ms
while(1);
}
void sieasdf() interrupt 0
{
EX0=0;
for(a=5;a>0;a--)
{
delayms(35);//延时0.5ms 判断5次 5*0.5=2.5ms
if(in)fleg=0;
}
if(fleg)
{
delayms(72);//延时1ms 判断是不是高电平了
if(in)
{
delayms(115);//延时让它超过2ms; 2.5+1+1.623=5.123ms 开始读数据
for(a=8;a>0;a--)
{
while(!in);
delayms(86);//延时1.188ms 判断IO高低,从而得0或1
num=num>>1;
if(in)
{
num=num|0x80;
delayms(31);//延时0.6ms 因为上面延时1.2ms+0.6 刚好跳过1.5ms
}
}
P2=num;
if(num==0xff)beer=~beer;
}
}
fleg=1;
EX0=1;
}
2.发送程序:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
sbit LED=P2^0; //发射指示灯
sbit out=P3^7;
uchar i,a,num1;
void init()//初始化作用
{
key1=1;
key2=1;
key3=1;
}
void delay(uchar aa)
{
uchar bb,cc;
for(bb=aa;bb>0;bb--)
for(cc=200;cc>0;cc--);
}
void delayms(uchar aa)//延时程序
{
for(a=aa;a>0;a--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void khz(uchar aa)//是发射38KHZ的程序
{
for(a=aa;a>0;a--) //这个for语句可以得到准确的26.3波特率
{
out=0;
i=7; //低了17us
while(i>0)i--; // 38kHZ
out=1;
//高了9us 17+9=26us 比26.3快一点点
}
}
//khz(116);//3.028ms 精确的时间
//khz(64);//2.006ms
//khz(40); //1.052ms
//delayms(125);//2.012ms 这里是一些时间的介绍
//delayms(65);//1.054ms
//delayms(93);//1.5ms
void fashu(uchar num)
{
khz(116);//发射3ms 38khz
delayms(125);
for(num1=8;num1>0;num1--) //原来用的是a 后来出错,肯定在这里!
{
khz(40);
if(num&0x01)
delayms(93);//delay 1.5ms
else
delayms(65);//delay 1ms
num=num>>1;
}
khz(20);
}
void keyscan()//按键扫描
{
if(key1==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key1==0)
{
while(!key1);
fashu(0x7f);
LED=0;
delay(200);
LED=1;
delay(200);
LED=0;
delay(200);
LED=1;
}
}
if(key2==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key2==0)
{
while(!key2);
fashu(0);
LED=0;
delay(200);
LED=1;
delay(200);
LED=0;
delay(200);
LED=1;
}
}
if(key3==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key3==0)
{
while(!key3);
fashu(0xff);
LED=0;
delay(200);
LED=1;
delay(200);
LED=0;
delay(200);
LED=1;
}
}
}
void main()
{
init();
while(1)
{
keyscan();
}
}
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit in=P3^2;
sbit beer=P1^3;
uchar i,a,num;
bit fleg;
void init()
{
fleg=1;
in=1;
EA=1;
EX0=1;
IT0=1;
}
void delayms(uchar aa)
{
for(i=aa;i>0;i--)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
void delay(uchar z)
{
uchar x,y;
{
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
}
void main()
{
init();
//delayms(45);//0.642ms
//delayms(35);//0.502ms
//delayms(115);//1.623ms
//delayms(72);//1.02ms
//delayms(84);//1.188ms
//delayms(31);//0.446ms
while(1);
}
void sieasdf() interrupt 0
{
EX0=0;
for(a=5;a>0;a--)
{
delayms(35);//延时0.5ms 判断5次 5*0.5=2.5ms
if(in)fleg=0;
}
if(fleg)
{
delayms(72);//延时1ms 判断是不是高电平了
if(in)
{
delayms(115);//延时让它超过2ms; 2.5+1+1.623=5.123ms 开始读数据
for(a=8;a>0;a--)
{
while(!in);
delayms(86);//延时1.188ms 判断IO高低,从而得0或1
num=num>>1;
if(in)
{
num=num|0x80;
delayms(31);//延时0.6ms 因为上面延时1.2ms+0.6 刚好跳过1.5ms
}
}
P2=num;
if(num==0xff)beer=~beer;
}
}
fleg=1;
EX0=1;
}
2.发送程序:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
sbit LED=P2^0; //发射指示灯
sbit out=P3^7;
uchar i,a,num1;
void init()//初始化作用
{
key1=1;
key2=1;
key3=1;
}
void delay(uchar aa)
{
uchar bb,cc;
for(bb=aa;bb>0;bb--)
for(cc=200;cc>0;cc--);
}
void delayms(uchar aa)//延时程序
{
for(a=aa;a>0;a--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void khz(uchar aa)//是发射38KHZ的程序
{
for(a=aa;a>0;a--) //这个for语句可以得到准确的26.3波特率
{
out=0;
i=7; //低了17us
while(i>0)i--; // 38kHZ
out=1;
//高了9us 17+9=26us 比26.3快一点点
}
}
//khz(116);//3.028ms 精确的时间
//khz(64);//2.006ms
//khz(40); //1.052ms
//delayms(125);//2.012ms 这里是一些时间的介绍
//delayms(65);//1.054ms
//delayms(93);//1.5ms
void fashu(uchar num)
{
khz(116);//发射3ms 38khz
delayms(125);
for(num1=8;num1>0;num1--) //原来用的是a 后来出错,肯定在这里!
{
khz(40);
if(num&0x01)
delayms(93);//delay 1.5ms
else
delayms(65);//delay 1ms
num=num>>1;
}
khz(20);
}
void keyscan()//按键扫描
{
if(key1==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key1==0)
{
while(!key1);
fashu(0x7f);
LED=0;
delay(200);
LED=1;
delay(200);
LED=0;
delay(200);
LED=1;
}
}
if(key2==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key2==0)
{
while(!key2);
fashu(0);
LED=0;
delay(200);
LED=1;
delay(200);
LED=0;
delay(200);
LED=1;
}
}
if(key3==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key3==0)
{
while(!key3);
fashu(0xff);
LED=0;
delay(200);
LED=1;
delay(200);
LED=0;
delay(200);
LED=1;
}
}
}
void main()
{
init();
while(1)
{
keyscan();
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
要硬件图纸和软件程序吗?你给多少钱??我来帮你设计。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
相当支持二楼的说法
软硬件一体!~
软硬件一体!~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
- = 你们知道单片机程序跟硬件是强烈地绑定在一起的么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询