欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機紅外解碼程序能每條代碼都解釋下么?看不懂
[打印本頁]
作者:
清御
時間:
2023-12-21 08:17
標題:
單片機紅外解碼程序能每條代碼都解釋下么?看不懂
謝謝大家
//包含頭文件
#include "REG51.h"
#include "stdio.h"
//定義數據類型
#define uchar unsigned char
#define uint unsigned int
//控制變量
uchar Buffer[20];
uint Old_HW = 0xff;
extern void delayms(uint x);
extern void Init_1602(void);
extern void Xian_String(uchar x,uchar y,uchar *p);
//定義引腳
sbit IRED=P3^2;
//紅外控制變量
uchar gired_data[4];//存儲4個字節接收碼(地址碼+地址反碼+控制碼+控制反碼
/*******************************************************************************
* 函 數 名 : delay_10us
* 函數功能 : 延時函數,ten_us=1時,大約延時10us
* 輸 入 : ten_us
* 輸 出 : 無
*******************************************************************************/
void delay_10us(unsigned int ten_us)
{
while(ten_us--);
}
/*******************************************************************************
* 函 數 名 : ired_init
* 函數功能 : 紅外端口初始化函數,外部中斷0配置
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void ired_init(void)
{
IT0=1; //下降沿觸發
EX0=1; //打開中斷0允許
EA=1; //打開總中斷
IRED=1; //初始化端口
}
//紅外函數
void Hongwai(void)
{
if(gired_data[2] != Old_HW)
{
Old_HW = gired_data[2];
}
}
//顯示函數
void Display(void)
{
sprintf(Buffer,"Key:0X%02X ",Old_HW);
Xian_String(0,0,Buffer);
}
//主函數
int main(void)
{
//初始化
uchar Old_ZhuangTai = 0xff;
ired_init();
Init_1602();
while(1)
{
Hongwai(); //紅外
Display(); //顯示
delayms(100); //延時
}
}
void ired() interrupt 0 //外部中斷0服務函數
{
uchar ired_high_time=0;
unsigned int time_cnt=0;
uchar i=0,j=0;
if(IRED==0)
{
time_cnt=1000;
while((!IRED)&&(time_cnt))//等待引導信號9ms低電平結束,若超過10ms強制退出
{
delay_10us(1);//延時約10us
time_cnt--;
if(time_cnt==0)return;
}
if(IRED)//引導信號9ms低電平已過,進入4.5ms高電平
{
time_cnt=500;
while(IRED&&time_cnt)//等待引導信號4.5ms高電平結束,若超過5ms強制退出
{
delay_10us(1);
time_cnt--;
if(time_cnt==0)return;
}
for(i=0;i<4;i++)//循環4次,讀取4個字節數據
{
for(j=0;j<8;j++)//循環8次讀取每位數據即一個字節
{
time_cnt=600;
while((IRED==0)&&time_cnt)//等待數據1或0前面的0.56ms結束,若超過6ms強制退出
{
delay_10us(1);
time_cnt--;
if(time_cnt==0)return;
}
time_cnt=20;
while(IRED)//等待數據1或0后面的高電平結束,若超過2ms強制退出
{
delay_10us(10);//約0.1ms
ired_high_time++;
if(ired_high_time>20)return;
}
gired_data[i]>>=1;//先讀取的為低位,然后是高位
if(ired_high_time>=8)//如果高電平時間大于0.8ms,數據則為1,否則為0
gired_data[i]|=0x80;
ired_high_time=0;//重新清零,等待下一次計算時間
}
}
}
if(gired_data[2]!=~gired_data[3])//校驗控制碼與反碼,錯誤則返回
{
for(i=0;i<4;i++)
gired_data[i]=0;
return;
}
復制代碼
作者:
heicad
時間:
2023-12-21 15:25
這里有詳細的注釋,你看他的解碼函數 和你這個一樣的
http://www.raoushi.com/bbs/dpj-108717-1.html
http://www.raoushi.com/bbs/dpj-29835-1.html
作者:
man1234567
時間:
2023-12-22 09:39
感覺這個已經注釋得很清楚了
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1