📄 hongwai.lst
字号:
C51 COMPILER V7.50 HONGWAI 06/02/2007 20:24:15 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE HONGWAI
OBJECT MODULE PLACED IN hongwai.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE hongwai.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //此程序用来显示红外遥控的键码值 包括8位系统识别码及其反码 8位数据码及其反码
2 #include <reg51.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 uchar TH0_BUF=0; //定义定时器时间缓冲
7 uchar TL0_BUF=0;
8 uchar INT0_TIMES=0; //定义中断次数
9 uchar RCV_NUM=0; //接收的数据是第几位
10 uint RH_CODE=0; //定义接收码高位
11 uint RL_CODE=0; //定义接收码低位
12 bit START_FLAG=0; //定义接收数据开始标志位
13 bit RCV_BIT_FLAG=0; //定义位接收标志位 1 表示接收成功
14 bit RCV_SUS_FLAG=0; //定义字接收标志位 1 表示接收成功
15
16 char code disp[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0x30,0x25,0x67,0x23,0x64,0x74};
17 // 0 1 2 3 4 5 6 7 8 9 a b c d e f
18
19 //char code disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x8e,0xff,0x00};
20 // 0 1 2 3 4 5 6 7 8 9 - f 空 显
21
22 char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0; //显示缓冲 其中i0为虚拟位
23
24
25 delay(uint t)
26 { char a;
27 1 while(t--)
28 1 for(a=100;a>0;a--); }
29
30
31 void initial(void)
32 { TMOD=0x01;
33 1 IT0=1; //外部中断0采用高到低的跳变有效
34 1 IE=0x81; //开外部中断0
35 1 TH0=0;
36 1 TL0=0;
37 1 TR0=0;
38 1 START_FLAG=0;
39 1 TH0_BUF=0; //定义定时器时间缓冲
40 1 TL0_BUF=0;
41 1 INT0_TIMES=0; //定义中断次数
42 1 RCV_NUM=0; //接收的数据是第几位
43 1 RH_CODE=0; //定义接收码高位
44 1 RL_CODE=0; //定义接收码低位
45 1 START_FLAG=0; //定义接收数据开始标志位
46 1 RCV_BIT_FLAG=0; //定义位接收标志位 1 表示接收成功
47 1 RCV_SUS_FLAG=0; //定义字接收标志位 1 表示接收成功
48 1
49 1 }
50
51 display(t)
52 {while(t--)
53 1 {P0=disp[i8];
54 2 P2=0x7f;
55 2 delay(1);
C51 COMPILER V7.50 HONGWAI 06/02/2007 20:24:15 PAGE 2
56 2 P2=0xff;
57 2 P0=disp[i7];
58 2 P2=0xbf;
59 2 delay(1);
60 2 P2=0xff;
61 2 P0=disp[i6];
62 2 P2=0xdf;
63 2 delay(1);
64 2 P2=0xff;
65 2 P0=disp[i5];
66 2 P2=0xef;
67 2 delay(1);
68 2 P2=0xff;
69 2 P0=disp[i4];
70 2 P2=0xf7;
71 2 delay(1);
72 2 P2=0xff;
73 2 P0=disp[i3];
74 2 P2=0xfb;
75 2 delay(1);
76 2 P2=0xff;
77 2 P0=disp[i2];
78 2 P2=0xfd;
79 2 delay(1);
80 2 P2=0xff;
81 2 P0=disp[i1];
82 2 P2=0xfe;
83 2 delay(1);
84 2 P2=0xff;} }
85
86
87 void RCV_SUS(void)
88 {
89 1 i8=RH_CODE/4096%16;i7=RH_CODE/256%16;i6=RH_CODE/16%16;i5=RH_CODE%16;
90 1 i4=RL_CODE/4096%16;i3=RL_CODE/256%16;i2=RL_CODE/16%16;i1=RL_CODE%16;
91 1 initial();
92 1 }
93 void RCV_BIT(void)
94 { uint time0=TH0_BUF*256+TL0_BUF;
95 1 uint KEY_BIT; //当前的键值 为0或1
96 1 if(START_FLAG==0)
97 1 { if( time0>12000 && time0<15000 )
98 2 { START_FLAG=1; } //开始
99 2 }
100 1 else if(START_FLAG==1)
101 1 {
102 2 if( time0> 2000 && time0<2400 ) KEY_BIT=0x8000;
103 2 else if( time0> 900 && time0<1300 ) KEY_BIT=0;
104 2 else KEY_BIT=0;
105 2
106 2 if(RCV_NUM<16)
107 2 { RH_CODE=RH_CODE>>1;
108 3 RH_CODE^=KEY_BIT; }
109 2 else
110 2 { RL_CODE=RL_CODE>>1;
111 3 RL_CODE^=KEY_BIT; }
112 2
113 2 RCV_NUM++;
114 2 if(RCV_NUM==32)
115 2 { RCV_NUM=0; RCV_SUS(); }
116 2 }
117 1 RCV_BIT_FLAG=0; }
C51 COMPILER V7.50 HONGWAI 06/02/2007 20:24:15 PAGE 3
118
119
120 main()
121 { display(60);
122 1 delay(400);
123 1 initial();
124 1 while(1)
125 1 {
126 2 display(1); }
127 1 }
128
129 void ex_input(void) interrupt 0 //外部中断
130 {
131 1 INT0_TIMES++;
132 1 if(TR0==0) TR0=1;
133 1 else if(TR0==1)
134 1 { TH0_BUF=TH0;
135 2 TL0_BUF=TL0;
136 2 TH0=0;
137 2 TL0=0;
138 2 //RCV_BIT_FLAG=1; //置标志位
139 2 TR0=1; //开始下一个脉冲的检测
140 2 RCV_BIT();
141 2 }
142 1 }
143
144
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 641 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 2
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 + -