📄 万年历.lst
字号:
269 功能说明:向单总线写一个数据字节
270 ******************************************************************/
271 void w_1280Byte(uchar bytevalue)
272 {
273 1 uchar i;
274 1 for(i=0;i<8;i++)
275 1 {
276 2 DQ=0; // 将DQ信号线拉低启动读时隙
277 2 DQ=bytevalue&0x01; //
278 2 delay(5);//等待写时隙结束
279 2 DQ=1; //释放
280 2 bytevalue>>=1;
281 2 }
282 1 delay(5); ////等待写时隙结束
283 1 }
284 /*****************************************************************
285 函数名称:uint read_T(void)
286 功能说明:读取1820温度
287 *******************************************************************/
288 uint read_T(void)
289 {
290 1 uchar a=0;
291 1 uchar b=0;
292 1 uint t=0;
293 1 bus_rest();
294 1 w_1280Byte(0xCC); // 跳过读序号列号的操作 ;
295 1 w_1280Byte(0x44); // 启动温度转换,模数转化;
296 1 bus_rest();
297 1 w_1280Byte(0xCC); //跳过读序号列号的操作 ;
298 1 w_1280Byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 ;
299 1 a=r_1820BYTE();// 低8位
300 1 b=r_1820BYTE();// 高8位
301 1 t=(b*256)+a;
302 1 return(t);
303 1 }
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 6
304 /**************************************************************
305 函数名称:void show_T(uint temp)
306 函数功能:显示温度
307 **************************************************************/
308 void show_T(uint temp)
309 {
310 1 int i;
311 1 float ftemp;
312 1 ftemp = temp* 0.0625;
313 1 sprintf(dis1,"%f",ftemp);//把温度值写入数组内存
314 1 w_12864(com,0x98+3);
315 1 for(i=0;i<5;i++)
316 1 w_12864(dat,dis1[i]); //写入温度
317 1 }
318 /*---------------以下为显示相关函数--------------------------*/
319 /******************************
320 函数名称: void fenli(uchar x,uchar y,uchar val)
321 功能描述: 指定位置写入数据
322 ********************************/
323 void fenli(uchar x,uchar y,uchar val)
324 { uchar ge,shi,addr,i=0;
325 1 if(val==5)//这里把星期数字显示的转换为中文
326 1 {
327 2 w_12864(com,0x88+2);
328 2 for(i=0;i<2;i++)
329 2 { //一个汉字写两次
330 3 if(TAB_1302[5]==0)w_12864(dat,TAB_XQ[i]);
331 3 if(TAB_1302[5]==1)w_12864(dat,TAB_XQ[2+i]); //
332 3 if(TAB_1302[5]==2)w_12864(dat,TAB_XQ[3+i]); //!!??星期三显示没规律,不知咋回事.
333 3 if(TAB_1302[5]==3)w_12864(dat,TAB_XQ[5+i]);
334 3 if(TAB_1302[5]==4)w_12864(dat,TAB_XQ[7+i]);
335 3 if(TAB_1302[5]==5)w_12864(dat,TAB_XQ[9+i]);
336 3 if(TAB_1302[5]==6)w_12864(dat,TAB_XQ[11+i]);
337 3 }
338 2 }
339 1 else
340 1 {
341 2 shi=TAB_1302[val]/10;//分离十位
342 2 ge=TAB_1302[val]%10;
343 2 if(x==1)x=0x80;
344 2 if(x==2)x=0x90;
345 2 if(x==3)x=0x88;
346 2 if(x==4)x=0x98;
347 2 addr=x+y;
348 2 w_12864(com,addr);//指定位置
349 2 w_12864(dat,0x30+shi);//写入
350 2 w_12864(dat,0x30+ge);
351 2 }
352 1 }
353 /*************************************************************
354 函数名称:void display(void)
355 功能描述: 显示函数
356 **************************************************************/
357 void display(void)
358 { get_1302(); //读1302
359 1 fenli(3,7,0); //读秒
360 1 fenli(3,5,1); //读分
361 1 fenli(3,3,2); //读时
362 1 fenli(2,5,3); //读日
363 1 fenli(2,3,4); //读月
364 1 fenli(3,2,5); //读星期
365 1 fenli(2,1,6); //读年
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 7
366 1 }
367 /*---------------按键处理相关函数--------------------------*/
368 /************************************************************
369 函数名称:void scanner()
370 功能描述: 按键函数
371 *************************************************************/
372 void scanner()
373 { uchar i,j;
374 1 if(!key) //功能键按下
375 1 { delay1ms(500); //延时500MS
376 2 if(!key) //还按下,退出时间调整
377 2 { keyflag=0; //标志位为0
378 3 sum=0; //清0
379 3 w_12864(com,0x0c);//清闪烁
380 3 for(i=0;i<7;i++)//十进制转十六进制
381 3 { j=TAB_1302[i]/10;
382 4 TAB_1302[i]=TAB_1302[i]%10;
383 4 TAB_1302[i]=TAB_1302[i]+16*j;
384 4 }
385 3 init_1302(); //写入1302
386 3 while(!key); //等待释放
387 3 delay1ms(10); //延时消抖
388 3 }
389 2 else //500MS内放开
390 2 { keyflag=1; //标志为1,进行时间调整
391 3 sum++; //功能键加1
392 3 if(sum==8)
393 3 sum=0;
394 3 switch(sum)
395 3 {
396 4 case 1: //
397 4 { w_12864(com,0x98+7);
398 5 w_12864(com,0x0f);
399 5 break;
400 5 }
401 4 case 2: //为2,年闪烁
402 4 w_12864(com,0x90+1);
403 4 break;
404 4 case 3: //月闪烁
405 4 w_12864(com,0x90+3);
406 4 break;
407 4 case 4: //日闪烁
408 4 w_12864(com,0x90+5);
409 4 break;
410 4 case 5: //星期闪烁
411 4 w_12864(com,0x88+2);
412 4 break;
413 4 case 6: //分闪烁
414 4 w_12864(com,0x88+5);
415 4 break;
416 4 case 7: //时闪烁
417 4 w_12864(com,0x88+3);
418 4 break;
419 4 }
420 3 }
421 2 }
422 1 if(sum) //功能键按下
423 1 {
424 2 if(!key1)
425 2 { delay1ms(10);
426 3 if(!key1)
427 3 { while(!key1);//等待加1键释放
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 8
428 4 delay1ms(10);
429 4 if(sum==1)
430 4 { //备用
431 5 }
432 4 if(sum==2)
433 4 { TAB_1302[6]++;
434 5 if(TAB_1302[6]==100)
435 5 TAB_1302[6]=0;
436 5 fenli(2,1,6);
437 5 w_12864(com,0x90+1);//闪烁归位
438 5 }
439 4 if(sum==3)
440 4 { TAB_1302[4]++;
441 5 if(TAB_1302[4]==13)
442 5 TAB_1302[4]=1;
443 5 fenli(2,3,4);
444 5 w_12864(com,0x90+3);
445 5 }
446 4 if(sum==4)
447 4 { TAB_1302[3]++;
448 5 if(TAB_1302[3]==32)
449 5 TAB_1302[3]=1;
450 5 fenli(2,5,3);
451 5 w_12864(com,0x90+5);
452 5 }
453 4 if(sum==5)
454 4 { TAB_1302[5]++;
455 5 if(TAB_1302[5]==7)
456 5 TAB_1302[5]=0;
457 5 fenli(3,2,5);
458 5 w_12864(com,0x88+2);
459 5 }
460 4 if(sum==6)
461 4 { TAB_1302[1]++;
462 5 if(TAB_1302[1]==60)
463 5 TAB_1302[1]=0;
464 5 fenli(3,5,1);
465 5 w_12864(com,0x88+5);
466 5 }
467 4 if(sum==7)
468 4 { TAB_1302[2]++;
469 5 if(TAB_1302[2]==24)
470 5 TAB_1302[2]=0;
471 5 fenli(3,3,2);
472 5 w_12864(com,0x88+3);
473 5 }
474 4 }
475 3 }
476 2
477 2 }
478 1 }
479 //=============================================================
480 void init(void)
481 {
482 1 uchar i;
483 1 init_12864();
484 1 init_1302();
485 1 while(TAB1[i]!='\0')
486 1 {
487 2 w_12864(dat,TAB1[i]);
488 2 i++;
489 2 }
C51 COMPILER V7.50 万年繽 11/15/2008 19:16:03 PAGE 9
490 1 i=0;
491 1 w_12864(com,0x90);
492 1 while(TAB2[i]!='\0')
493 1 {
494 2 w_12864(dat,TAB2[i]);
495 2 i++;
496 2 }
497 1 i=0;
498 1 w_12864(com,0x88);
499 1 while(TAB3[i]!='\0')
500 1 {
501 2 w_12864(dat,TAB3[i]);
502 2 i++;
503 2 }
504 1 i=0;
505 1 w_12864(com,0x98);
506 1 while(TAB4[i]!='\0')
507 1 {
508 2 w_12864(dat,TAB4[i]);
509 2 i++;
510 2 }
511 1 }
512 /*************************************************************
513 函数名称:主函数
514 函数功能:
515 **************************************************************/
516 main()
517 {
518 1 init();
519 1 while(1)
520 1 {
521 2 scanner(); //检测键盘
522 2 if(!keyflag) //标志为0
523 2 { display(); //调用显示
524 3 show_T(read_T()); //显示温度
525 3 delay1ms(500);
526 3 }
527 2 }
528 1 }
529
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1423 ----
CONSTANT SIZE = 70 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -