📄 ok.lst
字号:
C51 COMPILER V7.20 OK 05/13/2008 09:14:00 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE OK
OBJECT MODULE PLACED IN ok.OBJ
COMPILER INVOKED BY: D:\HUIBIAN\C51\BIN\C51.EXE ok.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************* 说 明 *********************************/
2 /* 以一个9ms的低电平和4.5ms的高电平为引导码,后跟32位二进制代码 */
3 /* 前16位为8位用户码及其反码,后16位为8位的操作码及其反码 */
4 /* 以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示"0"; */
5 /* 以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示"1"。 */
6 /* 注意:接收码的脉宽与间隔是对发射码取反的,即间隔是0.565ms */
7 /******************************************************************/
8 #include <REGX52.h>
9 #define uchar unsigned char
10 uchar time=0;
11 uchar period=40; //定义定时周期
12 int timer_count=0;
13 uchar high; //定义高电平时间变量
14 uchar data IRcode[4]; //定义一个4字节的数组用来存储代码
15 uchar CodeTemp; //编码字节缓存变量
16 uchar i,j,k,m,g,h;
17 uchar a=0,b=0; //延时用的循环变量
18 sbit IRsignal=P3^2; //MS0038接收头OUT端直接连P3.2(INT0)
19 sbit feilin=P1^0;
20 sbit mogu=P2^0;
21 sbit love=P1^7;
22 sbit father=P1^6;
23 sbit mother=P1^5;
24 /**************************延时0.9ms子程序**********************/
25 void Delay0_9ms(void)
26 {uchar j,k;
27 1 for(j=18;j>0;j--)
28 1 for(k=20;k>0;k--) ;
29 1 }
30 /***************************延时1ms子程序**********************/
31 void Delay1ms(void)
32 {uchar i,j;
33 1 for(i=2;i>0;i--)
34 1 for(j=230;j>0;j--) ;
35 1 }
36 /***************************延时4.5ms子程序**********************/
37 void Delay4_5ms(void)
38 {uchar i,j;
39 1 for(i=10;i>0;i--)
40 1 for(j=225;j>0;j--) ;
41 1 }
42
43 /**************************** 延时子程序 ************************/
44 void Delay(void)
45 {uchar i,j,k;
46 1 for(i=200;i>0;i--)
47 1 for(j=200;j>0;j--)
48 1 for(k=3;k>0;k--) ;
49 1 }
50
51 /************************定时1中断服务子程序**********************/
52 void time1() interrupt 3 using 3
53 { EX0=1;
54 1 TH1=0x3C;
55 1 TL1=0xB0;
C51 COMPILER V7.20 OK 05/13/2008 09:14:00 PAGE 2
56 1 timer_count++;
57 1 if(h==1&&timer_count==100) //定时5S
58 1 { ET1=0;
59 2 timer_count=0;h=0;
60 2 high=1;g=0;love=1;P0=0x81;ET0=1;Delay4_5ms();
61 2 }
62 1 if(h==2&&timer_count==200) //定时10S
63 1 { ET1=0;
64 2 timer_count=0;h=0;
65 2 high=1;g=0;father=1;P0=0x81;ET0=1;Delay4_5ms();
66 2 }
67 1 if(h==3&&timer_count==300) //定时30S
68 1 { ET1=0;
69 2 timer_count=0;h=0;
70 2 high=1;g=0;mother=1;P0=0x81;ET0=1;Delay4_5ms();
71 2 }
72 1
73 1 }
74
75 /************************定时0中断服务子程序**********************/
76 /*采用12MHz晶振,在P1.0脚上输出周期为100ms的脉冲信号*/
77 /*定时2.5ms,周期100ms需40次中断,高电平10ms需4次中断*/
78
79 void time0() interrupt 2 using 1
80 {
81 1 EX0=1;
82 1 TH0=0xF6; /*定时器初值重装载*/
83 1 TL0=0x3C;
84 1 time++;
85 1 if(time==high) /*高电平持续时间结束,变低*/
86 1 { mogu=0;}
87 1 else if(time==period) /*周期时间到,变高*/
88 1 { time=0;
89 2 mogu=1;
90 2 if(g==1) /*睡眠风控制*/
91 2 {a++;
92 3 if(a==100)
93 3 {a=0;
94 4 b++;
95 4 if(b%6==1) /*停止运行10S*/
96 4 high=50;
97 4 if(b%6==2) /*二档运行10S*/
98 4 high=13;
99 4 if(b%6==3) /*停止运行10S*/
100 4 high=50;
101 4 if(b%6==4) /*三档运行10S*/
102 4 high=22;
103 4 if(b%6==5) /*停止运行10S*/
104 4 high=50;
105 4 if(b%6==0) /*一档运行10S*/
106 4 high=1;
107 4 }
108 3 }
109 2 if(g==2) /*自然风控制*/
110 2 {a++;
111 3 if(a==100)
112 3 {a=0;
113 4 b++;
114 4 if(b%4==1) /*二档运行10S*/
115 4 high=13;
116 4 if(b%4==2) /*三档运行10S*/
117 4 high=22;
C51 COMPILER V7.20 OK 05/13/2008 09:14:00 PAGE 3
118 4 if(b%4==3) /*停止运行10S*/
119 4 high=50;
120 4 if(b%4==0) /*一档运行10S*/
121 4 high=1;
122 4 }
123 3 }
124 2 if(g==3) /*正常风控制*/
125 2 {a++;
126 3 if(a==100)
127 3 {a=0;
128 4 b++;
129 4 if(b%3==1) /*二档运行10S*/
130 4 high=13;
131 4 if(b%3==2) /*三档运行10S*/
132 4 high=22;
133 4 if(b%3==0) /*一档运行10S*/
134 4 high=1;
135 4 }
136 3 }
137 2 }
138 1 }
139
140
141 /************************中断0解码服务子程序**********************/
142 void int0(void) interrupt 0 using 2
143 {
144 1 EA=0;
145 1 for(k=0;k<10;k++)
146 1 {Delay0_9ms();
147 2 if (IRsignal==1) //如果0.9ms后IRsignal=1,说明不是引导码
148 2 {k=10;break;}
149 2 else if(k==9) //如果持续了10×0.9ms=9ms的低电平,说明是引导
150 2 {while(IRsignal==0);
151 3 Delay4_5ms(); //跳过持续4.5ms的高电平
152 3 for(i=0;i<4;i++) //分别读取4个字节
153 3 {for(j=1;j<=8;j++) //每个字节8个bit的判断
154 4 { while(IRsignal==0); //等待上升沿
155 5 Delay0_9ms(); //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
156 5 if(IRsignal==1) //如果IRsignal是"1",则向右移入一位"1"
157 5 {Delay1ms();
158 6 CodeTemp=CodeTemp|0x80;
159 6 if(j<8) CodeTemp=CodeTemp>>1;
160 6 }
161 5 else
162 5 if(j<8)CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则向右移一位,自动补"0"
163 5 }
164 4 IRcode[i]=CodeTemp; //接收的码型存到IRcode
165 4 CodeTemp=0;
166 4 }
167 3
168 3 }
169 2 }
170 1 EA=1;
171 1 EX0=0;
172 1 if(IRcode[3]==0xA1) //检测到一档按键按下
173 1 {IRcode[3]=0;
174 2 P0=0x81; //数码管显示1
175 2 feilin=0;Delay();feilin=1; //发光二极管闪一闪
176 2 high=1;g=0;ET0=1;}
177 1 if(IRcode[3]==0xE2) //检测到二档按键按下
178 1 {IRcode[3]=0;P0=0x3B;
179 2 feilin=0;Delay();feilin=1;
C51 COMPILER V7.20 OK 05/13/2008 09:14:00 PAGE 4
180 2 high=13;g=0; ET0=1; }
181 1 if(IRcode[3]==0xE1) //检测到三档按键按下/
182 1 {IRcode[3]=0;P0=0xAB;
183 2 feilin=0;Delay();feilin=1;
184 2 high=22;g=0; ET0=1;}
185 1
186 1 if(IRcode[3]==0xE0) //检测到关机按键按下/
187 1 {IRcode[3]=0;P0=0x00;
188 2 feilin=0;Delay();feilin=1;
189 2 high=50;g=0; ET0=1;}
190 1
191 1 if(IRcode[3]==0xA8) //检测到睡眠风按键按下/
192 1 {IRcode[3]=0;P0=0x9F;
193 2 feilin=0;Delay();feilin=1;
194 2 g=1;high=1; ET0=1;}
195 1 if(IRcode[3]==0xEB) //检测到自然风按键按下/
196 1 {IRcode[3]=0;P0=0xBC;
197 2 feilin=0;Delay();feilin=1;
198 2 g=2;high=1; ET0=1;}
199 1 if(IRcode[3]==0xE8) //检测到正常风按键按下/
200 1 {IRcode[3]=0;P0=0x36;
201 2 feilin=0;Delay();feilin=1;
202 2 g=3;high=1; ET0=1;}
203 1
204 1
205 1 if(IRcode[3]==0xA9) //检测定时5s/
206 1 {IRcode[3]=0;
207 2 P0=0xB9;love=0;mogu=1;h=1;ET1=1;}
208 1 if(IRcode[3]==0xEA) //检测定时10s/
209 1 {IRcode[3]=0;
210 2 P0=0xB9;father=0;mogu=1;h=2; ET1=1;}
211 1 if(IRcode[3]==0xE9) //检测定时15s/
212 1 {IRcode[3]=0;
213 2 P0=0xB9;mother=0;mogu=1;h=3;ET1=1;}
214 1
215 1 Delay();
216 1 }
217
218 /**************************主程序*************************/
219 void main()
220 {P0=0;
221 1 ET1=0;
222 1 ET0=0; //关定时中断
223 1 TMOD=0x11; /*定时器0和1方式1*/
224 1 TH0=0xF6; /*定时器装载初值*/
225 1 TL0=0x3C;
226 1 TH1=0x3C;
227 1 TL1=0xB0;
228 1 PT1=0;
229 1 TR1=1; //启动定时器1/
230 1 TR0=1; /*启动定时器0*/
231 1 IT0=1; //INT0为负边沿触发, (1:负边沿触发,0:低电平触发)
232 1 EX0=1; //外部中断INT0开
233 1 EA=1; //开所有中断
234 1 CodeTemp=0; //初始化红外编码字节缓存变量
235 1 Delay();
236 1 while(1) //等外部中断0
237 1 {}
238 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.20 OK 05/13/2008 09:14:00 PAGE 5
CODE SIZE = 784 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 ----
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 + -