日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]1 可以用,要弄懂的話就要去看看HT6221的時序圖。23 C51的紅外解碼程序,可以根據(jù)需要自己修改:4 /////////////////////////////////////////////5 //12Mhz6 //根據(jù)自己的接線來改7 sbit IRIN = P3^2; //紅外接

1 可以用,要弄懂的話就要去看看HT6221的時序圖。

2

3 C51的紅外解碼程序,可以根據(jù)需要自己修改:

4 /////////////////////////////////////////////

5 //12Mhz

6 //根據(jù)自己的接線來改

7 sbit IRIN = P3^2; //紅外接收器數(shù)據(jù)線

8 /////////////////////////////////////////////

9

10 ////////////////////////////////////////////

11 //定義數(shù)組IRCOM,分別裝解碼后得到的數(shù)據(jù)

12 //IRCOM[0] 低8位地址碼

13 //IRCOM[1] 高8位地址碼

14 //IRCOM[2] 8位數(shù)據(jù)碼

15 //IRCOM[3] 8位數(shù)據(jù)碼的反碼

16 /////////////////////////////////////////////

17 uchar IRCOM[4]=0;

18

19 #define uchar unsigned char

20 #define uint unsigned int

21 /********************************************/

22 void delay014ms(unsigned char x); //x*0.14MS

23 void IR_init(void);

24 void IR_CODE(void);

25

26 void delay014ms(unsigned char x) //x*0.14MS

27 {

28 unsigned char i;

29 while(x--)

30 {

31 for (i = 0; i<13; i++) {}

32 }

33 }

34

35 ///////////////////////////////////////

36 //初始化

37 //////////////////////////////////////

38 void IR_init(void)

39 {

40 EX0=1; //允許總中斷中斷,使能 INT0 外部中斷

41 TCON = 0x01; //觸發(fā)方式為脈沖負邊沿觸發(fā)

42 IRIN=1; //I/O口初始化

43 }

44

45 /////////////////////////////////////

46 //解碼過程

47 /////////////////////////////////////

48 void IR_CODE(void)

49 {

50 unsigned char j,k,N=0;

51 EX0 = 0;

52 delay014ms(15);

53 if (IRIN==1)

54 { EX0 =1;

55 return;

56 } //確認IR信號出現(xiàn)

57 while (!IRIN) //等IR變?yōu)楦唠娖?,跳過9ms的前導低電平信號。

58 {delay014ms(1);}

59

60 for (j=0;j<4;j++) //收集四組數(shù)據(jù)

61 {

62 for (k=0;k<8;k++) //每組數(shù)據(jù)有8位

63 {

64 while (IRIN) //等 IR 變?yōu)榈碗娖?,跳過4.5ms的前導高電平信號。

65 {delay014ms(1);}

66 while (!IRIN) //等 IR 變?yōu)楦唠娖?/p>

67 {delay014ms(1);}

68 while (IRIN) //計算IR高電平時長

69 {

70 delay014ms(1);

71 N++;

72 if (N>=30)

73 { EX0=1;

74 return;} //0.14ms計數(shù)過長自動離開。

75 } //高電平計數(shù)完畢

76 IRCOM[j]=IRCOM[j] >> 1; //數(shù)據(jù)最高位補“0”

77 if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //數(shù)據(jù)最高位補“1”

78 N=0;

79 }

80 }

81 if (IRCOM[2]!=~IRCOM[3]) //不等的話表示解碼失敗

82 {

83 IRCOM[4]=0;

84 EX0=1;

85 return;

86 }

87

88 pro();//解碼成功后運行的程序

89 EX0=1;

90 return;

91 }


所謂解碼就是能用單片機把以不同寬度的脈沖區(qū)別開來,一種比較好思路就是計算兩次下降沿間隔時間,當單片機外部中斷1口有下降沿時中斷一次,并啟動定時器,定時器定50us,當下次下降沿到來時我們計算定時器中斷的次數(shù),這樣我們就能很好的區(qū)分不同寬度的脈沖了。實際上,我們紅外接收頭收到的信號的是有毛刺的,在下降沿中斷觸發(fā)后,要做延時去抖處理。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉