📄 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 + -