📄 finalclock.lst
字号:
256 1 delay(2);
257 1 P1=0x7f;
258 1 P0=disp_code[h2];
259 1 delay(2);
260 1 }
261 void alarmset() //闹钟设置程序
262 {
263 1 key1=0;
264 1 if(key3==0)
265 1 {
266 2 while(!key3);
267 2 {
268 3 as++;
269 3 if(as==60)
270 3 as=0;
271 3 }
272 2 }
273 1 if(key4==0)
274 1 {
275 2 while(!key4);
276 2 {
277 3 am++;
278 3 if(am==60)
279 3 am=0;
280 3 }
281 2 }
282 1 if(key5==0)
283 1 {
284 2 while(!key5);
285 2 {
286 3 ah++;
287 3 if(ah==24)
288 3 ah=0;
289 3 }
290 2 }
291 1 display(ah,am,as);
292 1 }
293 void distribute() //记时程序
294 {
295 1 uchar e;
296 1 s=num/100;
297 1 if(s>60)
298 1 {
299 2 e=s/60;
300 2 m=m+e;
301 2 s=s%60;
302 2 num=0;
C51 COMPILER V6.12 FINALCLOCK 08/29/2010 19:31:23 PAGE 6
303 2 }
304 1 if(s==60)
305 1 {
306 2 num=0;
307 2 m++;
308 2
309 2 }
310 1 if(m==60)
311 1 {
312 2 m=0;
313 2 h++;
314 2
315 2 }
316 1 if(h==24)
317 1 h=0;
318 1
319 1 }
320 void zd_clock() //整点报时程序
321 {
322 1 if(m==0&&s==0)
323 1 {
324 2 tf=h;
325 2 if(h==0)
326 2 tf=24;
327 2 led=0;
328 2 delay(50);
329 2 beepopen(tf);
330 2 led=1;
331 2
332 2 }
333 1 }
334 void clock() //时钟程序
335 {
336 1 TR0=1;
337 1 distribute();
338 1 display(h,m,s);
339 1 }
340 void alarmbeep() //闹钟音乐程序
341 {
342 1 code unsigned char FREQH[] = {
343 1 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,
344 1 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,
345 1 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,
346 1 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};
347 1 code unsigned char FREQL[] = {
348 1 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,
349 1 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F,
350 1 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,
351 1 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};
352 1 //--------------------------------------
353 1 //义勇军进行曲数码表
354 1 code unsigned char sszymmh[] = {5, 1, 1, 1, 2, 3, 1, 2, 1, 1, 2, 3, 1, 2, 1, 5, 2, 1, 6, 1, 1, 7, 1, 1, 1
-, 2, 2, 1, 2, 2,
355 1 3, 2, 1, 1, 2, 1, 2, 2, 1, 3, 2, 1, 5, 2, 2, 5, 2, 2, 3, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1,
356 1 5, 2, 3, 3, 2, 1, 2, 2, 2, 2, 2, 4, 6, 2, 2, 5, 2, 2, 2, 2, 2, 3, 2, 2, 5, 2, 1, 3, 2, 1,
357 1 5, 2, 1, 3, 2, 1, 2, 2, 1, 3, 2, 1, 1, 2, 2, 3, 2, 2, 5, 1, 3, 6, 1, 1, 1, 2, 1, 1, 2, 1,
358 1 3, 2, 3, 3, 2, 1, 5, 2, 1, 5, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 6, 1, 2, 2, 2, 3, 5, 1, 1,
359 1 1, 2, 3, 1, 2, 1, 3, 2, 3, 3, 2, 1, 5, 2, 4, 1, 2, 3, 3, 2, 1, 5, 2, 1, 5, 2, 1, 6, 2, 2,
360 1 5, 2, 2, 3, 2, 3, 1, 2, 1, 5, 2, 1, 5, 2, 1, 5, 2, 1, 3, 2, 1, 1, 2, 1, 5, 2, 2, 1, 2, 2,
361 1 3, 2, 3, 1, 2, 1, 5, 2, 1, 5, 2, 1, 5, 2, 1, 3, 2, 1, 1, 2, 1, 5, 1, 2, 1, 2, 2, 5, 1, 2,
362 1 1, 2, 2, 5, 1, 2, 1, 2, 2, 1, 2, 2, 0, 0, 0};
363 1 //--------------------------------------
C51 COMPILER V6.12 FINALCLOCK 08/29/2010 19:31:23 PAGE 7
364 1
365 1
366 1 TMOD = 0x11;
367 1 EA = 1;
368 1 l = 0;
369 1 if(key5!=0)
370 1 time = 1;
371 1 while(time)
372 1 {
373 2 k = sszymmh[l] + 7 * sszymmh[l + 1] - 1;
374 2 timer0h = FREQH[k];
375 2 timer0l = FREQL[k];
376 2 time = sszymmh[l + 2];
377 2 l += 3;
378 2 song();
379 2 if(key5==0)
380 2 {
381 3 ET1=0;
382 3 time=0;
383 3 }
384 2 }
385 1 }
386
387 void timer1() interrupt 3 //定时器1中断处理程序
388 {
389 1 TR1 = 0;
390 1 BEEP = !BEEP;
391 1 TH1 = timer0h;
392 1 TL1 = timer0l;
393 1 TR1 = 1;
394 1 }
395
396 void delay1(unsigned char t0) //用于音乐程序的延时函数
397 {
398 1 unsigned char t1;
399 1 unsigned long t2;
400 1 for(t1 = 0; t1 < t0; t1++) //双重循环, 共延时t个半拍
401 1 for(t2 = 0; t2 <8000; t2++)
402 1 ; //延时期间, 可进入T0中断去发音
403 1 TR1 = 0; //关闭T1, 停止发音
404 1
405 1 }
406 void song() //演奏一个音符
407 {
408 1 TH1 = timer0h; //控制音调
409 1 TL1 = timer0l;
410 1 TR1=1; //启动T1, 由T1输出方波去发音
411 1 delay1(time); //控制时间长度
412 1 }
413 /******************************************************************************/
414 void delay2(int numb) //延时函数
415 {
416 1 while (numb--)
417 1 ;
418 1 }
419
420 /*******************************************************************************/
421 unsigned char Init_DS18B20(void) //初始化ds1820
422 {
423 1 unsigned char x = 0;
424 1 DQ = 1; //DQ复位
425 1 delay2(8); //稍做延时
C51 COMPILER V6.12 FINALCLOCK 08/29/2010 19:31:23 PAGE 8
426 1 DQ = 0; //单片机将DQ拉低
427 1 delay2(80); //精确延时 大于 480us
428 1 DQ = 1; //拉高总线
429 1 delay2(14);
430 1 x = DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
431 1 delay2(20);
432 1 return(x);
433 1 }
434
435 /******************************************************************************/
436 unsigned char ReadOneChar(void) //读一个字节
437 {
438 1 unsigned char r = 0;
439 1 unsigned char dat = 0;
440 1 for (r = 8; r > 0; r--)
441 1 {
442 2 DQ = 0; // 给脉冲信号
443 2 dat >>= 1;
444 2 DQ = 1; // 给脉冲信号
445 2 if (DQ)
446 2 {
447 3 dat |= 0x80;
448 3 }
449 2 delay2(4);
450 2 }
451 1 return (dat);
452 1 }
453
454 /******************************************************************************/
455 void WriteOneChar(unsigned char dat) //写一个字节
456 {
457 1 unsigned char s = 0;
458 1 for (s = 8; s > 0; s--)
459 1 {
460 2 DQ = 0;
461 2 DQ = dat & 0x01;
462 2 delay2(5);
463 2 DQ = 1;
464 2 dat >>= 1;
465 2 }
466 1 }
467 /*void Config18b20()
468 {
469 Init_DS18B20();
470 WriteOneChar(0xcc); //skip rom
471 WriteOneChar(0x4e); //write scratchpad
472 WriteOneChar(0x3c); //上限
473 WriteOneChar(0x3f); //下限
474 WriteOneChar(0xff); //set 11 bit (0.125)
475 Init_DS18B20();
476 WriteOneChar(0xcc); //skip rom
477 WriteOneChar(0x48); //保存设定值
478 Init_DS18B20();
479 WriteOneChar(0xcc); //skip rom
480 WriteOneChar(0xb8); //回调设定值
481 }*/
482
483 unsigned int ReadTemperature(void) //读取温度
484 {
485 1 unsigned char a = 0;
486 1 unsigned char b = 0;
487 1 unsigned int ttt = 0;
C51 COMPILER V6.12 FINALCLOCK 08/29/2010 19:31:23 PAGE 9
488 1 float tt = 0;
489 1 void Config18b20();
490 1 Init_DS18B20();
491 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
492 1 WriteOneChar(0x44); // 启动温度转换
493 1 Init_DS18B20();
494 1 WriteOneChar(0xCC); //跳过读序号列号的操作
495 1 WriteOneChar(0xBE); //读取温度寄存器
496 1 a = ReadOneChar(); //读低8位
497 1 b = ReadOneChar(); //读高8位
498 1 ttt = b;
499 1 ttt <<= 8;
500 1 ttt = ttt| a;
501 1 (ttt!=1360)?(tt=ttt*0.062525):0;
502 1 return (tt);
503 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1339 ----
CONSTANT SIZE = 341 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 42 24
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 + -