欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機任意IO解碼5104紅外碼
[打印本頁]
作者:
李白不喝酒
時間:
2023-4-14 17:01
標題:
單片機任意IO解碼5104紅外碼
void infrared_5104(void);
void infrared_task(void);
#define infrared_io P42
#define user_code 0x0d
#define decode_ok infrared5104_struct.decode_ok
#define state_old infrared5104_struct.state_old
#define wait_rest infrared5104_struct.wait_rest
#define bit_num infrared5104_struct.bit_num
struct{
unsigned char decode_ok:1;
unsigned char state_old:1;
unsigned char wait_rest:1;
unsigned char bit_num:4;
}infrared5104_struct;
unsigned char infrared_count,infrared_5104_buf;
void infrared_5104(void)
{//置于125us定時器中斷中執行
if(wait_rest)
{
if(infrared_io == 1)
{
++infrared_count;
if(infrared_count >= 200)
{
infrared_count = 0;
bit_num = 0;
wait_rest = 0;
}
}
else
{
infrared_count = 0;
}
return;
}
if(infrared_io == 0 && infrared_count < 16)
{
infrared_count++;
}
if(state_old != infrared_io)
{
state_old = infrared_io;
if(state_old == 1)
{//判斷低電平計數
if(infrared_count >= 2 && infrared_count <= 13)
{
infrared_5104_buf <<= 1;
infrared_5104_buf &= 0xfe;
if(infrared_count >= 8)
{//bit1
infrared_5104_buf |= 0x01;
}
bit_num++;
if(bit_num == 4)
{
infrared_5104_buf &= 0x0f;
if(infrared_5104_buf != user_code)
{//用戶碼
wait_rest = 1;
}
}
else if(bit_num == 12)
{
decode_ok = 1;
wait_rest = 1;
}
}
else
{
wait_rest = 1;
}
}
infrared_count = 0;
}
}
void infrared_task(void)
{
if(decode_ok)
{
decode_ok = 0;
}
}
復制代碼
作者:
hurbocn
時間:
2023-4-15 08:42
以前用過5204解碼,想學習一下這個程序,是不是代碼不全?
作者:
李白不喝酒
時間:
2023-4-26 11:28
hurbocn 發表于 2023-4-15 08:42
以前用過5204解碼,想學習一下這個程序,是不是代碼不全?
這就是全部代碼。因為我這邊經常用那種OTP的1K,空間跟RAM很少,所以才寫了這個。能達到解碼需求,同時耗費的資源盡量少即可。總共用了3個RAM。但是這種寫法會略微多點ROM。如果RAM足夠就可以把結構體里那些變量換成全局變量,這樣占用ROM就會減少,占用CPU時間也更少。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1