📄 红外0.lst
字号:
C51 COMPILER V8.02 红外0 09/14/2008 11:33:32 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 红外0
OBJECT MODULE PLACED IN 红外0.OBJ
COMPILER INVOKED BY: D:\专业\keil\C51\BIN\C51.EXE 红外0.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT89X51.H>
2
3 #define c(x) (x*110592/120000)
4
5 sbit Ir_Pin=P3^5;
6
7 unsigned char code Led_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
8
9 0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阳极数码显示码0-F.
10
11 unsigned char code Led_Sel[]={0xfe,0xfd,0xfb,0xf7}; //显示位控
12
13 unsigned char Led_Buf[4]; //显示缓冲区
14
15 char Led_Index; //位选
16
17 unsigned char Ir_Buf[4]; //用于保存解码结果
18
19 //==============================================================
20
21 //数码管扫描
22
23 timer0() interrupt 1 using 1
24
25 {
26 1
27 1 TL0=(65536-1000)%256;
28 1
29 1 TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
30 1
31 1 P0=0xff;
32 1
33 1 P2=Led_Sel[Led_Index]; //位选
34 1
35 1 P0=Led_Tab[Led_Buf[Led_Index]]; //段选
36 1
37 1 if(++Led_Index>3) Led_Index=0; //四个扫描完了,到第一个数码管
38 1
39 1 }
40
41 //==============================================================
42
43 unsigned int Ir_Get_Low()
44
45 {
46 1
47 1 TL1=0;
48 1
49 1 TH1=0;
50 1
51 1 TR1=1;
52 1
53 1 while(!Ir_Pin && (TH1&0x80)==0); //当P3.5为低 且 TH1<0x80时 等待
54 1
55 1 TR1=0;
C51 COMPILER V8.02 红外0 09/14/2008 11:33:32 PAGE 2
56 1
57 1 return TH1*256+TL1;
58 1
59 1 }
60
61 //=============================================================
62
63 unsigned int Ir_Get_High()
64
65 {
66 1
67 1 TL1=0;
68 1
69 1 TH1=0;
70 1
71 1 TR1=1;
72 1
73 1 while(Ir_Pin && (TH1&0x80)==0);
74 1
75 1 TR1=0;
76 1
77 1 return TH1*256+TL1;
78 1
79 1 }
80
81 //==============================================================
82
83 main()
84
85 {
86 1
87 1 unsigned int temp;
88 1
89 1 char i,j;
90 1
91 1 Led_Index=1;
92 1
93 1 TMOD=0x11;
94 1
95 1 TL0=(65536-1000)%256;
96 1
97 1 TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
98 1
99 1 EA=1;
100 1
101 1 ET0=1;
102 1
103 1 TR0=1;
104 1
105 1 Led_Buf[0]=0;
106 1
107 1 Led_Buf[1]=0;
108 1
109 1 Led_Buf[2]=0;
110 1
111 1 Led_Buf[3]=0; //显示区设成0
112 1
113 1 do{
114 2
115 2 restart:
116 2
117 2 while(Ir_Pin);
C51 COMPILER V8.02 红外0 09/14/2008 11:33:32 PAGE 3
118 2
119 2 temp=Ir_Get_Low();
120 2
121 2 if(temp<c(4000) || temp>c(5000)) continue;//引导脉冲低电平9000
122 2
123 2 temp=Ir_Get_High();
124 2
125 2 if(temp<c(4000) || temp>c(5000)) continue;//引导脉冲高电平4500
126 2
127 2 for(i=0;i<4;i++) //4个字节
128 2
129 2 for(j=0;j<8;j++) //每个字节8位
130 2
131 2 {
132 3
133 3 temp=Ir_Get_Low();
134 3
135 3 if(temp<c(200) || temp>c(800)) goto restart;
136 3
137 3 temp=Ir_Get_High();
138 3
139 3 if(temp<c(200) || temp>c(2000)) goto restart;
140 3
141 3 Ir_Buf[i]>>=1;
142 3
143 3 if(temp>c(1120)) Ir_Buf[i]|=0x80;
144 3
145 3 }
146 2
147 2 Led_Buf[0]=Ir_Buf[2]&0xf; //低四位数据码
148 2
149 2 Led_Buf[1]=(Ir_Buf[2]/16)&0xf; //高四位数据码
150 2
151 2 Led_Buf[2]=Ir_Buf[0]&0xf; //低四位用户码
152 2
153 2 Led_Buf[3]=(Ir_Buf[0]/16)&0xf; //高四位用户码
154 2
155 2 }while(1);
156 1
157 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 448 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 2
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 + -