📄 yaokongcebianma.lst
字号:
C51 COMPILER V7.50 YAOKONGCEBIANMA 09/29/2007 21:03:29 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE YAOKONGCEBIANMA
OBJECT MODULE PLACED IN yaokongcebianma.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE yaokongcebianma.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //本程序是用来识别 不同的遥控器的按键编码的,对于我们拿到的一块遥控器,
2 //想用它来做实验,但是又不知道对应按键的编码,那是一件很恼火的事情,
3 //作者就是为了解决这个问题而特意把一个遥控程序经过修攺而得此功能
4 #include <reg51.h>
5 #define N 3
6
7 sbit Led = P1 ^ 7;
8 sbit P3_2 = P3 ^ 2;
9 sbit P1_0 = P1 ^ 0;
10 sbit P1_2 = P1 ^ 2;
11 sbit P1_1 = P1 ^ 1;
12 sbit P1_3 = P1 ^ 3;
13 sbit P2_0 = P2 ^ 0;
14 sbit P2_1 = P2 ^ 1;
15 sbit P2_2 = P2 ^ 2;
16
17 static unsigned char data IRCode[3],IRCON,IRCON2;
18 static unsigned char data DT;
19 unsigned char i;
20
21 unsigned char SEG_TAB1[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
22 0xa0, 0x83, 0xc6, 0xa1,0x84, 0x8e };//0-f十六进制数数字
23 unsigned int code daima[] = { 0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X0A,0X0B,0X0C,0X0D,0X0E,
-0X0F
24 /*定义一个数组0~255*/ ,0X10,0X11,0X12,0X13,0X14,0X15,0X16,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D,0X1E,
-0X1F
25 ,0X20,0X21,0X22,0X23,0X24,0X25,0X26,0X27,0X28,0X29,0X2A,0X2B,0X2C,0X2D,0X2E,0X2F
26 ,0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39,0X3A,0X3B,0X3C,0X3D,0X3E,0X3F
27 ,0X40,0X41,0X42,0X43,0X44,0X45,0X46,0X47,0X48,0X49,0X4A,0X4B,0X4C,0X4D,0X4E,0X4F
28 ,0X50,0X51,0X52,0X53,0X54,0X55,0X56,0X57,0X58,0X59,0X5A,0X5B,0X5C,0X5D,0X5E,0X5F
29 ,0X60,0X61,0X62,0X63,0X64,0X65,0X66,0X67,0X68,0X69,0X6A,0X6B,0X6C,0X6D,0X6E,0X6F
30 ,0X70,0X71,0X72,0X73,0X74,0X75,0X76,0X77,0X78,0X79,0X8A,0X7B,0X7C,0X7D,0X7E,0X7F
31 ,0X80,0X81,0X82,0X83,0X84,0X85,0X86,0X87,0X88,0X89,0X8A,0X8B,0X8C,0X8D,0X8E,0X8F
32 ,0X90,0X91,0X92,0X93,0X94,0X95,0X96,0X97,0X98,0X99,0X9A,0X9B,0X9C,0X9D,0X9E,0X9F
33 ,0XA0,0XA1,0XA2,0XA3,0XA4,0XA5,0XA6,0XA7,0XA8,0XA9,0XAA,0XAB,0XAC,0XAD,0XAE,0XAF
34 ,0XB0,0XB1,0XB2,0XB3,0XB4,0XB5,0XB6,0XB7,0XB8,0XB9,0XBA,0XBB,0XBC,0XBD,0XBE,0XBF
35 ,0XC0,0XC1,0XC2,0XC3,0XC4,0XC5,0XC6,0XC7,0XC8,0XC9,0XCA,0XCB,0XCC,0XCD,0XCE,0XCF
36 ,0XD0,0XD1,0XD2,0XD3,0XD4,0XD5,0XD6,0XD7,0XD8,0XD9,0XDA,0XDB,0XDC,0XDD,0XDE,0XDF
37 ,0XE0,0XE1,0XE2,0XE3,0XE4,0XE5,0XE6,0XE7,0XE8,0XE9,0XEA,0XEB,0XEC,0XED,0XEE,0XEF
38 ,0XF0,0XF1,0XF2,0XF3,0XF4,0XF5,0XF6,0XF7,0XF8,0XF9,0XFA,0XFB,0XFC,0XFD,0XFE,0XFF};
39 /*******************************************************************************************/
40 void Delay(unsigned char a) //延时子程序
41 {
42 1 unsigned char j;
-
43 1 while(a-- != 0)
44 1 {
45 2 for (j = 0; j < 100; j++);
46 2 }
47 1 }
48 /*******************************************************************************************/
49 void Disp(void)
50 {
51 1 P2_0= 0;//第7个数码管显示十六进制的十位
52 1 P0 = SEG_TAB1[ (i / 16 )];
C51 COMPILER V7.50 YAOKONGCEBIANMA 09/29/2007 21:03:29 PAGE 2
53 1 Delay(N);
54 1 P2_0 = 1;
55 1
56 1 P2_1 = 0;//第8个数码管显示十六进制的个位
57 1 P0 = SEG_TAB1[ i % 16 ];
58 1 Delay(N);
59 1 P2_1 = 1;
60 1 }
61 /*******************************************************************************************/
62 void timeint(void) interrupt 1 using 2//定时器0中断处理
63 {
64 1 TH0=0XFD; //12M: TH0=0XFC;TL0=0XE0;11.0592:TH0=0XFD;TL0=0X1E;
65 1 TL0=0X1E; // 设定时值为800us 500:FE0C
66 1
67 1 if (IRCON<4)
68 1 {
69 2 if (IRCON2<8) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
70 2 {
71 3 IRCON2++;
72 3 IRCode[IRCON]=IRCode[IRCON]<<1; //每读一次放入变量中的二进制的一个位,每次左移一位
73 3 IRCode[IRCON]=IRCode[IRCON] | P3_2; //每八次填满一个字节,一个字节存放遥控编码4个位
74 3 }
75 2 else
76 2 {
77 3 IRCON++; //填满一个字节,指向下一个变量
78 3 IRCON2=0; //计数清零
79 3 }
80 2 }
81 1 else
82 1 {
83 2 TR0 = 0; //关闭定时器
84 2 ET0 = 0; //定时器0中断关闭
85 2 if ((IRCode[1] != 0xFF) && (IRCode[2] != 0xFF))
86 2 {
87 3 if (IRCode[1] == 0x55)
88 3 {
89 4 DT = 1;
90 4 }
91 3 }
92 2 }
93 1 }
94
95 /***********************************************************************************/
96 void INT0Fun(void) interrupt 0 using 2//INT0中断
97 {
98 1 EX0 = 0; //外部中断0关闭
99 1 ET0 = 1; //定时器0中断打开
100 1 TH0=0XFD;
101 1 TL0=0X1E; //设定时值为800us
102 1
103 1 for (IRCON=0; IRCON<3; IRCON++)
104 1 IRCode[IRCON] = 0;
105 1
106 1 IRCON = 0;
107 1 IRCON2 = 0; //计数清零
108 1 TR0 = 1;//开始计数
109 1 }
110 /************************************************************************************/
111 void main(void)
112 {
113 1 unsigned int de;
114 1 TMOD = 0x01; //定时器0方式1
C51 COMPILER V7.50 YAOKONGCEBIANMA 09/29/2007 21:03:29 PAGE 3
115 1 EA = 1; //允许CPU中断
116 1 IT0 = 1; //INT0下降沿有效
117 1 EX0 = 1; //开INT0中断
118 1 P1 = 0xff;
119 1 do
120 1 {
121 2 Disp();Led = 1; Disp(); //LED点亮 //调用显示程序
122 2 Disp();Led = 0; Disp(); //LED熄灭 //调用显示程序
123 2 if (DT)
124 2 {
125 3 EX0=0; //关闭外中断
126 3 for (de=0; de<30000; de++) //这里起到按键值正确后会有一个延时,防止重复按键
127 3 Led = 1;
128 3 for (de=0; de<30000; de++)
129 3 Led = 0;
130 3 DT = 0;
131 3 for (i=0; i<256; i++)
132 3 {
133 4 if(daima[i] == IRCode[2])
134 4 {
135 5 P1_3 = 0;
136 5 Disp();
137 5 break;//当daima[i]=IRCode[2]时跳出循环
138 5 }
139 4 }
140 3 }
141 2 EX0 = 1;//开中断
142 2 Disp(); //调用显示程序
143 2 }while(1);
144 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 309 ----
CONSTANT SIZE = 512 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 ----
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 + -