📄 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写一个字节****************/
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); // 启动温度转换
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 /***************液晶显示子函数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); //液晶上显示设定的温度
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 /************液晶显示子函数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 /**************液晶显示子函数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 /**************液晶显示子函数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 /**************键盘扫描子函数******************/
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) // 根据按键状态,调用不同的子函数
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 /**************设定工作模式子函数****************/
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 /****************按键加法子函数******************/
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -