㈠ 關於單片機TC9012紅外編碼問題
沒寫錯,只不過時間周期最長,具體得看晶振頻率。
是1
沒看懂,好像沒表達清楚有錯別字
此程序外部中斷優先順序比定時器中斷優先順序高
得看主程序
㈡ 單片機紅外解碼程序問題,完全不能理解
「我並非一點基礎也沒有」
很遺憾,從你提的這三個問題來看,你的基礎比0隻多出一點點。
(1)Tc是個16位整型。這是16位整型的基本演算法。Tc保存的是抓出的脈寬。
(2)引導碼就是指定寬度的脈沖,數據碼是短一些的脈沖——所以才會那麼大費周章地抓脈寬判斷是引導碼還是用戶碼。接收是否反相要查你所用接收頭的手冊,有可能跟你的程序是相反的。
(3)m不是位元組序號而是位序號。注意前面的/8。
加油啊
㈢ c51單片機紅外NEC編碼解碼!
這個程序太簡單了,我之前寫過紅外發射程序的,接收程序也很簡單,你這個項目我2個小時都能幫你解決,但是89C52單片機發射38K不準需要把晶振加大,提高單片機的運行速度。
你的項目只要主機A發射紅外協議後面加一個地址,單片機B接收的時候全部進入接收狀態,判接收的地址是否符合對於單片機B的地址,如果地址符合,那就先回應一個數據例如:55FF55,主機接收到55FF55後後面開始接收數據,把接收到的數據直接寫入單片機內EEPRM裡面!
㈣ 51單片機紅外遙控程序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden = P2^7;
sbit lcdrs = P2^6;
sbit lcdwr = P2^5;
sbit IR = P3^2;
uchar IRCOM[6];//數組,用於存儲紅外編碼
uchar code table1[] = "remote control";
uchar code table2[] = "CODE:";
void delayms(uchar x)// 延時x*0.14ms
{
uchar i;
while(x--)
for(i=0;i<13;i++){}
}
void delay(uchar x) //延時xms
{
uchar i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/****************************LCD部分***********************************************/
void write_com(uchar com)
{
lcden = 0;
lcdrs = 0;
lcdwr = 0;
P0 = com;
delay(5);
lcden = 1;
delay(5);
lcden = 0; //別忘了lcden拉低
}
void write_date(uchar date)
{
lcden = 0;
lcdrs = 1;
lcdwr = 0;
P0 = date;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void lcd_init(void)
{
lcden = 0;
lcdrs = 0;
lcdwr = 0;
delay(5);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
/*****************main()************************/
void main(void)
{
uchar count=0;
IR = 1;
lcd_init();
write_com(0x80);
while(table1[count]!='\0')
{
write_date(table1[count]);
count++;
delay(5);
}
count = 0;
write_com(0x80+0x40);
while(table2[count]!='\0')
{
write_date(table2[count]);
count++;
delay(5);
}
IE = 0x81; //開中斷
TCON = 0x01;//脈沖負邊沿觸發
while(1);
}
/*********************紅外中斷**************************/
void IR_time() interrupt 0
{
uchar i,j,TimeNum=0;//TimeNum用來計IR高電平次數 從而判斷是0還是1
EX0 = 0; //關閉中斷
delayms(5);
if(1 == IR)
{
EX0 = 1;
return;
}
while(!IR) //跳過9ms前導低電平
delayms(1);
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IR) //跳過4.5ms的前導高電平
delayms(1);
while(!IR) //跳過0.56ms的低電平
delayms(1);
while(IR)
{
TimeNum++; //計時高電平時間從而判斷讀取的是0還是1
delayms(1);
}
if(TimeNum>=30)//按鍵按下時間過長 跳過
{
EX0 = 1;
return;
}
IRCOM[i] = IRCOM[i]>>1;
if(TimeNum >= 8) //8*0.14ms 這時讀取的是1;
{
IRCOM[i] = IRCOM[i]|0x80;
}
TimeNum = 0;
}
}
if(IRCOM[2]!=~IRCOM[3])//判斷八位數據和八位數據反碼是否相等
{
EX0 = 1;
return;
}
IRCOM[4] = IRCOM[2]&0x0f;//取低四位
IRCOM[5] = IRCOM[2]>>4; //IRCOM[5]取IRCOM[2]高四位
if(IRCOM[4] > 9) //轉換成字元
{
IRCOM[4] = IRCOM[4] + 0x37;
}
else
IRCOM[4] = IRCOM[4] + 0x30;
if(IRCOM[5] > 9)
{
IRCOM[5] = IRCOM[5] + 0x37;
}
else
IRCOM[5] = IRCOM[5] + 0x30;
delay(5);
write_com(0x80 + 0x40 + 5);
write_date(IRCOM[5]);
write_date(IRCOM[4]);
EX0 = 1; //重新開啟外部中斷
}
㈤ 用51單片機紅外編碼的問題
我買的個51開發板上有紅外功能,不過我還沒試過,你要的話可以給我發郵件。
我把這個圖和程序發給你吧,可能對你有點參考價值
剛剛給你發過去了,請查收下。源程序、電路圖、開發板說明都有。
㈥ 單片機紅外遙控器鍵值
紅外編碼一般組成是:低8位用戶碼、高8位用戶碼、8位數據碼、8位數據碼反碼。用戶碼用於區分遙控器和不同接收設備的對應關系(就是一個遙控器對應一個接收設備),8位數據碼是告訴接收設備你是按的哪個鍵,8位數據碼反碼是接收設備驗證收到的8位數據碼的正確性。你所說的單片機紅外遙控器鍵值就是指8位數據碼,確定遙控器各個按鍵和接收設備各個功能的對應關系。回答完畢,希望對你有所幫助。
㈦ 單片機控制紅外編碼解碼,不用編碼解碼晶元,怎麼實現呢
可以實現,數字信號都是0和1組成的嘛,而且現在的單片機很多帶比較器功能的,可以整形紅外接收管輸入信號。前提是你的單片機足夠快,能夠處理紅外信號。 查看原帖>>
㈧ 最簡單51單片機紅外編碼獲取問題
這有個帖子,你看了就明白,看看是怎樣實現輸入晶振頻率自適應解碼。
#define CPU_Fosc 12000000L //輸入主頻,自適應解碼(單位:Hz,范圍:6MHz ~ 40MHz)
紅外線解碼程序+遙控器程序+模擬文件(可定義任意I/O作接收腳,支持長/短按,適應6MHz~40MHz)
http://www.ourdev.cn/thread-5155483-1-1.html
㈨ 單片機控制紅外遙控編碼解碼中定時器和外部中斷的作用是什麼紅外遙控編碼解碼的大致步驟是什麼
同時使用上定時器 跟 外中斷 的紅外程序,只有解碼程序。而且該方式,只能解析 使用不同時間長度代表數據「0」、「1」 的波形(如數據『1』的時間長度 2倍於數據『0』的時間)。
解析原理:外部中斷接 紅外輸入,當有 紅外信號的時候,該引腳會有波形輸入(N多下降沿),觸發外部中斷,通過記錄 每2次中斷的時間間隔,可以判斷此段時間對應的數據(0/1)。一般「數據」長度為32位數據
注意點:
①初次產生外中斷的時候,並無 時間記錄,不需要進行時間判斷;
②第二次中斷與第一次中斷 之間 的時間,是 紅外的引導碼,該時間一般多倍於數據時間(一般為ms級時間);
③第三次中斷與第二次中斷的時間,即為 第一個數據 的時間;
④第34次中斷與第33次中斷的時間間隔,即為 第32個數據的時間;
⑤後面 可能存在 停止位,是否存在,由遙控器決定;不過,一般都直接忽略該位,除非該位是由自己製作的遙控器 發出 的校驗位;
⑥後面 可能存在 連發碼,是否存在,由遙控器決定;
另外:一般紅外數據的每個位元組都是LSB在前,MSB在後的( 低位先發,高位後發)
軟體要處理以下情況:
①干擾的處理,有些紅外接收頭不僅僅對38KHz頻率光有反應,可能對人體紅外、日光燈紅外一樣有反應,那就存在干擾。如果它只產生一次干擾,就會使系統卡在引導碼接收階段;
②引導碼時間過短、過長 的處理;
③接收數據位數不足的處理;
④完成32位數據接收後,處理接收爛尾:後面不會有中斷(如果需接收停止位、連發碼,就增加對應數據長度),需要停止計時。
⑤進行數據校對,一般第一位元組跟第二位元組互為反碼,第三位元組跟第四位元組互為反碼,而且第一位元組 代表 一個地址、一個密碼,只有地址、密碼正確,才能算合法的操作。