找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

红外发射问题

[复制链接]
admin 发表于 2012-9-2 22:17:50 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
这是我仿照本论坛上的程序写的程序!用示波器测试高低电平时间对,但一组编码后会出现个别的低电平且没规律。请问这是为什么呢?


#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
bit irout;//红外管状态
uint count, set_count;//中断计数,设定中断次数
bit flag,keyflag;//红外发送标志,按键标志位
uchar ircode,irdata;


sbit ir=P0^0;//红外发射管控制脚
uchar systemcode=0x01;//设置系统码

sbit key=P3^0;

void delay(uint z)//延时1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--);
}


void init_timer()
{
EA=1;
TMOD=0X02;//8位自动重载模式
ET0=1;
TH0=0Xf3;//定时13us,38K红外波,晶振12M
TL0=0Xf3;
}


void timer0(void) interrupt 1
{
count++;
if(flag==1)
{
irout=~irout;
}
else
{
irout=1;
}
ir=irout;
}


void sendcode_8(void)
{

uchar i;
for(i=0;i<8;i++)
{

set_count=12;//发送0.56ms 38k红外波(编码中的0.56ms低电平)
flag=1;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
if(ircode&0x80)//判断红外编码最低位,1宽的高电平,0窄的高电平
{
set_count=52; //高电平1.8ms
}
else
{
set_count=12; //低电平0.565ms
}
flag=0;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
ircode=ircode<<1;
}
}




void sendcode(void)
{
set_count=325;//发送9ms 38K红外光
flag=1;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
set_count=168;//间隔4.5ms
flag=0;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
ircode=systemcode;//发送8位系统码
sendcode_8();
ircode=~systemcode;//发送8位系统码的反码
sendcode_8();
ircode=irdata;//发送8位按键码
sendcode_8();
ircode=~irdata;//发送8位按键码的反码
sendcode_8();

}

void keyscan(void)
{ keyflag=1; irdata=120;}


void main(void)
{
init_timer();
count=0;
flag=0;
ir=1;
while(1)
{
keyscan();
if(keyflag)
{
delay(10);
sendcode();
delay(500);
keyflag=0;
}

}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-29 12:32 , Processed in 0.050461 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表