欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
紅外遙控程序有點(diǎn)看不懂,有沒有大哥能夠幫我解釋一下,前面定義的數(shù)值問題
[打印本頁]
作者:
brad1111
時間:
2020-5-2 09:10
標(biāo)題:
紅外遙控程序有點(diǎn)看不懂,有沒有大哥能夠幫我解釋一下,前面定義的數(shù)值問題
#define Imax 14000 //此處為晶振為11.0592時的取值,
#define Imin 8000 //如用其它頻率的晶振時,
#define Inum1 1450 //要改變相應(yīng)的取值。
#define Inum2 700
#define Inum3 3000
unsigned char f=0;
unsigned char Im[4]={0x00,0x00,0x00,0x00};
unsigned char show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
/************************************************************************/
//延時函數(shù)
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/************************************************************************/
//外部中斷解碼程序
void intersvr1(void) interrupt 2 using 1
{
Tc=TH0*256+TL0; //提取中斷時間間隔時長
TH0=0;
TL0=0; //定時中斷重新置零
if((Tc>Imin)&&(Tc<Imax))
{
m=0;
f=1;
return;
} //找到啟始碼
if(f==1)
{
if(Tc>Inum1&&Tc<Inum3)
{
Im[m/8]=Im[m/8]>>1|0x80; m++;
}
if(Tc>Inum2&&Tc<Inum1)
{
Im[m/8]=Im[m/8]>>1; m++; //取碼
}
if(m==32)
{
m=0;
f=0;
if(Im[2]==~Im[3])
{
IrOK=1;
}
else IrOK=0; //取碼完成后判斷讀碼是否正確
}
//準(zhǔn)備讀下一碼
}
}
/************************************************************************/
//前速前進(jìn)
void run(void)
{
Left_moto_go ; //左電機(jī)往前走
Right_moto_go ; //右電機(jī)往前走
}
//前速后退
void backrun(void)
{
Left_moto_back ; //左電機(jī)往前走
Right_moto_back ; //右電機(jī)往前走
}
//左轉(zhuǎn)
void leftrun(void)
{
Left_moto_back ; //左電機(jī)往前走
Right_moto_go ; //右電機(jī)往前走
}
//右轉(zhuǎn)
void rightrun(void)
{
Left_moto_go ; //左電機(jī)往前走
Right_moto_back ; //右電機(jī)往前走
}
//STOP
void stoprun(void)
{
Left_moto_Stop ; //左電機(jī)往前走
Right_moto_Stop ; //右電機(jī)往前走
}
/*********************************************************************/
/*--主函數(shù)--*/
void main(void)
{
m=0;
f=0;
IT1=1;
EX1=1;
TMOD=0x11;
TH0=0;
TL0=0;
TR0=1;
EA=1;
delay(100);
while(1) /*無限循環(huán)*/
{
if(IrOK==1)
{
switch(Im[2])
{
case 0x0e: run(); //前進(jìn)
break;
case 0x1a: backrun(); //后退
break;
case 0x0a: leftrun(); //左轉(zhuǎn)
break;
case 0x1e: rightrun(); //右轉(zhuǎn)
break;
case 0x05: stoprun(); //停止
break;
default:break;
}
IrOK=0;
}
}
}
作者:
brad1111
時間:
2020-5-2 09:14
那個14000和8000是代表起始碼低電平9ms和9+4.5=13.5ms的嗎?
然后那個1450 700 1450是什么意思 還有Im【4】=0x00,show【2】={0,0}是什么意思
#define Imax 14000 //此處為晶振為11.0592時的取值,
#define Imin 8000 //如用其它頻率的晶振時,
#define Inum1 1450 //要改變相應(yīng)的取值。
#define Inum2 700
#define Inum3 3000
unsigned char f=0;
unsigned char Im[4]={0x00,0x00,0x00,0x00};
unsigned char show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
作者:
brad1111
時間:
2020-5-2 09:15
我網(wǎng)上找的一個程序,自己改了一下定時器,紅外遙控控制小車就做出來了,但是前面定義有點(diǎn)看不懂,答辯的時候不知道怎么辦
作者:
神蜂
時間:
2020-5-2 15:39
看程序解的是NEC協(xié)議的紅外線編碼,
紅外線NEC協(xié)議邏輯1為2.25ms, 邏輯0為1.12ms,邏輯1,0的脈沖時間都是560us。
Inum1 Inum2 Inum3就是用于區(qū)分接收的時間是邏輯1還是邏輯0.
NEC協(xié)議的紅外線編碼它首次發(fā)送的是9ms的高電平脈沖,其后是4.5ms的低電平,
接下來就是8位的地址碼 ,而后是8位的地址碼的反碼 。
然后是8位的命令碼(也 叫健值碼什么的),而后是8位的命令碼的反碼。
Im【4】這個數(shù)組就是用于儲存地址碼,地址反碼,命令碼,命令反碼。
不知道你答辯“應(yīng)付的”師傅對紅外線了解程度怎么樣。
最好還是要 “前(全)” 面了解一下NEC協(xié)議的紅外線編碼的結(jié)構(gòu)。一定要做到心中有數(shù),才能巧舌如簧。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1