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

📄 fm12864-1.c

📁 液晶FM12864-1驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
{
  unsigned char i,j;
  LCD_Set_StartLine(0x00);
  for(i=0;i<8;i++)
    { 
	  LCD_Set_Page(i);  

      LCD_SelectScr(1); 
	  LCD_Set_Colomn(0);
	  for(j=0;j<64;j++)
        LCD_WriteData(0x00);

	  LCD_SelectScr(2); 
	  LCD_Set_Colomn(0);
	  for(j=0;j<64;j++)
        LCD_WriteData(0x00);
    }
}

/**************************

******************************/
void LCD_Init(void)
{
  Lcd_En=0;
  delay_50ms(10);   //延时0.5s
  Lcd_En=1;
  LCD_SelectScr(0);  //全屏
  LCD_OnOffSet(1);           //关显示
  LCD_Set_StartLine(0x00);
  LCD_Set_Page(0x00);
  LCD_Set_Colomn(0x00);
 // LCD_OnOffSet(1);           //开显示
  LCD_ClrScr();              //清屏 
}

/****************************************
function 16*16汉字
******************************************/
void LCD_WordDisp(unsigned char page, unsigned char column, unsigned char *hzk)
{
 	unsigned char j=0,i=0,k=0;
 	for(j=0;j<2;j++)
 	{
	 	if (column <4)
	 	{
			k=column;
			LCD_SelectScr(1); 	//CSA=1,CSB=0,select leftwindow		
		}
		else
		{
			k = column-4;
			LCD_SelectScr(2); 	//CSA=0,CSB=1,select rightwindow		
		}
		LCD_Set_Page(page+j);  	
  		LCD_Set_Colomn(k<<4);
  		for(i=0;i<16;i++)
    	{
     		LCD_WriteData(hzk[16*j+i]);
		}
 	}
}

/*************************************************************
8*16
***************************************************************/
void LCD_ByteDisp(unsigned char page, unsigned char column, unsigned char *bytek)
{
 	unsigned char  j=0,i=0,k=0;
 	for(j=0;j<2;j++)
 	{   
	    if(column>15) {return;}
		else if (column > 7)
		{  
	 		k=column-8;
			LCD_SelectScr(2); 	//CSA=0,CSB=1,select rightwindow			
		}
		else
		{
			k=column;
			LCD_SelectScr(1); 	//CSA=1,CSB=0,select leftwindow	
		}
  		LCD_Set_Page(page+j); 
 	 	LCD_Set_Colomn(k<<3);
  		for(i=0;i<8;i++)
    	{
     		LCD_WriteData(bytek[8*j+i]);
		}
 	}
}

/***********************
8*16
***************************/

void LCD_ShowASCII(unsigned char page, unsigned char column, unsigned char ascii)
{
    LCD_ByteDisp(page,column,Codes[ascii-' ']);
}

/********************************
8*8
************************************/
void LCD_Show88(unsigned char page, unsigned char column, unsigned char *byte)
{
   unsigned char i;
   if(column>16) {return;}
   else if(column>8) 
        {LCD_SelectScr(2); //如果column>8 (8,9,10,11,12,13,14,15)写在第二屏上
         column=column & 0x07; //防止越界
		}
   else { 
   		  LCD_SelectScr(1); //(0,1,2,3,4,5,6,7)则写在第一屏上	    
		}
	LCD_Set_Page(page);  
	LCD_Set_Colomn(column<<3);
	for(i=0;i<8;i++) LCD_WriteData(byte[i]);
}

/*********************************************
显示数字
***********************************************/
void LCD_ShowNum(unsigned char page,unsigned char column,unsigned char num)
{
  LCD_ByteDisp(page,column,Codes[16+num]);
}

/*****************************************

*****************************************/
void LCD_ShowString(unsigned char page,unsigned char column,unsigned char *string)
{
   unsigned char i=0;
    while(string[i]!='\0')
    {
    	LCD_ByteDisp(page,column,Codes[string[i]-' ']);
    	column++;
    	i++;
    }
}

/**********************************************

**************************************************/
void LCD_PicDisp(unsigned char *pic)
{
 unsigned char i=0,j=0,k=0;
 for(i=0;i<8;i++)
  {
     for(j=0;j<128;j++)  	
      {
        if(j<64)
        {
            k=j;
            LCD_SelectScr(1);	//CSA=1,CSB=0,select leftwindow
	    	
        } 
        else
        {
            k=j-64;
            LCD_SelectScr(2);	//CSA=0,CSB=1,select rightwindow			
        }
       // LCD_Set_StartLine(i);
        LCD_Set_Colomn(k);
        LCD_WriteData(pic[128*i+j]); 
      }
  }
}

/***************************************

*******************************************/
void LCD_ShowInteger(unsigned char page,unsigned char column,signed long number,unsigned char bits)
{
    unsigned char flag=0,flag_sp=0,i,column_temp, flag_neg=0;
    unsigned long Div=1;
    
    if(number==0)
    {
    	LCD_ShowASCII(page, column, '0');
    	for(i=1; i<bits; i++)
    		LCD_ShowASCII(page, column+i, ' ');
    }
    else
    {
    	column_temp=column;
	    if(number<0)
	    {
	    	LCD_ShowASCII(page, column_temp, '-');
	    	column_temp=column_temp+1;
	    	number = -1 * number;
	    	flag_neg++;
	   	}
	    
	    for(i=1; i<bits; i++)
	    	Div *= 10;
	    
	    for(i=0; i<bits; i++)
	    {
	    	if(number/Div)
	    		flag = 1;
	    	
	    	if(flag)
	    	{
	    		LCD_ByteDisp(page,column_temp,Codes[16+(number/Div)]);
	    		column_temp ++;
	    		number = number % Div;
	     	}
	    	else
	    		flag_sp++;
	    	Div = Div/10;	
	    }
	    	
	    if(flag_sp<bits)
		    for(i=0; i<flag_sp; i++)			//不需显示的地方填充空格
		    {
		    	LCD_ShowASCII(page, bits+column-flag_sp+i+flag_neg, ' ');
		   }
    }
}

/*******************************************************

***********************************************************/
void LCD_ShowFloat(unsigned char page, unsigned char column, float number, unsigned char bits_in)
{
    unsigned char flag=0,flag_sp=0,i,column_temp,bits;
    unsigned long Div=1, number_int, number_float_int;
    float number_float;
    
    if(number==0.0)		//待显示数等于0时,只显示0
    {
    	LCD_ShowASCII(page, column, '0');
    	for(i=1; i<bits_in; i++)
    		LCD_ShowASCII(page, column+i, ' ');
    }
    else //if(number!=0.0)		//待显示数大于0时,
    {
	    column_temp=column;
       	bits = bits_in;	
    	if(number<0)
    	{
    		LCD_ShowASCII(page, column_temp, '-');
    		column_temp ++;
    		number = -1 * number;
    		bits ++ ;
    	}
    	
	    number_int = (unsigned long)number;
	    number_float = number - number_int;
	    
	    if(number_int==0)
	    {
	    	LCD_ByteDisp(page,column_temp,Codes[16]);
	    	column_temp ++;
	    }
	    else
	    {
		    for(i=1; i<bits; i++)
		    	Div *= 10;
		    
		    for(i=0; i<bits; i++)
		    {
		    	if(number_int/Div)
		    		flag = 1;
		    	
		    	if(flag)
		    	{
		    		LCD_ByteDisp(page,column_temp,Codes[16+(number_int/Div)]);
		    		column_temp ++;
		    		number_int = number_int % Div;
		    	}
		    	else
		    		flag_sp++;
		    	Div = Div/10;	
	    	}
	    }
	    
	    LCD_ShowASCII(page, column_temp, '.');		//显示小数点
	    column_temp ++;
		bits ++;		
	    
	    if(number_float==0.0)
	    {
	    	if(flag_sp<bits)
		    for(i=1; i<flag_sp; i++)			//小数部分为0时后面都填充0
		    {
		    	LCD_ShowASCII(page, bits+column-flag_sp+i, '0');
		    }
	    }
	    else
	    {
	    	Div = 1;
		    for(i=1; i<bits-column_temp+column; i++)
		    	Div *= 10;	    	    
		    
		    number_float_int = (unsigned long)(number_float*Div*10);
		    bits = bits-column_temp+column;    
		    for(i=0; i<bits; i++)
		    {
		    	LCD_ByteDisp(page,column_temp,Codes[16+(number_float_int/Div)]);
		    	column_temp ++;
		    	number_float_int = number_float_int % Div;
		    	Div = Div/10;	
		    }
	    } 
	}
}

⌨️ 快捷键说明

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