📄 解码.lst
字号:
C51 COMPILER V7.06 解码 08/18/2008 07:13:16 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 解码
OBJECT MODULE PLACED IN 解码.OBJ
COMPILER INVOKED BY: d:\Keil2\C51\BIN\C51.EXE 解码.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*copyright 2007,ShangHai HaoTun Electronic Technology co.,Ltd
2 *
3 *This sample is used for control light by infrared .
4 *
5 *write by Shifang
6 *
7 *V1.1
8 */
9 //使用12M晶振 适用于TC9012芯片,其他芯片请自行更改解码时序
10 #include<reg52.h>
11 #include<stdio.h>
12 #include<intrins.h>
13
14 ////////////////////////////////////////////////
15 #define TURE 1
16 #define FALSE 0
17
18 ////////////////////////////////////////////////
19
20 sbit IR=P3^2;//红外接口标志
21
22
23 ////////////////////////////////////////////
24
25 unsigned char irtime;//红外用全局变量
26
27 bit irpro_ok,irok;
28 unsigned char IRcord[4];
29 unsigned char irdata[33];
30
31 //////////////////////////////////////////////
32
33 void Delay(unsigned char mS);
34 void Ir_work(void);
35 void Ircordpro(void);
36
37 //////////////////////////////////////////////////////////////////
38
39 void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
40 {
41 1 irtime++;
42 1 }
43
44 ///////////////////////////////////////////////////////////////////////
45 void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
46 {
47 1 static unsigned char i;
48 1 static bit startflag;
49 1
50 1 if(startflag)
51 1 {
52 2
53 2 if(irtime<42&&irtime>=33)//引导码 TC9012的头码
54 2 i=0;
55 2
C51 COMPILER V7.06 解码 08/18/2008 07:13:16 PAGE 2
56 2 irdata[i]=irtime;//一次存储32位电平宽度
57 2 irtime=0;
58 2 i++;
59 2 if(i==33)
60 2 {
61 3 irok=1;
62 3 i=0;
63 3 }
64 2 }
65 1
66 1 else
67 1 {irtime=0;startflag=1;}
68 1
69 1 }
70
71 ////////////////////////////////////////////////////////////////////
72 void TIM0init(void)//定时器0初始化
73 {
74 1
75 1 TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
76 1 TH0=0x00;//reload value
77 1 TL0=0x00;//initial value
78 1 ET0=1;//开中断
79 1 TR0=1;
80 1 }
81 ///////////////////////////////////////////////////////////////////
82 void EX0init(void)
83 {
84 1 IT0 = 1; // Configure interrupt 0 for falling edge on /INT0 (P3.2)
85 1 EX0 = 1; // Enable EX0 Interrupt
86 1 EA = 1;
87 1 }
88 /****************************************************************/
89
90 /******************************************************************/
91
92 void Ir_work(void)//红外键值散转程序
93 {
94 1 switch(IRcord[2])//判断第三个数码值
95 1 {
96 2 case 0:P0=0xf9;break;//1 显示相应的按键值
97 2 case 1:P0=0xa4;break;//2
98 2 case 2:P0=0xb0;break;//3
99 2 case 3:P0=0x99;break;//4
100 2 case 4:P0=0x92;break;//5
101 2 case 5:P0=0x82;break;//6
102 2 case 6:P0=0xf8;break;//7
103 2 case 7:P0=0x80;break;//8
104 2 case 8:P0=0x90;break;//9
105 2
106 2 }
107 1
108 1
109 1
110 1 irpro_ok=0;//处理完成标志
111 1
112 1 }
113
114 /*****************************************************************/
115 void Ircordpro(void)//红外码值处理函数
116 {
117 1 unsigned char i, j, k;
C51 COMPILER V7.06 解码 08/18/2008 07:13:16 PAGE 3
118 1 unsigned char cord,value;
119 1
120 1 k=1;
121 1 for(i=0;i<4;i++)//处理4个字节
122 1 {
123 2 for(j=1;j<=8;j++) //处理1个字节8位
124 2 {
125 3 cord=irdata[k];
126 3 if(cord>7)//大于某值为1
127 3 {
128 4 value=value|0x80;
129 4 }
130 3 else
131 3 {
132 4 value=value;
133 4 }
134 3 if(j<8)
135 3 {
136 4 value=value>>1;
137 4 }
138 3 k++;
139 3 }
140 2 IRcord[i]=value;
141 2 value=0;
142 2 } irpro_ok=1;//处理完毕标志位置1
143 1
144 1 }
145
146
147
148
149 /////////////////////////////////////////////////////////////////
150
151 void main(void)
152 {
153 1 EX0init(); // Enable Global Interrupt Flag
154 1 TIM0init();//初始化定时器0
155 1
156 1 P2=0x00;//8位数码管全部显示
157 1
158 1 while(1)//主循环
159 1 {
160 2 if(irok)
161 2 {
162 3 Ircordpro();//码值处理
163 3 irok=0;
164 3 }
165 2
166 2 if(irpro_ok)//step press key
167 2 {
168 3 Ir_work();//码值识别散转
169 3 }
170 2 }
171 1 }
172
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 247 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.06 解码 08/18/2008 07:13:16 PAGE 4
DATA SIZE = 39 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -