?? ir_shu_ma_guan.lst
字號:
C51 COMPILER V7.06 IR_SHU_MA_GUAN 04/11/2007 16:33:23 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IR_SHU_MA_GUAN
OBJECT MODULE PLACED IN IR_shu_ma_guan.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE IR_shu_ma_guan.c BROWSE DEBUG OBJECTEXTEND TABS(2)
stmt level source
1 /****************************************
2 程序功能:紅外一體化接收遙控器的編碼并解碼,
3 LED數碼管顯示遙控器按下的數字,并且如果
4 紅外解碼成功的話, 蜂鳴器發出"滴滴"的聲音
5 表示解碼成功
6 ****************************************/
7
8 #include <reg52.h>
9 #include <stdio.h>
10
11 sbit sound=P3^3; //蜂鳴器
12 sbit IR=P3^2; //P3.2為紅外一體化接收
13
14 unsigned char dm,i,j,k;
15 unsigned char aa[2]; //定義2個數組,用來存儲代碼,8位的數據碼和8位的數據反碼
16 unsigned long bb; //定義bb用來存放用戶識別碼,這里采用的是26位的用戶識別
17
18
19 //0.9ms
20 void delay0_9ms(void)
21 {
22 1 unsigned char j,k;
23 1 for(j=18;j>0;j--)
24 1 for(k=20;k>0;k--) ;
25 1 }
26
27 //1ms
28 void delay1ms(void)
29 {
30 1 unsigned char i,j;
31 1 for(i=2;i>0;i--)
32 1 for(j=230;j>0;j--) ;
33 1 }
34
35 //4.5ms
36 void delay4_5ms(void)
37 {
38 1 unsigned char i,j;
39 1 for(i=10;i>0;i--)
40 1 for(j=225;j>0;j--) ;
41 1 }
42
43 //100ms
44 void delay100ms(void)
45 {
46 1 unsigned char i,j,k;
47 1 for(i=200;i>0;i--)
48 1 for(j=20;j>0;j--)
49 1 for(k=10;k>0;k--) ;
50 1 }
51
52
53
54 LED_display(unsigned char date)
55 {
C51 COMPILER V7.06 IR_SHU_MA_GUAN 04/11/2007 16:33:23 PAGE 2
56 1 switch(date)
57 1 {
58 2 case 0x11: {P1=0x00;P2=0xf9;break;} //顯示1
59 2 case 0x12: {P1=0x00;P2=0xa4;break;} //顯示2
60 2 case 0x13: {P1=0x00;P2=0xb0;break;} //顯示3
61 2 case 0x14: {P1=0x00;P2=0x99;break;} //顯示4
62 2 case 0x15: {P1=0x00;P2=0x92;break;} //顯示5
63 2 case 0x16: {P1=0x00;P2=0x82;break;} //顯示6
64 2 case 0x17: {P1=0x00;P2=0xf8;break;} //顯示7
65 2 case 0x18: {P1=0x00;P2=0x80;break;} //顯示8
66 2 case 0x19: {P1=0x00;P2=0x90;break;} //顯示9
67 2 case 0x10: {P1=0x00;P2=0xc0;break;} //顯示0
68 2 default: {P1=0x00;P2=0xb6;} //顯示錯誤
69 2 }
70 1 }
71
72
73
74 void main()
75 {
76 1 IT0=1; //外部中斷0觸發方式控制位,下降沿觸發
77 1 EX0=1; //外部中斷0(INT0)中斷允許位
78 1 EA=1; //總中斷
79 1 dm=0;
80 1 P2=0xc0;
81 1 P1=0x00;
82 1 while(1);
83 1 }
84
85
86
87 void t0(void) interrupt 0 using 2//外部中斷0的函數
88 {
89 1 EA=0; //暫時關閉CPU的所有中斷請求
90 1
91 1 for(k=0;k<10;k++) //重復10次,目的是檢測在9毫秒內如果出現高電平就退出解碼程序
92 1 { //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
93 2
94 2 delay0_9ms(); //延時0.9毫秒
95 2 if (IR==1) {k=10;break;} //延時0.9毫秒后判斷P3.2腳是否出現高電平如果有就退出解碼程序
96 2 else if(k==9) //重復10次?
97 2 { //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
98 3 while(IR==0); //等待高電平避開9毫秒低電平引導脈沖
99 3 delay4_5ms(); //延時4.5毫秒避開4.5毫秒的結果碼
100 3
101 3
102 3 /********************************************
103 3 //26位的用戶碼,前13位數據碼,后13位數據反碼
104 3 *********************************************/
105 3 for(j=1;j<=26;j++)//每組數據為26位
106 3 {
107 4 while(IR==0); //
108 4 delay0_9ms();
109 4 if(IR==1)
110 4 {
111 5 delay1ms();
112 5 dm=dm|0x2000000; //因為是26位,一個"1",后面25個"0",轉化二進制即為"1000000
-"
113 5 if(j<26) dm=dm>>1; //數據"1",右移一個"1",一共25次
114 5 }
115 4 else if(j<26) dm=dm>>1; //數據"0",一共25次
116 4 }
C51 COMPILER V7.06 IR_SHU_MA_GUAN 04/11/2007 16:33:23 PAGE 3
117 3 bb=dm;
118 3 dm=0;
119 3
120 3
121 3
122 3 /***************************************************
123 3 //16位的用戶碼,前8位數據碼,后8位數據反碼
124 3 ****************************************************/
125 3
126 3 for(i=0;i<2;i++)
127 3 {
128 4 for(j=1;j<=8;j++)//每組數據為8位
129 4 {
130 5 while(IR==0); //
131 5 delay0_9ms();
132 5 if(IR==1)
133 5 {
134 6 delay1ms();
135 6 dm=dm|0x80;
136 6 if(j<8) dm=dm>>1; //數據"1",右移一個"1",一共7次
137 6 }
138 5 else if(j<8) dm=dm>>1; //數據"0",一共7次
139 5 }
140 4 aa[i]=dm;
141 4 dm=0;
142 4 }
143 3
144 3 /***************************************************
145 3 //顯示部分
146 3 ****************************************************/
147 3 if(aa[0]==~aa[1]) //驗證成功
148 3 {
149 4 sound=0;
150 4 delay100ms();
151 4 LED_display(aa[0]);
152 4 sound=1;
153 4 }
154 3
155 3 } //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
156 2 } //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
157 1 EA=1;
158 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 404 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -