|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近我在学习有关遥控发射的程序,从网上搜集了一个例程,测试了一下在AT89S52和STC89C52RC上都可以正常运行,手上还有STC15F104W的芯片,就想用到这个芯片上面,改写了程序里的红外发射管端口和按键端口后编译烧写这个发射程序发现在STC15F104W无法正常工作啊,谁能说一下咋样改才可以用?测试了原程序可以正常使用,红外发射管也可以指定另外端口。需要就是简单的1到4按键按下发射对应的键码就可以,对C不太懂,只会看简单的程序,正在学习中。undefined哪位大侠帮忙改一下,或者帮我指点一下,先谢谢各位了。
下面这个是搜集的原程序:晶振12M
#include <reg52.h>
sbit IR = P1^0; //发射引脚(接PNP三极管基极)
sbit IRLED = P1^0;
sbit key=P3^2;
#define USER_H 0X00 //用户码识别码
#define USER_L 0Xff //用户码识别码反码
#define m9 (65536-9000) //9mS
#define m4_5 (65536-4500) //4.5mS
#define m1_6 (65536-1650) //1.65mS
#define m_56 (65536-560) //0.56mS
#define m40 (65536-40000) //40mS
#define m56 (65536-56000) //56mS
#define m2_25 (65536-2250) //2.25mS
void ZZ(unsigned char x); //NEC编码发送程序
void Z0(unsigned char temp); //单帧(8位数据)发送程序
void TT0(bit BT,unsigned int x); //38KHz载波发射 + 延时程序
void delay5ms(void) //误差 0us
{
unsigned char a,b;
for(b=19;b>0;b--)
for(a=130;a>0;a--);
}
void main(void)
{
TMOD = 0x01; //T0 16位工作方式
IR=1; //发射端口常态为高电平
while(1)
{
if(key==0)
{
delay5ms();
if(key==0)
{
ZZ(0x0ce);
while(!key);
}
}
}
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函数:NEC编码发送程序
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void ZZ(unsigned char Value)
{
TT0(1,m9); //高电平9mS
TT0(0,m4_5); //低电平4.5mS
/*┈ 发送4帧数据┈*/
Z0(USER_H ); //用户码高8位
Z0(USER_L ); //用户码低8位
Z0(Value); //操作码
Z0(~Value); //操作码反码
/*┈┈ 结束码 ┈┈*/
TT0(1,m_56);
TT0(0,m40);
/*┈┈ 重复码 ┈┈*/
// while(KEY() != 0)
// {
// TT0(1,m9);
// TT0(0,m2_25);
// TT0(1,m_56);
// TT0(0,m40);
// TT0(0,m56);
// }
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函数:单帧(8位数据)发送程序
入口:temp
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void Z0(unsigned char temp)
{
unsigned char v;
for (v=0;v<8;v++) //循环8次移位
{
TT0(1,m_56); //高电平0.65mS
if(temp&0x01)
TT0(0,m1_6); //发送最低位
else
TT0(0,m_56);
temp >>= 1; //右移一位
}
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函数:38KHz载波发射 + 延时程序
入口:(是否发射载波,延时约 x (uS))
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void TT0(bit BT,unsigned int x)
{
TH0 = x>>8; //输入T0初始值
TL0 = x;
TF0=0; //清0
TR0=1; //启动定时器0
if(BT == 0) while(!TF0); //BT=0时,不发射38KHz载波只延时;BT=1发射38KHz脉冲且延时;
else while(1) //38KHz载波
{
IR = 0;
if(TF0)break;
if(TF0)break;
//IR=0和IR=1的延时语句比例决定了调制波占空比,占空比越小越省电,发射功率越小
IR = 1;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
}
TR0=0; //关闭定时器0
TF0=0; //标志位溢出则清0
IR =1; //载波停止后,发射端口常态为高
}
|
|