📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 08/16/2008 19:19:13 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89X51.h>
2
3 static bit OP; //红外发射管的亮灭
4 static unsigned int count; //延时计数器
5 static unsigned int endcount; //终止延时计数
6 static unsigned char Flag; //红外发送标志
7 char iraddr1; //十六位地址的第一个字节
8 char iraddr2; //十六位地址的第二个字节
9
10 void SendIRdata(char p_irdata);
11 void delay();
12 char getkey()
13 {
14 1 P1=0xff;
15 1 if(!P1_0)return 9; //ON
16 1 if(!P1_1)return 1; //ON
17 1 if(!P1_2)return 2; //7
18 1 if(!P1_3)return 3; //8
19 1 if(!P1_4)return 4; //9
20 1 if(!P1_5)return 5; //X
21 1 if(!P1_6)return 6; //÷
22 1 if(!P1_7)return 7; //÷
23 1 return 0;
24 1 }
25
26 void main(void)
27 {
28 1 char key;
29 1 count = 0;
30 1 Flag = 0;
31 1 OP = 0;
32 1 P3_4 = 1;
33 1 EA = 1; //允许CPU中断
34 1 TMOD = 0x11; //设定时器0和1为16位模式1
35 1 ET0 = 1; //定时器0中断允许
36 1
37 1 P1=0xff;
38 1 TH0 = 0xFF;
39 1 TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次
40 1 TR0 = 1;//开始计数
41 1
42 1 iraddr1=0xff;
43 1 iraddr2=0xff;
44 1
45 1
46 1 do{
47 2 key=getkey();
48 2
49 2 // if(key==0)SendIRdata(0x00);//0
50 2 if(key==1)SendIRdata(0x01);//1
51 2 if(key==2)SendIRdata(0x02);//2
52 2 if(key==3)SendIRdata(0x03);//3
53 2 if(key==4)SendIRdata(0x04);//4
54 2 if(key==5)SendIRdata(0x05);//5
55 2 if(key==6)SendIRdata(0x06);//6
C51 COMPILER V7.06 MAIN 08/16/2008 19:19:13 PAGE 2
56 2 if(key==7)SendIRdata(0x07);//7
57 2 if(key==8)SendIRdata(0x08);//8
58 2 if(key==9)SendIRdata(0x09);//9
59 2 }while(1);
60 1 }
61 //定时器0中断处理
62 void timeint(void) interrupt 1
63 {
64 1 TH0=0xFF;
65 1 TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次
66 1 count++;
67 1
68 1 }
69
70
71 void SendIRdata(char p_irdata)
72 {
73 1 int i;
74 1 char irdata=p_irdata;
75 1
76 1 //发送9ms的起始码
77 1 endcount=223;
78 1 Flag=1;
79 1 count=0;
80 1 P3_4=0;
81 1 do{}while(count<endcount);
82 1
83 1 //发送4.5ms的结果码
84 1 endcount=117;
85 1 Flag=0;
86 1 count=0;
87 1 P3_4=1;
88 1 do{}while(count<endcount);
89 1
90 1 //发送十六位地址的前八位
91 1 irdata=iraddr1;
92 1 for(i=0;i<8;i++)
93 1 {
94 2
95 2 //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
96 2 endcount=10;
97 2 Flag=1;
98 2 count=0;
99 2 P3_4=0;
100 2 do{}while(count<endcount);
101 2
102 2 //停止发送红外信号(即编码中的高电平)
103 2 if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
104 2 {
105 3 endcount=15; //1为宽的高电平
106 3 }
107 2 else
108 2 {
109 3 endcount=41; //0为窄的高电平
110 3 }
111 2 Flag=0;
112 2 count=0;
113 2 P3_4=1;
114 2 do{}while(count<endcount);
115 2
116 2 irdata=irdata>>1;
117 2 }
C51 COMPILER V7.06 MAIN 08/16/2008 19:19:13 PAGE 3
118 1
119 1 //发送十六位地址的后八位
120 1 irdata=iraddr2;
121 1 for(i=0;i<8;i++)
122 1 {
123 2 endcount=10;
124 2 Flag=1;
125 2 count=0;
126 2 P3_4=0;
127 2 do{}while(count<endcount);
128 2
129 2 if(irdata-(irdata/2)*2)
130 2 {
131 3 endcount=15;
132 3 }
133 2 else
134 2 {
135 3 endcount=41;
136 3 }
137 2 Flag=0;
138 2 count=0;
139 2 P3_4=1;
140 2 do{}while(count<endcount);
141 2
142 2 irdata=irdata>>1;
143 2 }
144 1
145 1 //发送八位数据
146 1 irdata=~p_irdata;
147 1 for(i=0;i<8;i++)
148 1 {
149 2 endcount=10;
150 2 Flag=1;
151 2 count=0;
152 2 P3_4=0;
153 2 do{}while(count<endcount);
154 2
155 2 if(irdata-(irdata/2)*2)
156 2 {
157 3 endcount=15;
158 3 }
159 2 else
160 2 {
161 3 endcount=41;
162 3 }
163 2 Flag=0;
164 2 count=0;
165 2 P3_4=1;
166 2 do{}while(count<endcount);
167 2
168 2 irdata=irdata>>1;
169 2 }
170 1
171 1 //发送八位数据的反码
172 1 irdata=p_irdata;
173 1 for(i=0;i<8;i++)
174 1 {
175 2 endcount=10;
176 2 Flag=1;
177 2 count=0;
178 2 P3_4=0;
179 2 do{}while(count<endcount);
C51 COMPILER V7.06 MAIN 08/16/2008 19:19:13 PAGE 4
180 2
181 2 if(irdata-(irdata/2)*2)
182 2 {
183 3 endcount=15;
184 3 }
185 2 else
186 2 {
187 3 endcount=41;
188 3 }
189 2 Flag=0;
190 2 count=0;
191 2 P3_4=1;
192 2 do{}while(count<endcount);
193 2
194 2 irdata=irdata>>1;
195 2 }
196 1
197 1 endcount=10;
198 1 Flag=1;
199 1 count=0;
200 1 P3_4=0;
201 1 do{}while(count<endcount);
202 1 P3_4=1;
203 1 Flag=0;
204 1 }
205
206 void delay()
207 {
208 1 int i,j;
209 1 for(i=0;i<400;i++)
210 1 {
211 2 for(j=0;j<100;j++)
212 2 {
213 3 }
214 2 }
215 1 }
216
217
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 700 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 1
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -