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

📄 hclcd.lst

📁 单片机开发板源程序适合初学者 第二部分DA转换输出
💻 LST
📖 第 1 页 / 共 4 页
字号:
 517   3                              k--;
 518   3                      }
 519   2              }                       
 520   1      }
 521          //6*12点阵的ASC码显示程序
 522          void ASC12disp(Uchar Nowrow,Uchar Nowcol,Uchar ASCplace)
 523          {
 524   1              Uchar i,tmp1,tmp2,k=6;
 525   1              Uint j;
 526   1              j = ASCplace*12;
 527   1              if((Nowrow%2)==0)                       //
 528   1              {
 529   2                      switch(Nowrow)
 530   2                      {
 531   3                              case 0: i=0;break;
 532   3                              case 2: i=3;break;
 533   3                              default: i=6;
 534   3                      }
 535   2                      while(k!=0)
 536   2                      {
 537   3                              if(Nowcol<0x40)
 538   3                                      {CS1=0;CS2=1;}
 539   3                              else
 540   3                              {       if(Nowcol<0x80)
 541   4                                      {CS1=1;CS2=0;}
 542   4                                      else
 543   4                                      {break;}
 544   4                              }
 545   3                              lcdwrite_cmd(i|0xb8);
 546   3                              lcdwrite_cmd(Nowcol|0x40);
 547   3                              lcdwrite_dat(ASC12[j]);
 548   3                              lcd_busy();
 549   3                              lcdwrite_cmd((i+1)|0xb8);       //到下一页
 550   3                              lcdwrite_cmd(Nowcol|0x40);
C51 COMPILER V7.06   HCLCD                                                                 09/24/2008 15:03:44 PAGE 10  

 551   3                              tmp1 = lcdread_dat();
 552   3                              lcdwrite_cmd(Nowcol|0x40);
 553   3                              lcdwrite_dat((ASC12[j+6]&0x0f)|(tmp1&0xf0));
 554   3                              j++;
 555   3                              Nowcol++;
 556   3                              k--;
 557   3                      }
 558   2              }
 559   1              else
 560   1              {
 561   2                      switch(Nowrow)
 562   2                      {
 563   3                              case 1: i=1;break;
 564   3                              default: i=4;
 565   3                      }
 566   2                      while(k!=0)
 567   2                      {
 568   3                              if(Nowcol<0x40)
 569   3                              {CS1=0;CS2=1;}
 570   3                              else
 571   3                              {
 572   4                                      if(Nowcol<0x80)
 573   4                                      {CS1=1;CS2=0;}
 574   4                                      else
 575   4                                      {break;}
 576   4                              }
 577   3                              lcdwrite_cmd(i|0xb8);
 578   3                              lcdwrite_cmd(Nowcol|0x40);
 579   3                              tmp1=lcdread_dat();
 580   3                              tmp1=tmp1&0x0f;
 581   3                              tmp1=(ASC12[j]<<4)|tmp1;
 582   3                              tmp2=(ASC12[j+6]<<4)|(ASC12[j]>>4);
 583   3                              lcdwrite_cmd(Nowcol|0x40);
 584   3                              lcdwrite_dat(tmp1);
 585   3                              lcd_busy();
 586   3                              lcdwrite_cmd((i+1)|0xb8);
 587   3                              lcdwrite_cmd(Nowcol|0x40);
 588   3                              lcdwrite_dat(tmp2);
 589   3                              j++;
 590   3                              Nowcol++;
 591   3                              k--;
 592   3                      }
 593   2              }                       
 594   1      }
 595          
 596                          
 597          
 598          
 599          
 600          //以动画的形式显示公司的标志,入口为在水平的第几个位置,现把它做,从32到1,由2张32X16的图组成
 601          void flashlogo(Uchar Bmpcol)
 602          {
 603   1              Uchar i,j,p;
 604   1      //把当前要用的区间清空  
 605   1              CS1=0,CS2=1;
 606   1              lcdwrite_cmd(0xbe);
 607   1              lcdwrite_cmd(0x40);
 608   1              for(i=64;i>0;i--)
 609   1              {
 610   2                      lcdwrite_dat(0x00);
 611   2                      lcd_busy();
 612   2              }
C51 COMPILER V7.06   HCLCD                                                                 09/24/2008 15:03:44 PAGE 11  

 613   1              lcdwrite_cmd(0xbf);
 614   1              lcdwrite_cmd(0x40);
 615   1              for(i=64;i>0;i--)
 616   1              {
 617   2                      lcdwrite_dat(0x00);
 618   2                      lcd_busy();
 619   2              }
 620   1      //开始写要设定的数据(左半边)    
 621   1              lcdwrite_cmd(0xbe);
 622   1              lcdwrite_cmd(0x40);
 623   1              j=Bmpcol;
 624   1              for(;j<=32;j++)
 625   1              {
 626   2                      lcdwrite_dat(Bmp1zk[j-1]);
 627   2                      lcd_busy();
 628   2              }
 629   1              lcdwrite_cmd(0xbf);
 630   1              lcdwrite_cmd(0x40);
 631   1              j=Bmpcol;
 632   1              for(;j<=32;j++)
 633   1              {
 634   2                      lcdwrite_dat(Bmp1zk[j-1+32]);
 635   2                      lcd_busy();
 636   2              }
 637   1      //开始写要设定的数据(右半边)
 638   1              j=Bmpcol;
 639   1              lcdwrite_cmd(0xbe);
 640   1              lcdwrite_cmd((32+j-1)|0x40);
 641   1              p=0;
 642   1              for(;j<=32;j++)
 643   1              {
 644   2                      lcdwrite_dat(Bmp2zk[p++]);
 645   2                      lcd_busy();
 646   2              }
 647   1              j=Bmpcol;
 648   1              lcdwrite_cmd(0xbf);
 649   1              lcdwrite_cmd((32+j-1)|0x40);
 650   1              p=0;
 651   1              for(;j<=32;j++)
 652   1              {
 653   2                      lcdwrite_dat(Bmp2zk[32+(p++)]);
 654   2                      lcd_busy();
 655   2              }
 656   1      }
 657          
 658          //显示一幅128X64的图片,参数为图片在bmp12864放置的第几个图
 659          void Disp128_64(Uchar BMPplace)
 660          {
 661   1              Uchar   i,Nowcol,k;
 662   1              Uint    j;
 663   1              j=(BMPplace-1)*1024;    //计算出在图表格中的起始位置
 664   1              lcdclrall();
 665   1              for(i=0;i<8;i++)
 666   1              {       Nowcol=0x00;
 667   2                      k=128;
 668   2                      while(k!=0)
 669   2                      {
 670   3                              if(Nowcol<0x40)
 671   3                              {CS1=0;CS2=1;}
 672   3                              else
 673   3                              {               if(Nowcol<0x80)
 674   4                                      {CS1=1;CS2=0;}
C51 COMPILER V7.06   HCLCD                                                                 09/24/2008 15:03:44 PAGE 12  

 675   4                                      else
 676   4                                      {break;}
 677   4                              }
 678   3                              lcdwrite_cmd(i|0xb8);
 679   3                              lcdwrite_cmd(Nowcol|0x40);
 680   3                              lcdwrite_dat(bmp12864[j]);
 681   3                              lcd_busy();
 682   3                              Nowcol++;
 683   3                              j++;
 684   3                              k--;
 685   3                      }
 686   2              }       
 687   1      }       
 688          void delay(void)
 689          {
 690   1              Uchar i,j,k;
 691   1              for(i=0x02;i>0;i--)
 692   1              {
 693   2                      for(j=0x96;j>0;j--)
 694   2                      {
 695   3                              for(k=0xfa;k>0;k--)
 696   3                              {
 697   4                                      _nop_();
 698   4      //                              _nop_();
 699   4                              }
 700   3                      }
 701   2              }
 702   1      }
 703          
 704          
 705          /*----------------------I2C要用到的一些子程序---------------------------------*/
 706          /***********************以下为一些用到的子程序*********************************/
 707          /*延时子程序*/
 708          void Delay_1ms(Uchar time)
 709          {
 710   1              Uchar j;
 711   1              while(time--)
 712   1              {
 713   2                      for(j=163;j!=0;j--)
 714   2                      {;}
 715   2              }
 716   1      }
 717          
 718          /*I2C的起动程序*/
 719          void I2CStart(void)     
 720          {
 721   1              SDA = 1;
 722   1              SomeNOP();
 723   1              SCL = 1;
 724   1              SomeNOP();
 725   1              SDA = 0;
 726   1              SomeNOP();
 727   1              SCL = 0;
 728   1              SomeNOP();
 729   1      }
 730          
 731          /*I2C的停止程序*/
 732          void I2CStop(void)
 733          {
 734   1              SDA = 0;
 735   1              SomeNOP();
 736   1              SCL = 1;
C51 COMPILER V7.06   HCLCD                                                                 09/24/2008 15:03:44 PAGE 13  

 737   1              SomeNOP();
 738   1              SDA = 1;
 739   1              SomeNOP();
 740   1      }
 741          
 742          void ACK(void)                  //Acknowledge信号
 743          {
 744   1              SDA = 0;
 745   1              SomeNOP();
 746   1              SCL = 1;
 747   1              SomeNOP();
 748   1              SCL = 0;
 749   1              SomeNOP();
 750   1      }
 751          
 752          void NACK(void)                 //没有Acknowledge信号
 753          {
 754   1              SDA = 1;
 755   1              SomeNOP();
 756   1              SCL = 1;
 757   1              SomeNOP();
 758   1              SCL = 0;
 759   1              SomeNOP();
 760   1      }
 761          
 762          void AutoACK(void)              //在一定的时间内自动确定ACK的信号//
 763          {
 764   1              Uchar i = 0;
 765   1              SCL = 1;
 766   1              SomeNOP();
 767   1              while((SDA == 1)&&(i<255))i++;
 768   1              SCL = 0;
 769   1              SomeNOP();
 770   1      }
 771          
 772                  
 773          /*I2C写数据程序(向数据线上写一个BYTE)*/
 774          void Writex(Uchar j)
 775          {
 776   1              Uchar i,temp;
 777   1              temp = j;
 778   1              for (i=0;i<8;i++)       //串行移位,先送高位,再送低位//
 779   1              {

⌨️ 快捷键说明

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