亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
格力空調遙控器(YB0F2)單片機解碼程序
[打印本頁]
作者:
51黑bug
時間:
2016-6-23 22:14
標題:
格力空調遙控器(YB0F2)單片機解碼程序
紅外解碼的仿真和完整代碼下載詳見:
http://www.denmoz.com/bbs/dpj-52500-1.html
格力空調遙控器(YB0F2)解碼
CUP:STC89C52RC 晶振:11.0569MHz
直接由串口輸出 波特率:57600
************************************ 說 明 **********************************************
解碼方式:
以一個9ms的低電平和4.5ms的高電平為引導碼,后跟35位二進制代碼 接著0.565ms低電平和20MS高電平跟32位二進制代碼
前4個字節每個字節為8位,中間1個字節只有3位,接著為20MS高電平,跟后4個字節每個字節為8位
以低電平為0.565ms、高電平為0.56ms、 周期為1.125ms的組合表示"0";
以低電平為0.565ms、高電平為1.685ms、周期為2.25ms的組合表示"1"。;
注意:經過紅外接收頭解調后單片機接收到的高低電平是和遙控器發射時是相反的一個過程
* 兼容 1T-12T單片機中斷方式紅外接收數據,并通過串口發送
程序編輯: lbq691477940 22/07/2011
/*******************************************************************************************/0 S# V) ~# ^" a+ k2 V
/*******************************************************************************************/
#include <reg52.h>
typedef unsigned char uint8;
sbit Ir_Pin = P3^2;
uint8 Ir_Buf[9]; //用于保存解碼結果
/*******************************************************************************************
* 外部中斷0初始化
/*******************************************************************************************/' z% ?5 r+ `" u9 c
void int1_init(void)
{
IT0 = 1; //下降沿有效
EX0 = 1;
EA = 1;
}
/*******************************************************************************************
* UART初始化1 l2 N5 e* e; }
* 波特率:9600 波特率:57600
/*******************************************************************************************/4 S2 o! d c, k" o1 T
void uart_init(void)
{
TMOD = 0x21;
/* SCON = 0x50;
TH1 = 0xFD; //9600bps @ 11.0592MHz
TL1 = 0xFD;
TR1 = 1;
SCON = 0x50;
PCON |= 0x80;
TH1 = 0xff; //57600bps @ 11.0592MHz;
TL1 = 0xff;
TR1 = 1;
}
/****************************** 延時21ms子程序 ************************************
void delay21ms(void)
{
uint8 a,b;
for(b=150;b>0;b--)
for(a=63;a>0;a--);
}
/*******************************************************************************************/' ]! m' Y$ d" t0 s
/*******************************************************************************************
* UART發送一字節
/*******************************************************************************************/1 l' a& ^# P: Z
void UART_Send_Byte(uint8 dat)
{
SBUF = dat;
while (TI == 0);
TI = 0;
}
/*******************************************************************************************
* 獲取低電平時間/
/*******************************************************************************************/
unsigned int Ir_Get_Low()
{
TL0 = 0;
TH0 = 0;
TR0 = 1;
while (!Ir_Pin && (TH0 & 0x80)==0);//一直計到Ir_Pin不等0與計到大于1.085*32768=35553.28us
TR0 = 0;
return (TH0 * 256 + TL0); //返回T1 高八位和低八位計數值
}
/*******************************************************************************************
* 獲取高電平時間
/*******************************************************************************************/
unsigned int Ir_Get_High()
{
TL0 = 0;
TH0 = 0;
TR0 = 1;
while (Ir_Pin && (TH0 & 0x80)==0);//一直計到Ir_Pin不等1與計到大于1.085*32768=35553.28us
TR0 = 0;
return (TH0 * 256 + TL0); //返回T1 高八位和低八位計數值' k: M5 q6 C7 h, X* t, b
}
/********************************** 主函數 ****************************************
main()
{
uart_init();
int1_init();
while (1);
}
/**************************** 外部中斷0解碼函數 ****************************************/
void int1_isr() interrupt
{
unsigned int temp;9 }
char i,j;
temp = Ir_Get_Low();
if ((temp < 7833) || (temp > 8755)) //引導脈沖低電平8500~9500us: g2 X: z( {; _/ h0 T
return; //不在這范圍則說明出錯 //1.085*7833=8498us ~ 1.085*8755=9499us
temp = Ir_Get_High();
if ((temp < 3686) || (temp > 4608)) //引導脈沖高電平4000~5000us
return; //不在這范圍則說明出錯 //1.085*3686=3999us ~ 1.085*4608=4999us
/*******************************************************************************************/
for (i = 0; i < 4; i++) //4個字節
{
for (j = 0; j < 8; j++) //每個字節8位
{
temp = Ir_Get_Low();
if ((temp < 184) || (temp > 737)) //200~800us
return; //不在這范圍則說明出錯 //1.085*200=217us ~ 1.085*800=868us
temp = Ir_Get_High();
if ((temp < 184) || (temp > 1843)) //200~2000us3 r! _ a# t$ Z6 ?- W: u9 h
return; //不在這范圍則說明出錯 //1.085*200=217us ~ 1.085*2000=2170us
Ir_Buf[i] >>= 1; //先將它自動補0: _5 Y, \# b0 f. t
if (temp > 1032) //1120us //1.085*1032=1119us
Ir_Buf[i] |= 0x80; //如果大于1119us才將它設為1
}
}
/************************** 第5個字節只有三位故只讀其低三位即可 ************************/& X+ k8 {8 `: `
for (i = 4; i <= 4; i++) //1個字節/ J% I0 |5 L) ]( \) k h* ]1 {( c
{ Ir_Buf[i] = 0;
for (j = 0; j < 3; j++) //每個字節8位# ~- y2 e [4 Q' i: j9 ^# {" Y6 g O% {
{
temp = Ir_Get_Low();
if ((temp < 184) || (temp > 737)) //200~800us
return; //不在這范圍則說明出錯 //1.085*200 = 217us ~ 1.085*800 = 868us
temp = Ir_Get_High();
if ((temp < 184) || (temp > 1843)) //200~2000us
return; //不在這范圍則說明出錯 //1.085*200 = 217us ~ 1.085*2000 = 2170us
Ir_Buf[i] <<= 1; //先將它自動補0( F/ ^$ Q8 F6 [; ]' v$ [* g
if (temp > 1032) //1120us //1.085*1032 = 1119us
Ir_Buf[i] |= 0x01; //如果大于1119us才將它設為1
}
}
/*******************************************************************************************/
//delay21ms(); //實測波形只20ms但如果只延時20ms讀出會出錯故延時21ms" ?8 _% g# m" h' `# u' W& @! d1 O% m
temp = Ir_Get_Low();
if ((temp < 184) || (temp > 737)) //200~800us, h+ Q* e X' K; R w
return; //不在這范圍則說明出錯 //1.085*200 = 217us ~ 1.085*800 = 868us" K" [( _, t2 e7 n
temp = Ir_Get_High();7 N9 u* B$ N5 Z# a
if ((temp < 17498) || (temp > 19354)) //19~21ms
return; //不在這范圍則說明出錯 //1.085*17498 = 18985us ~ 1.085*19354 = 20999us4 y( g4 Z" j0 p2 t
/*******************************************************************************************/
for (i = 5; i < 9; i++) //4個字節3 t( G& X3 {( P Y- @
{! Y6 h2 C: O0 ?! o+ g
for (j = 0; j < 8; j++) //每個字節8位8 K/ D! g6 ~+ w) i/ o' c
{
temp = Ir_Get_Low();1 \3 O o! c4 h% I* ]
if ((temp < 184) || (temp > 737)) //200~800us: d$ y* I8 Z( k
return; //不在這范圍則說明出錯 //1.085*200 = 217us ~ 1.085*800 = 868us# E) P4 H! H9 l! S2 z1 i
temp = Ir_Get_High();, L2 f7 G. u: H1 E
if ((temp < 184) || (temp > 1843)) //200~2000us
return; //不在這范圍則說明出錯 //1.085*200 = 217us ~ 1.085*2000 = 2170us! ?( I/ B" p+ }9 S" j
Ir_Buf[i] >>= 1; //先將它自動補0
if (temp > 1032) //1120us //1.085*1032 = 1119us
Ir_Buf[i] |= 0x80; //如果大于1119us才將它設為1
}
}
/*******************************************************************************************/
for(i = 0;i < 9;i++) //通過串口將代碼發出9 w- f# k) U* |% y3 o, d' k
{ 6 E$ Q7 L. J2 ~; E" T
UART_Send_Byte(Ir_Buf[i]); //將9個字節的遙控鍵值通過串口輸出$ Z# D U3 Q6 O4 q% e+ B9 H% } U
}7 C2 ^( Z& Z* L
}5 ^; G* g) _( P% S: S, s5 M
/*******************************************************************************************/
復制代碼
作者:
ahshmj
時間:
2016-6-24 09:34
是有亂碼吧?
作者:
口可西西
時間:
2017-2-26 16:07
有沒有一個具體的實際項目程序打包呢,同求 QQ2777032763
作者:
lxa0
時間:
2017-2-26 22:43
有50462發射芯片的解碼程序嗎?
作者:
余生不負
時間:
2018-4-26 15:13
有亂碼的 不行的的
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1