📄 红外解码.lst
字号:
C51 COMPILER V7.50 红外解码 04/09/2009 18:42:50 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 红外解码
OBJECT MODULE PLACED IN 红外解码.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 红外解码.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 * 文件名 : 红外解码.c
3 * 描述 : 该程序实现用单片机来实现对红外遥控器编码信号的解码。
4 该遥控板使用的是3010的芯片。解码可以参考http://www.laogu.com/laogubbs/vbbs_10079.htm
5 该程序不是标准的红外解码程序,只取了遥控板的按键码,区别出了每个按键。
6 该程序的调试可以用KEIL的软件调试来仿真出准确的时间。
7 注意:做这个实验时,请关闭日光灯,日光灯会干扰红外的解码。
8 * 创建人 : 东流,2009年3月24日
9 * 版本号 : 1.1
10 ***********************************************************************/
11 #include"reg52.h"
12 #include<intrins.h>
13 #define uchar unsigned char
14 #define uint unsigned int
15
16 sbit rf=P3^3; //一体化接收头输出口
17
18 uchar Count = 0;
19 uchar code table[11] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09, 0xff};
20
21 /********************************************************************
22 * 名称 : Delay_1ms()
23 * 功能 : 延时子程序,延时时间为 1ms * x
24 * 输入 : x (延时一毫秒的个数)
25 * 输出 : 无
26 ***********************************************************************/
27 void Delay_1ms(uint i)
28 {
29 1 uchar x,j;
30 1 for(j=0;j<i;j++)
31 1 for(x=0;x<=148;x++);
32 1 }
33
34 /********************************************************************
35 * 名称 : Time0_Init()
36 * 功能 : 定时器的初始化,定时时间可用光碟中软件计算,11.0592MZ晶振
37 定时器工作方式为 2 ,定时时间为200毫秒。
38 * 输入 : 无
39 * 输出 : 无
40 ***********************************************************************/
41 void Time0_Init()
42 {
43 1 TMOD = 0x02;
44 1 IE = 0x82;
45 1 TH0 = 0x76;
46 1 TL0 = 0x76;
47 1
48 1 }
49
50 /********************************************************************
51 * 名称 : Time0_Int()
52 * 功能 : 定时器中断,Count为中断中的自加变量。
53 * 输入 : 无
54 * 输出 : 无
55 ***********************************************************************/
C51 COMPILER V7.50 红外解码 04/09/2009 18:42:50 PAGE 2
56 void Time0_Int() interrupt 1
57 {
58 1 Count++; //长度加1
59 1 }
60
61 /********************************************************************
62 * 名称 : Key_Choose()
63 * 功能 : 键值转换为数码管值
64 * 输入 : 键值
65 * 输出 : 数码管值
66 ***********************************************************************/
67 uchar Key_Choose(uchar Key_temp)
68 {
69 1 uchar return_temp = 0;
70 1 switch(Key_temp)
71 1 {
72 2 case 0x6a:
73 2 return_temp = 1;
74 2 break;
75 2 case 0x9a:
76 2 return_temp = 2;
77 2 break;
78 2 case 0x5a:
79 2 return_temp = 3;
80 2 break;
81 2 case 0xa6:
82 2 return_temp = 4;
83 2 break;
84 2 case 0x66:
85 2 return_temp = 5;
86 2 break;
87 2 case 0x96:
88 2 return_temp = 6;
89 2 break;
90 2 case 0x56:
91 2 return_temp = 7;
92 2 break;
93 2 case 0xd4:
94 2 return_temp = 8;
95 2 break;
96 2 case 0xb4:
97 2 return_temp = 9;
98 2 break;
99 2 case 0xaa:
100 2 return_temp = 0;
101 2 break;
102 2 default: return_temp = 10; //如果不是 0 -- 9 这几个数,数码管不显示
103 2 }
104 1 return return_temp;
105 1 }
106
107 /********************************************************************
108 * 名称 : Main()
109 * 功能 : 主函数
110 * 输入 : 无
111 * 输出 : 无
112 ***********************************************************************/
113 void Main(void)
114 {
115 1 uchar temp, i; //temp用来存按键码
116 1 P0=0xff;
117 1 Time0_Init();
C51 COMPILER V7.50 红外解码 04/09/2009 18:42:50 PAGE 3
118 1 while(1)
119 1 {
120 2
121 2 for(i=0;i<9;i++) //放弃前面数位,因为我们只取后面的按键码
122 2 {
123 3 while(rf);
124 3 while(!rf);
125 3 }
126 2 while(rf);
127 2 TR0 = 1;
128 2 for(i=0; i<8; i++)
129 2 {
130 3 Count = 0;
131 3 while(Count <= 4);
132 3 if(rf == 1) temp += 0<<i; //当一体化接收头输出口为高电平时,点亮LED
133 3 else temp += 1<<i;
134 3 }
135 2 //P0 = temp; //这两行用来把按键码在P0口显示出来,这个也是我Key_Choose()中值的来源。
136 2 //while(1);
137 2 P0 = table[Key_Choose(~temp)];
138 2 P2 = 0x01;
139 2 temp = 0;
140 2 TR0 = 0; //关闭定时器
141 2 TH0 = 0x76; //初始化定时器值
142 2 TL0 = 0x76;
143 2 for(i=0; i<100; i++) //等待一段时间采集下次红外信号
144 2 Delay_1ms(5);
145 2 }
146 1 }
147
148
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 235 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 1
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 + -