?? tyj.lst
字號(hào):
C51 COMPILER V8.05a TYJ 02/20/2008 08:03:45 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE TYJ
OBJECT MODULE PLACED IN tyj.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE tyj.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT892051.H>//11.0592MHz晶振
2 #define uchar unsigned char
3 #define uint unsigned int
4 /***************************************/
5 bit on_off=0;//開/關(guān)機(jī)標(biāo)志,"1"開,"0"關(guān)
6 bit over30s=0;//30秒溢出標(biāo)志,"1"溢出,"0"未溢出
7 bit time30s=0;//30秒定時(shí)啟動(dòng)標(biāo)志,"1"啟動(dòng),"0"不啟動(dòng)
8 bit over3m=0;//3分鐘溢出標(biāo)志,"1"溢出,"0"未溢出
9 bit time3m=0;//3分鐘定時(shí)啟動(dòng)標(biāo)志,"1"啟動(dòng),"0"不啟動(dòng)
10 bit drv_flag=0;//驅(qū)動(dòng)板啟動(dòng)標(biāo)志,"1"已啟動(dòng),"0"已關(guān)閉
11 bit off_flag=0;//允許關(guān)機(jī)標(biāo)志,"1"允許關(guān)機(jī),"0"不允許關(guān)機(jī)
12 bit rled_flashf=0;//紅發(fā)光管快閃啟動(dòng)標(biāo)志,"1"啟動(dòng),"0"關(guān)閉
13 bit rled_flashs=0;//紅發(fā)光管慢閃啟動(dòng)標(biāo)志,"1"啟動(dòng),"0"關(guān)閉
14 bit gled_flash=0;//綠發(fā)光管慢閃啟動(dòng)標(biāo)志,"1"啟動(dòng),"0"關(guān)閉
15 bit off10s_flag=0;//關(guān)機(jī)時(shí)10秒計(jì)時(shí)標(biāo)志,"1"啟動(dòng)計(jì)時(shí)10秒,"0"關(guān)閉計(jì)時(shí)
16 uchar cnt=0; // 30秒軟件計(jì)數(shù)器
17 uchar key_flag=0;//鍵按下計(jì)數(shù)器
18 uint counter=0;// 3分鐘軟件計(jì)數(shù)器
19
20 /***************以下為I/O端口定義*****************/
21 sbit inc=P3^4;//焦距增加值按鍵
22 sbit dec=P3^5;//焦距減少值按鍵
23 sbit m0=P1^6;//焦距電機(jī)正轉(zhuǎn)輸出
24 sbit m1=P1^5;//焦距電機(jī)反轉(zhuǎn)輸出
25 sbit rled=P1^2;//輸出至紅發(fā)光管
26 sbit gled=P1^3;//輸出至綠發(fā)光管
27 sbit out_drv=P1^4;//輸出負(fù)脈沖至驅(qū)動(dòng)板
28 sbit out_light=P3^1;//輸出控制220V光源繼電器
29 sbit out_fan=P3^0; //輸出控制12V風(fēng)扇繼電器
30 sbit check_tem=P3^6;//溫度檢測(cè)端
31 sbit check_light=P3^7;//光源檢測(cè)端
32
33 /**********函數(shù)列表************/
34 void start();
35 void drv();
36 void fun_light();
37 void fun_tem();
38 void fun1();
39 void init();
40 void init_timer1();
41 void delay(uint k);
42 void drv_mot(void);
43
44 /***********主函數(shù)************/
45 void main(void)
46 { init();//上電時(shí)初始化
47 1 while(1)//無限循環(huán)
48 1 {
49 2 if(on_off)//若啟動(dòng)標(biāo)志為1
50 2 {
51 3 if(!off_flag){start();off_flag=1;}// 若原來停機(jī)等待,則啟動(dòng)
52 3 check_tem=1;check_light=1;// 溫度與光源檢測(cè)端置為輸入狀態(tài)
53 3 if((!check_tem)&&(!check_light))//若光源與溫度正常
54 3 {
55 4 if(drv_flag)//若已啟動(dòng)驅(qū)動(dòng)板
C51 COMPILER V8.05a TYJ 02/20/2008 08:03:45 PAGE 2
56 4 {drv_mot();//調(diào)用驅(qū)動(dòng)焦距電機(jī)的子程序,進(jìn)行調(diào)焦
57 5 gled=0;rled=1;//正常工作過程,綠燈亮
58 5 gled_flash=0;rled_flashf=0;rled_flashs=0;// 綠燈慢閃標(biāo)志復(fù)位,
59 5 //紅燈快、慢閃標(biāo)志復(fù)位
60 5 out_light=0;// 投影光源亮
61 5 out_fan=0;// 冷卻風(fēng)扇轉(zhuǎn)
62 5 }
63 4 }
64 3
65 3 if(check_tem)fun_tem();//若溫度不正常,調(diào)用fun_tem()子程序處理
67 3 }
68 2 else//否則啟動(dòng)標(biāo)志為0,進(jìn)入關(guān)機(jī)或待機(jī)過程
69 2 {
70 3 if(off_flag)// 若關(guān)機(jī)標(biāo)志有效
71 3 {if(drv_flag)fun1();}//若已啟動(dòng)驅(qū)動(dòng)板,進(jìn)入關(guān)機(jī)過程
72 3 rled=0;gled=1;// 正常待機(jī)過程
73 3 out_light=1;// 投影光源滅
74 3 out_fan=1;// 冷卻風(fēng)扇停轉(zhuǎn)
75 3
76 3 }
77 2 }
78 1 }
79
80 /*******************初始化子函數(shù)**********************/
81 void init()
82 {inc=1;dec=1;m0=1;m1=1;//
83 1 check_tem=1;
84 1 check_light=1;
85 1 P3_2=1;P3_3=1;
86 1 init_timer1();
87 1 IT0=1;IT1=1;
88 1 /*====================*/
89 1 on_off=0;off_flag=0;drv_flag=0;
90 1 off10s_flag=0;
92
93
94 /********************定時(shí)器1初始化***********************/
95 void init_timer1()
96 {
97 1 TMOD=0x11;
98 1 TH0=-(48000/256);
99 1 TL0=-(48000%256);
100 1 IE=0x8f;
101 1 TR1=1;
102 1 }
103
104
105 /*********************定時(shí)器1中斷服務(wù)子函數(shù)***********************/
106 void time1(void) interrupt 3 using 1
107 {
108 1 TH0=-(48000/256);// 重裝定時(shí)初值
109 1 TL0=-(48000%256);
110 1 /*--------------------*/
111 1 if(gled_flash)// 若綠燈慢閃標(biāo)志有效
112 1 {cnt++;//開始計(jì)數(shù)
113 2 if(cnt>=10){gled=!gled;cnt=0;}// 每0.5秒綠燈閃動(dòng)一次
114 2 }
115 1 /*---------------------*/
116 1 if(rled_flashs)// 若紅燈慢閃標(biāo)志有效
117 1 {cnt++;
C51 COMPILER V8.05a TYJ 02/20/2008 08:03:45 PAGE 3
118 2 if(cnt>=10){rled=!rled;cnt=0;} // 每0.5秒紅燈閃動(dòng)一次
119 2 }
120 1 /*-------------------------*/
121 1 if(rled_flashf)// 若紅燈快閃標(biāo)志有效
122 1 {cnt++;
123 2 if(cnt>=2){rled=!rled;cnt=0;} // 每0.1秒紅燈閃動(dòng)一次
124 2 }
125 1 /*-----------------------*/
126 1 if(time3m) // 若3分啟動(dòng)標(biāo)志有效
127 1 {counter++;//開始計(jì)數(shù)
128 2 if(counter>=2510){over3m=1;counter=0;}//3分到,則3分溢出標(biāo)志置位
129 2 }
130 1 /*------------------------*/
131 1 if(time30s) // 若30秒啟動(dòng)標(biāo)志有效
132 1 {counter++;//開始計(jì)數(shù)
133 2 if(counter>=400){over30s=1;counter=0;} //30秒到,則30秒溢出標(biāo)志置位
134 2 }
135 1 /*--------------------*/
136 1 if(off10s_flag) // 若10秒關(guān)機(jī)標(biāo)志有效
137 1 {counter++;//開始計(jì)數(shù)
138 2 if(counter>=130){off10s_flag=0;key_flag=1;counter=0;}
139 2 //若10秒內(nèi)無第二次關(guān)機(jī)按鍵動(dòng)作,則鍵計(jì)數(shù)器置1,繼續(xù)保持開機(jī)工作
140 2 }
141 1 }
142
143 /*******************外中斷0服務(wù)子函數(shù)**********************/
144 void zd_int0() interrupt 0 using 2//遙控控制開/關(guān)機(jī)
145 {
146 1 on_off=!on_off; // 開/關(guān)機(jī)標(biāo)志取反,"1"開,"0"關(guān)
147 1 }
148
149 /*********************外中斷1服務(wù)子函數(shù)********************/
150 void zd_int1() interrupt 2 using 3//手動(dòng)控制開/關(guān)機(jī)
151 {
152 1 delay(5);// 延時(shí)5mS再判
153 1 if(P3_3==0)key_flag++;//若鍵依舊按下,鍵計(jì)數(shù)器遞加
154 1 if(key_flag==1){on_off=1;off10s_flag=0;}// 鍵計(jì)數(shù)器為1,則開機(jī)
155 1 if(key_flag>=3)key_flag=0;// 鍵計(jì)數(shù)器的范圍為0-2,即0-20秒有效
156 1 if(key_flag==0){on_off=0;off10s_flag=0;} // 鍵計(jì)數(shù)器為0,則關(guān)機(jī)等待
157 1 if(key_flag==2)off10s_flag=1;// 鍵計(jì)數(shù)器為2,進(jìn)入關(guān)機(jī)狀態(tài)
158 1 /*機(jī)器已工作情況下,10秒內(nèi)連按二次關(guān)機(jī)鍵,鍵計(jì)數(shù)器為2,進(jìn)入關(guān)機(jī)。否則,10秒一到,鍵計(jì)數(shù)器又置1繼續(xù)進(jìn)入工作
-。因?yàn)殡娔X認(rèn)為可能有人不慎碰到關(guān)機(jī)鍵*/
159 1 while(P3_3==0)// 等待釋放鍵后退出中斷子函數(shù)
160 1 {delay(5);
161 2 if(P3_3==1)break;}
162 1 }
163
164 /********************延時(shí)k*1mS子函數(shù)*********************/
165 void delay(uint k)
166 {
167 1 uint i,j;
168 1 for(i=0;i<k;i++){
169 2 for(j=0;j<121;j++)
170 2 {;}}
171 1 }
172
173 /**********************啟動(dòng)子函數(shù)**********************/
174 void start()
175 { gled_flash=0;rled_flashf=0;rled_flashs=0;// 復(fù)位相關(guān)標(biāo)志
176 1 gled=0;rled=1;// 綠燈亮
177 1 out_light=0;// 點(diǎn)亮投影燈光源
178 1 out_fan=0;// 冷卻風(fēng)扇啟動(dòng)
C51 COMPILER V8.05a TYJ 02/20/2008 08:03:45 PAGE 4
179 1 time30s=1;//30秒標(biāo)志置位
180 1 EX0=0;EX1=0;// 開放INT0、INT1中斷
181 1 while(!over30s);// 等延時(shí)30秒
182 1 time30s=0;// 相關(guān)標(biāo)志復(fù)位
183 1 over30s=0;
184 1 if(!check_light)// 若光源檢測(cè)端為低電平,即光源正常發(fā)光
185 1 {
186 2 if(!drv_flag){drv();drv_flag=1;}// 若驅(qū)動(dòng)板啟動(dòng)標(biāo)志為"0" (尚未啟動(dòng)),
187 2 //調(diào)用觸發(fā)子函數(shù)
188 2 }
189 1 EX0=1;EX1=1;// 關(guān)閉外中斷
190 1 }
191
192 /************************產(chǎn)生觸發(fā)驅(qū)動(dòng)板的負(fù)脈沖子函數(shù)*************************/
193 void drv()// 產(chǎn)生1mS的負(fù)脈沖
194 {
195 1 out_drv=1;
196 1 out_drv=0;
197 1 delay(1);
198 1 out_drv=1;
199 1 }
200
201 /***********************光源不正常處理子函數(shù)**************************/
202 void fun_light()
203 { if(drv_flag){drv();drv_flag=0;}
204 1 out_fan=0;
205 1 out_light=1;gled=1;
206 1 rled_flashf=0;
207 1 rled_flashs=1;
208 1 over3m=0;
209 1 time3m=1;
210 1 EX0=0;EX1=0;
211 1 while(!over3m){out_light=1;out_fan=0;}
212 1 EX0=1;EX1=1;
213 1 time3m=0;
214 1 over3m=0;
215 1 on_off=0;
216 1 while(!on_off)
217 1 {out_fan=1;out_light=1;gled=1;off_flag=0;key_flag=0;
218 2 rled_flashf=0;rled_flashs=1;gled_flash=0;off10s_flag=0;
219 2 if(on_off){rled_flashs=0;break;}
220 2 }
221 1 }
222
223 /*************************溫度不正常處理*****************************/
224 void fun_tem()
225 { if(drv_flag){drv();drv_flag=0;}
226 1 out_fan=0;
227 1 out_light=1;gled=1;
228 1 rled_flashf=1;
229 1 rled_flashs=0;
230 1 over3m=0;
231 1 time3m=1;
232 1 EX0=0;EX1=0;
233 1 while(!over3m){out_light=1;out_fan=0;}
234 1 EX0=1;EX1=1;
235 1 time3m=0;
236 1 over3m=0;
237 1 on_off=0;
238 1 while(!on_off)
239 1 {out_fan=1;out_light=1;gled=1;off_flag=0;key_flag=0;
240 2 rled_flashf=1;rled_flashs=0;gled_flash=0;off10s_flag=0;
C51 COMPILER V8.05a TYJ 02/20/2008 08:03:45 PAGE 5
241 2 if(on_off){rled_flashf=0;break;}
242 2 }
243 1 }
244
245 /********************關(guān)機(jī)子函數(shù)*********************/
246 void fun1()
247 { out_light=1;// 關(guān)閉光源
248 1 if(drv_flag){drv();drv_flag=0;} // 若驅(qū)動(dòng)板啟動(dòng)標(biāo)志為"1"(已經(jīng)啟動(dòng)工作),
249 1 //調(diào)用觸發(fā)子函數(shù)發(fā)一個(gè)脈沖令其關(guān)機(jī)
250 1 over3m=0;// 清除3分溢出標(biāo)志
251 1 time3m=1;// 啟動(dòng)3分計(jì)時(shí)
252 1 EX0=0;EX1=0;// 關(guān)閉外中斷
253 1 while(!over3m){gled_flash=1;rled_flashf=0;rled_flashs=0;rled=1;out_fan=0;} /*等待
254 1 3分延時(shí),同時(shí)打開風(fēng)扇冷卻*/
255 1 EX0=1;EX1=1; // 3分過,打開外中斷
256 1 over3m=0; //清除標(biāo)志
257 1 time3m=0;
258 1 off_flag=0;
259 1 out_light=1;
260 1 out_fan=1;
261 1 gled_flash=0;
262 1 rled_flashf=0;rled_flashs=0;
263 1 gled=1;
264 1 rled=0;
265 1 }
266
267 /**********驅(qū)動(dòng)焦距電機(jī)的子函數(shù)*************/
268 void drv_mot(void)
269 {
270 1 if((!inc)||(!dec))
271 1 {delay(10);
272 2 if(!inc){m0=0;m1=1;}
273 2 else if(!dec)
274 2 {m1=0;m0=1;}
275 2 else {m1=1;m0=1;}
276 2 }
277 1 if((inc)&&(dec)){m1=1;m0=1;}
278 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 702 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 11 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -