?? ird.lst
字號:
C51 COMPILER V7.02a IRD 04/11/2007 22:22:48 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE IRD
OBJECT MODULE PLACED IN IRD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IRD.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 單片機紅外遙控試驗
3
4 趙亮
5 zhaoliang_0801@dl.cn
6 說明: 由于這個試驗不是我的原創,所以沒有過多的發言權,
7 我只是在網上找到了程序,修改之后,用到了我的板子上
8 試驗結果,使用SAA3010 遙控器,板子上焊接紅外接收頭
9 注意一定要在接收頭的電源也地端一定要接上濾波電容
10 我接的是一個10uf和一個104,效果還可以。
11
12 數據線接到單片機的 外部中斷0(P32)
13
14 試驗現象:按下遙控器上的0~9按鍵,對應的P2口
15 會有二進制的指示。
16
17
18 */
19
20 #include "reg51.h"
21 #include " intrins.h "
22
23 unsigned char leddata[]= { //共陰數碼管 0-9 表
24 0x03, //"0"
25 0x9F, //"1"
26 0x25, //"2"
27 0x0D, //"3"
28 0x99, //"4"
29 0x49, //"5"
30 0x41, //"6"
31 0x1F, //"7"
32 0x01, //"8"
33 0x09, //"9"
34 0x11, //"A"
35 0xC1, //"B"
36 0x63, //"C"
37 0x85, //"D"
38 0x61, //"E"
39 0x71, //"F"
40 0x91, //"H"
41 0xE3, //"L"
42 0x13, //"n"
43 0x83, //"u"
44 0x31, //"P"
45 0xC5, //"o"
46 0xFD, //"-"
47 0xFF, //熄滅
48 0xDF //自定義
49 };
50
51
52
53 sbit SM_1 = P1^6;
54 sbit SM_2 = P1^7;
55
C51 COMPILER V7.02a IRD 04/11/2007 22:22:48 PAGE 2
56 #define uchar unsigned char
57
58 uchar ykcode; //遙控碼(14位的最后8位)
59 bit ykok; //遙控數據有效標志
60
61 uchar ykbnum; //遙控已接收位數
62 uchar ykbtc; //遙控中斷時 ykbtc=TH1
63 uchar ykdelay; //遙控延時接收
64 bdata uchar ykcodetemp; //遙控臨時碼
65 sbit ykcodetemp0=ykcodetemp^0;
66
67 unsigned char temp;
68
69 void YkInit(void); //遙控接收初始化
70 unsigned char YkGetcode(void); //返回遙控碼
71 bit YkTest(void); //檢查有無遙控信號
72
73
74
75 void main(void)
76 {
77 1 YkInit();
78 1 SM_1 = 1;
79 1 SM_2 = 0; //點亮第1個數碼管
80 1 SBUF = 0xff;
81 1 while(1)
82 1 {
83 2 unsigned char i;
84 2 if (ykok)
85 2 {
86 3 temp=ykcode;
87 3
88 3 //P2=ykcode;
89 3 SBUF = leddata[temp];
90 3 for(i=0;i<100;i++);
91 3
92 3
93 3 }
94 2
95 2 }
96 1 }
97
98 void YkInit(void) //遙控接收初始化
99 {
100 1 EA=1; //開總中斷
101 1
102 1 TMOD=0x11; //TMOD T0,T1均選用方式1(16位定時)
103 1 SCON=0x00;
104 1 TH1=0;
105 1 TL1=0;
106 1 IE|=0x89;
107 1 IP|=0x01;
108 1 TCON |= 0x41;
109 1 ykbnum=0;
110 1 ykcodetemp=0;
111 1 ykdelay=0;
112 1 }
113
114
115 bit YkTest(void) //檢查有無遙控信號
116 {
117 1 return(ykok);
C51 COMPILER V7.02a IRD 04/11/2007 22:22:48 PAGE 3
118 1 }
119
120 void intx0() interrupt 0 using 2 //遙控使用外部中斷0,接P3.2口
121 {
122 1 ykbtc=TH1;TH1=0;TL1=0;TR1=1;ET1=1;
123 1 switch(ykbnum)
124 1 {
125 2 case(0):
126 2 ykbnum=1;
127 2 break;
128 2 case(1):
129 2 if(ykbtc==6)
130 2 ykbnum=2;
131 2 else
132 2 ykbnum=0;
133 2 break;
134 2 case(2):
135 2 if(ykbtc==6||ykbtc==9)
136 2 ykbnum=3;
137 2 else
138 2 ykbnum=0;
139 2 break;
140 2 case(3):
141 2 if(ykbtc==9||ykbtc==6)
142 2 ykbnum=4;
143 2 else
144 2 ykbnum=0;
145 2 break;
146 2
147 2 default:
148 2 if(ykbnum<7)
149 2 {
150 3 if(ykbtc==6)
151 3 ykbnum++;
152 3 else
153 3 ykbnum=0;
154 3 }
155 2 else
156 2 {
157 3 if(ykbtc==6)
158 3 {
159 4 if(ykcodetemp0)
160 4 ykcodetemp=ykcodetemp*2+1;
161 4 else
162 4 ykcodetemp=ykcodetemp*2;
163 4 ykbnum++;
164 4 }
165 3 else if(ykbtc==9)
166 3 {
167 4 if(ykcodetemp0)
168 4 {
169 5 ykbnum++;
170 5 ykcodetemp=ykcodetemp*2;
171 5 }
172 4 else
173 4 {
174 5 ykbnum+=2;
175 5 ykcodetemp=ykcodetemp*2;
176 5 ykcodetemp=ykcodetemp*2+1;
177 5 }
178 4 }
179 3 else if(ykbtc>11&&ykbtc<15)
C51 COMPILER V7.02a IRD 04/11/2007 22:22:48 PAGE 4
180 3 {
181 4 ykbnum+=2;
182 4 ykcodetemp=ykcodetemp*2;
183 4 ykcodetemp=ykcodetemp*2+1;
184 4 }
185 3 else if(ykbtc>30)
186 3 EX0=1;
187 3 else
188 3 ykbnum=0;
189 3 }
190 2 }
191 1 }
192
193 void intt1() interrupt 3 using 3 //遙控使用定時計數器1
194 {
195 1 if(ykdelay)
196 1 {
197 2 ykdelay--;
198 2 EX0=0;
199 2 } //ykdelay不為0暫停接收
200 1 else
201 1 {
202 2 if(ykbnum==13) //遙控碼最后一位為0,補0
203 2 {
204 3 ykcode=ykcodetemp*=2;
205 3 ykdelay=3;
206 3 EX0=0; //暫停接收
207 3 ykok=1; //遙控數據有效
208 3 }
209 2 else if(ykbnum==14) //遙控碼最后一位為1,不用補
210 2 {
211 3 ykcode=ykcodetemp;
212 3 ykdelay=3;
213 3 EX0=0; //暫停接收
214 3 ykok=1; //遙控數據有效
215 3 }
216 2 else
217 2 EX0=1; //ykbnum不為13,14接收無效,繼續接收
218 2 ykbnum=0;
219 2 ykcodetemp=0;
220 2 }
221 1 }
222
223
224
225
226
227
228
229
230
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 330 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 31 1
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILER V7.02a IRD 04/11/2007 22:22:48 PAGE 5
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -