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

📄 ds1302b.lst

📁 这个也是51单片机的应用程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 381   1          P1 = 0x95;
 382   1         else
 383   1          P1 = 0x96;
 384   1         P2 = 0x01;
 385   1         lck = 1; 
 386   1         P1 = 0xa1;
 387   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环 
 388   1      
 389   1         lck = 0;
 390   1         P1 = 0x44;
 391   1         P2 = 0x01;
 392   1         lck = 1;
 393   1         P1 = 0xa1;
 394   1      /*********以上为判断忙标志********/
 395   1         WRITE;
 396   1      
 397   1         P0 = x;
 398   1         lck = 0;
 399   1         if(right)
 400   1          P1 = 0xc5;
 401   1         else
 402   1          P1 = 0xc6;
 403   1         P2 = 0x01;
 404   1         lck = 1;
 405   1         P1 = 0xa1;
 406   1         
 407   1         lck = 0;
 408   1         P1 = 0x44;
 409   1          P2 = 0x01;
 410   1         lck = 1;
 411   1         P1 = 0xa1;
 412   1      /**********以上为送列命令***********/
 413   1         DISABLED;
 414   1         if(right)
 415   1          statu = 0x01;
 416   1         else
 417   1          statu = 0x00;//置左又半区标志
 418   1      }
 419          
 420          
 421          /**************数据写输出***************/
 422          void  Wrdata(uchar  x,uchar  row,uchar  col)
 423          {   
 424   1          Locatexy(row,col);//定位显示位置
 425   1      
 426   1          DISABLED;
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 8   

 427   1          lck = 0;
 428   1          if(statu)
 429   1           P1 = 0x4d;//ELCD=0,RSTLOW=1(低电平复位无效),R/W=0(写),D/I= 1 ,CS138无效,CSB=0,CSA=1
 430   1          else
 431   1           P1 = 0x4e;//ELCD=0,RSTLOW=1(低电平复位无效),R/W=0(写),D/I= 1 ,CS138无效,CSB=1,CSA=0
 432   1          P2 = 0x01;
 433   1          lck = 1;
 434   1          P1 = 0xa1;
 435   1      
 436   1          P0 = x;
 437   1      
 438   1          lck = 0;
 439   1          if(statu)
 440   1           P1 = 0xcd;//ELCD=1,RSTLOW=1(低电平复位无效),R/W=0(写),D/I= 1 ,CS138无效,CSB=0,CSA=1
 441   1          else
 442   1           P1 = 0xce;//ELCD=1,RSTLOW=1(低电平复位无效),R/W=0(写),D/I= 1 ,CS138无效,CSB=1,CSA=0
 443   1          P2 = 0x01;
 444   1          lck = 1;
 445   1          P1 = 0xa1;
 446   1          
 447   1          WRITE;
 448   1          ENABLED;
 449   1      
 450   1          lck = 0;
 451   1          P1 = 0x44;
 452   1          P2 = 0x01;
 453   1          lck = 1;///ELCD=0(LCD无效)
 454   1          P1 = 0xa1;
 455   1          DISABLED;
 456   1      }
 457          
 458          
 459          
 460          /****************图形输出******************/
 461          /*void Putpicture(void)
 462          {
 463             unsigned char i,j,row, col ;
 464             unsigned int x;
 465             row = 0; col=0;
 466              for(j=0;j<128;j++){
 467               x=j*0x08; 
 468               for(i=0;i<8;i++)
 469                { cbyte=picture[x++];
 470            //      Xchange();           //翻转转换(阴码,顺向,逐列式。)若逐列式则无须转换
 471                  Wrdata(cbyte,row,col);
 472                  row++;
 473                }   
 474               row=0;
 475               col++;    
 476              }  
 477                
 478          }*/
 479          
 480          /***************半角数据点阵输出*******************/
 481          void Puthalf(uchar *strch,uchar row,uchar col)
 482          {
 483   1          uchar i,bakerx;
 484   1          bakerx = row;
 485   1          for(i=0;i<16;i++)//上半字输出
 486   1           {
 487   2              cbyte=strch[i];
 488   2              Wrdata(cbyte,bakerx,col);
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 9   

 489   2        
 490   2              cbyte=strch[i+1];
 491   2              Wrdata(cbyte,bakerx+1,col);
 492   2              col++;
 493   2              i++;
 494   2             }
 495   1      }
 496          
 497          
 498          /************汉字输出******************/
 499          void Puthz(uchar *str,uchar row,uchar col)
 500          {
 501   1          uchar xdata i,bakerx;
 502   1          bakerx=row;
 503   1          for(i=0;i<32;i++)
 504   1            {
 505   2              cbyte=str[i];
 506   2              Wrdata(cbyte,row,col);       //上半字节输出
 507   2              i++;
 508   2              row=bakerx+1;
 509   2              cbyte=str[i];
 510   2              Wrdata(cbyte,row,col);       //下半字节输出
 511   2      
 512   2              row=bakerx;
 513   2              col=col+1;
 514   2            }
 515   1      }
 516          
 517          void VtoH8x16change(uchar xdata  *hzbuf)
 518          {   uchar  i,j,k,  cash[16];
*** WARNING C259 IN LINE 518 OF DS1302B.C: pointer: different mspace
 519   1          uchar   newbyte, savebit[8];
 520   1          for(k=0;k<16;k++){
 521   2            newbyte = 0;
 522   2            for(i=0;i<8;i++){
 523   3              savebit[i]=hzbuf[i] & 0x80;
 524   3             }
 525   2            for(j=0;j<8;j++){
 526   3              savebit[j] = savebit[j] >> (7-j);
 527   3              newbyte = newbyte | savebit[j];
 528   3             }
 529   2            cash[k] = newbyte;
 530   2            newbyte = 0;
 531   2            for(i=8;i<16;i++){
 532   3              savebit[i-8]=hzbuf[i] & 0x80;
 533   3             }
 534   2            for(j=0;j<8;j++){
 535   3              savebit[j] = savebit[j] >> (7-j);
 536   3              newbyte = newbyte |savebit[j];
 537   3             }
 538   2            cash[k+1] = newbyte;
 539   2            for(j=0;j<16;j++){
 540   3              hzbuf[j] = hzbuf[j] <<1; 
 541   3             }
 542   2            k++;
 543   2           }
 544   1          for(i=0;i<16;i++)
 545   1            hzbuf[i] = cash[i];
 546   1       }
 547          
 548          
 549          
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 10  

 550          void VtoHchange(uchar *hzbuf)
 551          {   uchar xdata i,j,k,  cash[32];
 552   1          uchar xdata  newbyte, savebit[8];
 553   1          for(k=0;k<16;k++){
 554   2            newbyte = 0;
 555   2            for(i=0;i<16;i++){
 556   3              savebit[i/2]=hzbuf[i] & 0x80;
 557   3              i++;
 558   3             }
 559   2            for(j=0;j<8;j++){
 560   3              savebit[j] = savebit[j] >> (7-j);
 561   3              newbyte = newbyte | savebit[j];
 562   3             }
 563   2            cash[k] = newbyte;
 564   2            newbyte = 0;
 565   2            for(i=16;i<32;i++){
 566   3              savebit[(i-16)/2]=hzbuf[i] & 0x80;
 567   3              i++;
 568   3             }
 569   2            for(j=0;j<8;j++){
 570   3              savebit[j] = savebit[j] >> (7-j);
 571   3              newbyte = newbyte |savebit[j];
 572   3             }
 573   2            cash[k+1] = newbyte;
 574   2            for(j=0;j<32;j++){
 575   3              hzbuf[j] = hzbuf[j] <<1; 
 576   3              j++;
 577   3             }
 578   2            k++;
 579   2           }
 580   1      
 581   1           for(k=16;k<32;k++){
 582   2            newbyte = 0;
 583   2            for(i=1;i<16;i++){
 584   3              savebit[(i-1)/2]=hzbuf[i] & 0x80;
 585   3              i++;
 586   3             }
 587   2            for(j=0;j<8;j++){
 588   3              savebit[j] = savebit[j] >> (7-j);
 589   3              newbyte = newbyte | savebit[j];
 590   3             }
 591   2            cash[k] = newbyte;
 592   2            newbyte = 0;
 593   2            for(i=17;i<32;i++){
 594   3              savebit[(i-17)/2]=hzbuf[i] & 0x80;
 595   3              i++;
 596   3             }
 597   2            for(j=0;j<8;j++){
 598   3              savebit[j] = savebit[j] >> (7-j);
 599   3              newbyte = newbyte | savebit[j];
 600   3             }
 601   2            cash[k+1] = newbyte;
 602   2            for(j=1;j<32;j++){
 603   3             hzbuf[j] = hzbuf[j] <<1; 
 604   3             j++;
 605   3            }
 606   2            k++;
 607   2           }
 608   1         for(i=0;i<32;i++)
 609   1            hzbuf[i] = cash[i];
 610   1        }    
 611          
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 11  

 612          
 613          
 614          void out16hz(uchar *p, uchar  xdata ucXArray[])
*** WARNING C258 IN LINE 614 OF DS1302B.C: 'ucXArray': mspace on parameter ignored
 615          {
 616   1              unsigned long  data num,qm,wm;
 617   1              unsigned long  data record ;
 618   1          unsigned long data pointer;
 619   1              uchar  data ChineseArray[32], i;
 620   1              memset(ChineseArray, 0, 32);
 621   1              memset(ucXArray, 0, 32);
 622   1              num = p[0];
 623   1         //由该汉字计算对应点阵的地址
 624   1              if(num > 0x0a1)
 625   1                      qm = (num - 0xa1);
 626   1      
 627   1              num = p[1];
 628   1              if(num > 0x0a1)
 629   1                      wm = (num - 0xa1);
 630   1      
 631   1              record =qm * 94 + wm;
 632   1              pointer = record * 32;
 633   1      
 634   1          //  确定字库地址
 635   1              if(pointer <= 0xffff ){
 636   2             if(simple){
 637   3               lck = 0;
 638   3               P1 = 0x21;
 639   3               P2 = 0x03;
 640   3               lck = 1;
 641   3               }else{
 642   3               lck = 0;
 643   3               P1 = 0x21;
 644   3               P2 = 0x0b;
 645   3               lck = 1;
 646   3              }
 647   2      
 648   2              } else if(pointer <= 0x1ffff) {
 649   2              if(simple){
 650   3                       lck = 0;
 651   3               P1 = 0x21;
 652   3               P2 = 0x05;
 653   3               lck = 1;
 654   3              }else{
 655   3               lck = 0;
 656   3               P1 = 0x21;
 657   3               P2 = 0x0d;
 658   3               lck = 1;
 659   3              }
 660   2                      pointer -= 0x10000;
 661   2              } else if(pointer <= 0x2ffff) {
 662   2              if(simple){
 663   3                       lck = 0;
 664   3               P1 = 0x21;
 665   3               P2 = 0x07;
 666   3               lck = 1;
 667   3              }else{
 668   3               lck = 0;
 669   3               P1 = 0x21;
 670   3               P2 = 0x0f;
 671   3               lck = 1;
 672   3              }
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 12  

 673   2                      pointer -= 0x20000;
 674   2              } else if(pointer <= 0x3ffff) {
 675   2      
 676   2                       lck = 0;
 677   2               P1 = 0x21;
 678   2               P2 = 0x09;
 679   2               lck = 1;
 680   2                      pointer -= 0x30000;
 681   2              }
 682   1      
 683   1              for(i = 0; i < 32; i++)// 从字库中取出点阵 
 684   1                      ChineseArray[i] = XBYTE[pointer+i];
 685   1      
 686   1               lck = 0;
 687   1               P1 = 0x21;
 688   1               P2 = 0x01;
 689   1               lck = 1;
 690   1      
 691   1              for(i = 0; i < 32; i++)//将汉字点阵拷贝到外部RAM中
 692   1                      ucXArray[i] = ChineseArray[i];
 693   1      
 694   1              return;
 695   1      }
 696          
 697          /********************显示中文*******************************/
 698          void vWrite16x16Chinese(uchar *ch,uchar row,uchar col,bit flag)
 699          {
 700   1              uchar  xdata  ucXArray[32],i;
 701   1              out16hz(ch, ucXArray);
 702   1                               //字库中字模:逐行,顺序
 703   1          VtoHchange(ucXArray);//将字模变成:逐列,顺序
 704   1      
 705   1          if(flag){     // 反白显示汉字
 706   2                      for(i = 0; i < 32; i++)
 707   2                              ucXArray[i] = ~ucXArray[i];//字模取反
 708   2              }
 709   1      
 710   1              Puthz(ucXArray,row,col);//输出数据到LCD
 711   1      }
 712          
 713          /************************显示英文和符号字符********************/
 714          void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag)
 715          {
 716   1              uchar  xdata  ucXArray[16],i;
 717   1      
 718   1          if(flag){     // 反白显示英文
 719   2                      for(i = 0; i < 16; i++)
 720   2                              ucXArray[i] = ~ch[i];
 721   2              }else{
 722   2              for(i = 0; i < 16; i++)
 723   2                  ucXArray[i] = ch[i];
 724   2          }
 725   1          VtoH8x16change(ucXArray);
 726   1              Puthalf(ucXArray,row,col);
 727   1      }
 728          
 729          /*************************显示中英文字符串**********************/
 730          void  vWrite8x16String(uchar  *str,uchar row, uchar col, bit flag)
 731          {
 732   1              unsigned char  i,  j,thiscol;
 733   1      
 734   1              j = strlen(str);
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 13  

 735   1      
 736   1              for(i = 0; i < j; i++)
 737   1              {   thiscol = (i % 16) * 8 + col;//计算列地址
 738   2                      if(str[i] < 0xa1){//当前显示内容为英文字符
 739   3      
 740   3                vWrite8x16Character(&char_Table[str[i]-0x20][0],row,thiscol,flag);
 741   3                }           
 742   2                      else{//当前字符为中文
 743   3                        vWrite16x16Chinese(&str[i],row,thiscol,flag);
 744   3                        i ++;
 745   3                        }
 746   2              if(i>15){//换行
 747   3               row++;
 748   3               col=0;
 749   3              }
 750   2              }
 751   1      }
 752          
 753          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3161    ----
   CONSTANT SIZE    =     37    ----
   XDATA SIZE       =      2      96
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2     130
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       3
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  3 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -