12864.txt

来自「我写的12864显示程序,完整的,能显示字符和图形」· 文本 代码 · 共 507 行 · 第 1/2 页

TXT
507
字号
     RS=0;
     RW=0;
     P0=0xB8|x;
     P0=0xFF;
   }
/*********************************************************************************************
    * 名称:DidplayWord                                                            
    * 说明
    * 功能:在给定位置显示一个字节                                                  
    * 调用:
    * 输入:                                                                       
    * 返回值:
  **********************************************************************************************/                                                                  
 void DidplayWord(uchar *po)
 {
  LCD_busy();
  E=0;
  RS=1;
  RW=0;
  P0=*po;
  E=1;
  E=0;
  P0=0xFF;
 }
/*********************************************************************************************
    * 名称:WRCOM1,WRCOM2                                                    
    * 说明
    * 功能:在给定位置显示一个字节                                                  
    * 调用:
    * 输入:                                                                       
    * 返回值:
  **********************************************************************************************/ 
  void WRCOM1(uchar LCDCOM)
  {
      LCD_busy();
      E=0;
      RW=0;
      RS=0;
      CS1=1;
      CS2=0;
      P0=LCDCOM;
      E=0;
      E=1;
   }
 void WRCOM2(uchar LCDCOM)
  {
      LCD_busy();
      E=0;
      RW=0;
      RS=0;
      CS1=0;
      CS2=1;
      P0=LCDCOM;
      E=0;
      E=1;
   }
/******************************************************************************************
    * 名称:ZSINIT                                                         
    * 说明:
    * 功能:初始化字符显示状态标志数组                                                  
    * 调用:
    * 输入:                                                                       
    * 返回值:
  **********************************************************************************************/                                                                   
 void ZSINIT(void)
 {
  uchar i;
  for(i=0;i<=11;i++)Zs[i]=0;                                /*使用频段*/
   switch(Hzf)                                              /*初始化字符显示标志*/
    { case 1: Zs[0]=1;break;
      case 2: Zs[1]=1;break;
      case 3: Zs[2]=1;break;
    } 
   switch(Chf)
    { case 1: Zs[3]=1;break;
      case 2: Zs[4]=1;break;
    }
   switch(Pf)
    { case 1: Zs[5]=1;break;
      case 2: Zs[6]=1;break;
    }
   Zs[7]=Autof;
   Zs[8]=Lf;
   Zs[9]=Mf;
   Zs[10]=Hf; 
 }
/******************************************************************************************
    * 名称:TSINIT                                                         
    * 说明:
    * 功能:初始化图形显示状态标志数组                                                  
    * 调用:
    * 输入:                                                                       
    * 返回值:                                                                   
**********************************************************************************************/
 void TSINIT(void)
 {
   Ts[0]=Hourf;                                              
   Ts[1]=Minuf;
   Ts[2]=Secf; 
   Ts[3]=Startf;
   Ts[4]=LevelLf;
   Ts[5]=LevelMf;
   Ts[6]=LevelHf;

 }
/*********************************************************************************************
    * 名称:  FUNC_start()                                                         
    * 说明    
    * 功能:  按给定间隔周期地改变startf,以改变显示内容,实现动态效果                                                
    * 调用:
    * 输入:  无                                                                    
    * 返回值:返回新的start值                                                                   
**********************************************************************************************/
 void FUNC_start(void)
 { 
   START_COUNT++;
   if(START_COUNT>100)
     {
      startf=startf++;
      START_COUNT=0;
     }
   if(startf>=4)startf=0;
 } 
/*********************************************************************************************
    * 名称:LCDINIT                                                          
    * 说明
    * 功能:在给定位置显示一个字节                                                  
    * 调用:
    * 输入:                                                                       
    * 返回值:
  **********************************************************************************************/                                                                  
 void LCDINIT(void)
 { 
  WRCOM1(0x3E);
  WRCOM2(0x3E);
  WRCOM1(0x3f);
  WRCOM2(0x3f);
  uchar i,j;
  for(i=0;i<8;i++)
   {
     SETxy(i,0);
	 for(j=0;j<64;j++)
	  { uchar *p,m=0;
	    p=&m;
	    DidplayWord(*p);
	  }
     SETxy(i,64);
	 for(j=0;j<64;j++)
	  { uchar *p,m=0;
	    p=&m;
	    DidplayWord(*p);
	  }
	}
    WRCOM1(0xC0);
    WRCOM2(0xC0);
    WRCOM1(0xD8);
    WRCOM2(0xD8);
    WRCOM1(0x40);
    WRCOM2(0x40);
 }
/*********************************************************************************************
    * 名称:TUDisplay                                                          
    * 说明:
    * 功能:                                                  
    * 调用:设定显示位置SETxy(char x;char y),显示一个8*8字符DISPLAYword(char *po)   
    * 输入:                                                                       
    * 返回值:                                                                  
 **********************************************************************************************/
 void TUDisplay(void)
 {
   uchar i,j,k;                                   /*i--图形编号,j--行编号、对应页编号
                                                    的增加值,k--列编号*/
   for(i=0;i<7;i++)                               /*按显示内容标志数组Ts[]的顺序*/ 
   {
    for(j=0;j<Tpage_col[2i];j++);
     {
      SETxy(TZB{2i]+j,TZB[2i+1]);                         /*显示起始位置设置*/
      uchar *p=TP[i]+Ts[i]*Tpage_col[2i]*Tpage_col[2i+1]+j*Tpage_col[2i+1];   /*得到待显字符指针*/
      for(k=0;k<Tpage_col[2i+1];k++,p++)                                      /*显示一页的内容*/
        {
          if(TZB[2i+1]+k>=64)
          SETxy(TZB[2i],TZB[2i+1]+k);
          DidplayWord(p);
        }
                                          /*换行显示*/
     }
   }
 }
/*********************************************************************************************
    * 名称:ZFDisplay                                                              
    * 说明:显示每页特定位置字符 
    * 功能:                                                  
    * 调用:设定显示位置SETxy(char x;char y),显示一个8*8字符DISPLAYword(char *po)   
    * 输入:                                                                       
    * 返回值:                                                                   
**********************************************************************************************/
 void ZFDisplay(void)
 {
   uchar i,j;                                                   /*i--共11个字符串,j--每个字符串最多7个字符*/
    for (i=0,i<=10,i++)
     {   
       if(Ts[i]=0)
       continue;                                                /*判断该位置是否显示*/
       SETxy(ZZB[2i],ZZB[2i+1]);                               /*设定显示坐标,Y的取值范围是0-127,该函数能自动
                                                                 判断1区,2区*/
       uchar k; 
       for(j=0,j<=6,j++)
        { 
          uchar *p,l;                                           /*l--一个显示字符的列序号*/
          if(STRING[i][j]=0)break;                              /*字符串显示完毕*/ 
          k=STRING[i][j];
          p=ZF+(k-1)*8;                                         /*得到待显示字符字模第一个字节的指针*/ 
          for(l=0;l<8;l++,p++) 
          { 
            if(ZZB[2i+1]+j*8+l>=64)
            
            SETxy(ZZB[2i],ZZB[2i+1]+j*8+l);
            DidplayWord(p);
          }
        }
  }

/*****************************************************************************************************************
******      主程序:读入外部变量:频率1,2,3;通道4(1),5(2);6(pa-1),7(pb-2);AUTO 8;9 L;10 M;******                       11F;初始化Zs[11]
******      Hz=1---Zs[0]=1............
******************************************************************************************************************/
void main(void)
{ extern Hzf,Chf,Pf,Autof,Lf,Mf,Hf;                        /*决定字符显示的外部变量*/
  extern Hourf,Minuf,Secf,LevelLf,LevelMf,LevelHf;         /*决定字符显示的外部变量*/
  uchar START_COUNT=0,startf=0;
  RESET=0;                                                 /*显示屏复位*/
  delay10ms(1);
  RESET=1;
  LCDINIT();                                               /*显示初始化*/
  for(;;)
 { ZSINIT();                                               /*初始化字符显示标志*/
   TSINIT();                                               /*初始化图形显示标志*/
   ZFDisplay();                                            /*显示字符*/
   TUDisplay();                                            /*显示图形*/
  }
}
  

  
                                                            
  
  
   




⌨️ 快捷键说明

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