📄 红外电视遥控器.lst
字号:
C51 COMPILER V7.50 红外电视_?_芲 05/30/2007 22:57:49 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 红外电视_?_芲
OBJECT MODULE PLACED IN 红外电视遥控器.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE 红外\红外电视遥控器\红外电视遥控器.c BROWSE DEBUG OBJECTEXTEN
-D PRINT(.\红外电视遥控器.lst) OBJECT(红外电视遥控器.obj)
line level source
1
2 // 用AT89S51 单片机制作红外电视遥控器
3 #include <reg51.h>
4
5 sbit OUT=P3^4;
6
7 static bit OP; //红外发射管的亮灭
8 static unsigned int count; //延时计数器
9 static unsigned int endcount; //终止延时计数
10 static unsigned char flag; //红外发送标志
11 char iraddr1; //十六位地址的第一个字节
12 char iraddr2; //十六位地址的第二个字节
13
14 void SendIRdata(char p_irdata);
15 void delay();
16
17 void main(void)
18 {
19 1 count = 0;
20 1 flag = 0;
21 1 OP = 0;
22 1 OUT = 0;
23 1 EA = 1; //允许CPU 中断
24 1 TMOD = 0x11; //设定时器0 和 1 为 16 位模式 1
25 1 ET0 = 1; //定时器0 中断允许
26 1 TH0 = 0xFF;
27 1 TL0 = 0xE6; //设定时值0 为38K 也就是每隔26us 中断一次
28 1 TR0 = 1;//开始计数
29 1
30 1 iraddr1=3;
31 1 iraddr2=252;
32 1
33 1 do{ delay();
34 2 SendIRdata(12); } while(1); }
35
36 //定时器0 中断处理
37 void timeint(void) interrupt 1
38 {
39 1 TH0=0xFF;
40 1 TL0=0xE6; //设定时值为38K 也就是每隔26us 中断一次
41 1 count++;
42 1
43 1 if(flag==0) OP=~OP;
44 1 else OP= 0;
45 1 OUT = OP;
46 1 }
47
48 void SendIRdata(char p_irdata)
49 {
50 1 int i;
51 1 char irdata=p_irdata;
52 1
53 1 //发送9ms 的起始码
54 1 endcount=223;
C51 COMPILER V7.50 红外电视_?_芲 05/30/2007 22:57:49 PAGE 2
55 1 flag=1;
56 1 count=0;
57 1 do{}while(count<endcount);
58 1
59 1 //发送4.5ms 的结果码
60 1 endcount=117;
61 1 flag=0;
62 1
63 1 count=0;
64 1 do{}while(count<endcount);
65 1
66 1 //发送十六位地址的前八位
67 1 irdata=iraddr1;
68 1 for(i=0;i<8;i++)
69 1 {
70 2
71 2 //先发送0.56ms 的38KHZ 红外波(即编码中0.56ms 的低电平)
72 2 endcount=10;
73 2 flag=1;
74 2 count=0;
75 2 do {}while(count<endcount);
76 2
77 2 //停止发送红外信号(即编码中的高电平)
78 2 if(irdata-(irdata/2)*2) //判断二进制数个位为 1 还是 0
79 2 {
80 3 endcount=41; //1 为宽的高电平
81 3 }
82 2 else
83 2 {
84 3 endcount=15; //0 为窄的高电平
85 3 }
86 2 flag=0;
87 2 count=0;
88 2 do{}while(count<endcount);
89 2
90 2 irdata=irdata>>1;
91 2 }
92 1
93 1 //发送十六位地址的后八位
94 1 irdata=iraddr2;
95 1 for(i=0;i<8;i++)
96 1 {
97 2 endcount=10;
98 2 flag=1;
99 2 count=0;
100 2 do{}while(count<endcount);
101 2
102 2 if(irdata-(irdata/2)*2)
103 2 {
104 3 endcount=41;
105 3 }
106 2 else
107 2 {
108 3 endcount=15;
109 3 }
110 2 flag=0;
111 2 count=0;
112 2 do{}while(count<endcount);
113 2
114 2 irdata=irdata>>1;
115 2 }
116 1
C51 COMPILER V7.50 红外电视_?_芲 05/30/2007 22:57:49 PAGE 3
117 1
118 1
119 1 //发送八位数据
120 1 irdata=p_irdata;
121 1 for(i=0;i<8;i++)
122 1 {
123 2 endcount=10;
124 2 flag=1;
125 2 count=0;
126 2 do{}while(count<endcount);
127 2
128 2 if(irdata-(irdata/2)*2)
129 2 {
130 3 endcount=41;
131 3 }
132 2 else
133 2 {
134 3 endcount=15;
135 3 }
136 2 flag=0;
137 2 count=0;
138 2 do{}while(count<endcount);
139 2
140 2 irdata=irdata>>1;
141 2 }
142 1
143 1 //发送八位数据的反码
144 1 irdata=~p_irdata;
145 1 for(i=0;i<8;i++)
146 1 {
147 2 endcount=10;
148 2 flag=1;
149 2 count=0;
150 2 do{}while(count<endcount);
151 2
152 2 if(irdata-(irdata/2)*2)
153 2 {
154 3 endcount=41;
155 3 }
156 2 else
157 2 {
158 3 endcount=15;
159 3 }
160 2 flag=0;
161 2 count=0;
162 2 do{}while(count<endcount);
163 2
164 2 irdata=irdata>>1;
165 2 }
166 1
167 1 endcount=10;
168 1 flag=1;
169 1 count=0;
170 1 do{}while(count<endcount);
171 1
172 1
173 1
174 1
175 1 flag=0;
176 1 }
177
178 void delay()
C51 COMPILER V7.50 红外电视_?_芲 05/30/2007 22:57:49 PAGE 4
179 {
180 1 int i,j;
181 1 for(i=0;i<400;i++)
182 1 {
183 2 for(j=0;j<100;j++)
184 2 {
185 3 }
186 2 }
187 1 }
188
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 549 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
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 + -