⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 万年历.lst

📁 以12864液晶作为显示模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -