?? system_alarm.lst
字號:
233 unsigned char ReadOneChar(void)
234 {
235 1 uchar i=0;
236 1 uchar dat = 0;
237 1 for (i=8;i>0;i--)
238 1 {
239 2 DQ = 0; // 給脈沖信號
240 2 dat>>=1;
241 2 DQ = 1; // 給脈沖信號
C51 COMPILER V7.50 SYSTEM_ALARM 06/22/2007 17:18:23 PAGE 5
242 2 if(DQ)
243 2 dat|=0x80;
244 2 delay_18B20(4);
245 2 }
246 1 return(dat);
247 1 }
248
249 /*************ds18b20寫一個字節(jié)****************/
250
251 void WriteOneChar(uchar dat)
252 {
253 1 unsigned char i=0;
254 1 for (i=8; i>0; i--)
255 1 {
256 2 DQ = 0;
257 2 DQ = dat&0x01;
258 2 delay_18B20(5);
259 2 DQ = 1;
260 2 dat>>=1;
261 2 }
262 1 }
263
264 /**************讀取ds18b20當前溫度************/
265
266 void ReadTemperature(void)
267 {
268 1 unsigned char a=0;
269 1 unsigned char b=0;
270 1 unsigned char t=0;
271 1
272 1 Init_DS18B20();
273 1 WriteOneChar(0xCC); // 跳過讀序號列號的操作
274 1 WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換
275 1
276 1 delay_18B20(100); // this message is wery important
277 1
278 1 Init_DS18B20();
279 1 WriteOneChar(0xCC); //跳過讀序號列號的操作
280 1 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
281 1
282 1 delay_18B20(100);
283 1
284 1 a=ReadOneChar(); //讀取溫度值低位
285 1 b=ReadOneChar(); //讀取溫度值高位
286 1 temp1=b<<4;
287 1 temp1+=(a&0xf0)>>4;
288 1 temp2=a&0x0f;
289 1
290 1 temp=((b*256+a)>>4); //當前采集溫度值除16得實際溫度值
291 1
292 1
293 1 }
294
295 /***************液晶顯示子函數(shù)1正常顯示*****************/
296
297 void displayfun1(void)
298 {
299 1 WriteCommandLCM(0x0c,1); //顯示屏打開,光標不顯示,不閃爍,檢測忙信號
300 1 DisplayListChar(0,0,str0);
301 1 DisplayListChar(0,1,str1);
302 1
303 1 DisplayOneChar(3,0,hour/10+0x30); //液晶上顯示小時
C51 COMPILER V7.50 SYSTEM_ALARM 06/22/2007 17:18:23 PAGE 6
304 1 DisplayOneChar(4,0,hour%10+0x30);
305 1
306 1 DisplayOneChar(6,0,minite/10+0x30); //液晶上顯示分
307 1 DisplayOneChar(7,0,minite%10+0x30);
308 1
309 1 DisplayOneChar(9,0,seconde/10+0x30); //液晶上顯示秒
310 1 DisplayOneChar(10,0,seconde%10+0x30);
311 1
312 1 DisplayOneChar(4,1,K/10+0x30); //液晶上顯示設(shè)定的溫度
313 1 DisplayOneChar(5,1,K%10+0x30);
314 1
315 1 DisplayOneChar(11,1,temp1/10+0x30); //液晶上顯示測得的溫度
316 1 DisplayOneChar(12,1,temp1%10+0x30);
317 1 DisplayOneChar(14,1,temp2/10+0x30);
318 1
319 1 if(ON_OFF==0) //若溫控標志為0
320 1 {
321 2 DisplayOneChar(14,0,0x4f); // 液晶上顯示不控溫的標志
322 2 DisplayOneChar(15,0,0x46);
323 2 }
324 1 else
325 1 {
326 2 DisplayOneChar(14,0,0x4f); // 液晶上顯示控溫的標志
327 2 DisplayOneChar(15,0,0x4e);
328 2 if(outflag==1)
329 2 DisplayOneChar(0,0,0x7c);
330 2 else
331 2 DisplayOneChar(0,0,0xef);
332 2 }
333 1
334 1
335 1 }
336 /************液晶顯示子函數(shù)2***************/
337
338 void displayfun2(void)
339 {
340 1 WriteCommandLCM(0x0c,1); //顯示屏打開,光標不顯示,不閃爍,檢測忙信號
341 1 DisplayListChar(0,0,str0);
342 1 DisplayListChar(0,1,str1);
343 1
344 1 DisplayOneChar(6,0,minite/10+0x30);
345 1 DisplayOneChar(7,0,minite%10+0x30);
346 1
347 1 DisplayOneChar(9,0,seconde/10+0x30);
348 1 DisplayOneChar(10,0,seconde%10+0x30);
349 1
350 1 DisplayOneChar(4,1,K/10+0x30);
351 1 DisplayOneChar(5,1,K%10+0x30);
352 1
353 1 DisplayOneChar(11,1,temp1/10+0x30);
354 1 DisplayOneChar(12,1,temp1%10+0x30);
355 1 DisplayOneChar(14,1,temp2/10+0x30);
356 1
357 1 WriteCommandLCM(0x0f,1); //顯示屏打開,光標顯示,閃爍,檢測忙信號
358 1 DisplayOneChar(3,0,hour/10+0x30);
359 1 DisplayOneChar(4,0,hour%10+0x30);
360 1 }
361
362 /**************液晶顯示子函數(shù)3*****************/
363
364 void displayfun3(void)
365 {
C51 COMPILER V7.50 SYSTEM_ALARM 06/22/2007 17:18:23 PAGE 7
366 1 WriteCommandLCM(0x0c,1); //顯示屏打開,光標不顯示,不閃爍,檢測忙信號
367 1 DisplayListChar(0,0,str0);
368 1 DisplayListChar(0,1,str1);
369 1
370 1 DisplayOneChar(3,0,hour/10+0x30);
371 1 DisplayOneChar(4,0,hour%10+0x30);
372 1
373 1 DisplayOneChar(9,0,seconde/10+0x30);
374 1 DisplayOneChar(10,0,seconde%10+0x30);
375 1
376 1 DisplayOneChar(4,1,K/10+0x30);
377 1 DisplayOneChar(5,1,K%10+0x30);
378 1
379 1 DisplayOneChar(11,1,temp1/10+0x30);
380 1 DisplayOneChar(12,1,temp1%10+0x30);
381 1 DisplayOneChar(14,1,temp2/10+0x30);
382 1
383 1
384 1 WriteCommandLCM(0x0f,1); //顯示屏打開,光標顯示,閃爍,檢測忙信號
385 1 DisplayOneChar(6,0,minite/10+0x30);
386 1 DisplayOneChar(7,0,minite%10+0x30);
387 1
388 1 }
389
390 /**************液晶顯示子函數(shù)4 *****************/
391
392 void displayfun4(void)
393 {
394 1 WriteCommandLCM(0x0c,1); //顯示屏打開,光標不顯示,不閃爍,檢測忙信號
395 1 DisplayListChar(0,0,str0);
396 1 DisplayListChar(0,1,str1);
397 1
398 1 DisplayOneChar(3,0,hour/10+0x30);
399 1 DisplayOneChar(4,0,hour%10+0x30);
400 1
401 1 DisplayOneChar(6,0,minite/10+0x30);
402 1 DisplayOneChar(7,0,minite%10+0x30);
403 1
404 1 DisplayOneChar(9,0,seconde/10+0x30);
405 1 DisplayOneChar(10,0,seconde%10+0x30);
406 1
407 1
408 1 DisplayOneChar(11,1,temp1/10+0x30);
409 1 DisplayOneChar(12,1,temp1%10+0x30);
410 1 DisplayOneChar(14,1,temp2/10+0x30);
411 1
412 1
413 1 WriteCommandLCM(0x0f,1); //顯示屏打開,光標顯示,閃爍,檢測忙信號
414 1 DisplayOneChar(4,1,K/10+0x30);
415 1 DisplayOneChar(5,1,K%10+0x30);
416 1
417 1 }
418
419 /**************鍵盤掃描子函數(shù)******************/
420
421 void keyscan(void)
422 {
423 1 uchar xx; //局部變量
424 1 P1=0xff;
425 1 if(P1!=0xff)
426 1 {
427 2 delay_LCM(50);
C51 COMPILER V7.50 SYSTEM_ALARM 06/22/2007 17:18:23 PAGE 8
428 2
429 2 if(P1!=0xff)
430 2 {
431 3 xx=P1;
432 3 switch(xx) // 根據(jù)按鍵狀態(tài),調(diào)用不同的子函數(shù)
433 3 {
434 4 case 0xfe:set_adj(); break;
435 4 case 0xfd:inc_key(); break;
436 4 case 0xfb:dec_key(); break;
437 4 case 0xf7:{delay_LCM(150);ON_OFF=!ON_OFF;while(!BLUE_ALARM);} break;
438 4 default:break;
439 4 }
440 3
441 3 }
442 2
443 2 }
444 1
445 1 }
446
447 /**************設(shè)定工作模式子函數(shù)****************/
448
449 void set_adj(void)
450 {
451 1 delay_LCM(100);
452 1 set++;
453 1 if(set>=4)set=0;
454 1 while(!RED_ALARM);
455 1 }
456
457 /****************按鍵加法子函數(shù)******************/
458
459 void inc_key(void)
460 {
461 1 delay_LCM(150);
462 1
463 1 switch(set)
464 1 {
465 2 case 0:if(P1==0xf7){delay_LCM(150);ON_OFF=!ON_OFF;} break;
466 2 case 1:hour++; if(hour>=23)hour=23; break;
467 2 case 2:minite++; if(minite>=59)minite=59;break;
468 2 case 3:K++;if(K>=99)K=99; break;
469 2 default:break;
470 2 }
471 1 while(!WRITE_ALARM);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -