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

📄 44blcd.c

📁 lcd驱动程序
💻 C
字号:
#include <string.h>
#include "inc\option.h"
#include "inc\def.h"
#include "inc\44b.h"
#include "inc\44blib.h"
#include "inc\44blcd.h"
#include "inc\PLMM.h"
#include "inc\test.h"
#include "inc\ascii.h"


/*volatile char which_int=0;*/
/*液晶屏初始化*/
void LcdInit(void)
{
 
  Lcd_MonoInit();
  clrscreen();

}
/*液晶屏系统配置初始化*/
void Lcd_MonoInit(void)
{
    //160x240 1bit/1pixel LCD
    #define MVAL_USED 0
         rLCDCON1=(0)|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_MONO<<12);
	    // disable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,
	rLCDCON2=(LINEVAL)|(HOZVAL<<10)|(10<<21);  
	    //LINEBLANK=10 (without any calculation) 
	rLCDSADDR1= (0x0<<27) | ( ((U32)LcdBuffeer>>22)<<21 ) | M5D((U32)LcdBuffeer>>1);
	    // monochrome, LCDBANK, LCDBASEU
	rLCDSADDR2= M5D( (((U32)LcdBuffeer+(SCR_XSIZE*LCD_YSIZE/8))>>1) ) | (MVAL<<21);
	rLCDSADDR3= (LCD_XSIZE/16) | ( ((SCR_XSIZE-LCD_XSIZE)/16)<<9 );

	rLCDCON1=(1)|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_MONO<<12);
	    // enable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,
    
}

/*液晶屏单个字符输出*/
void Putedot(U8 j ,U8 row,U8 col)
{
      U8 *pbuffer;
      U8 i,a;
      U32 k;  
      pbuffer =(U8*) LcdBuffeer; 
      k=col+row*20; 
      if(j==0)j=0;  else j++;                                            
      for(i=0;i<16;i++)
	    {       
	    	   
                     a=ascii8x16[j][i];                
	    	   pbuffer[k+i*20]=ascii8x16[j][i];   //从字库中调出到显示寄存器
                             
	    }                        
}
/*图片显示输出*/
void displaylcd()
{
    U32 *pbuffer,temp_data;
     int i;
     
    clrscreen();
    pbuffer =(U32*) LcdBuffeer;
    for(i = 0; i< (4800/4) ;i++)
    {
       temp_data = (plmmBitmap[i*4] << 24) + (plmmBitmap[i*4+1] << 16) + (plmmBitmap[i*4+2] << 8) +(plmmBitmap[i*4+3]);
      pbuffer[i] = temp_data;

 }
}
/*字符串显示输出*/
void  printchar(U8 rowfirst,U8 colfirst, char *p)
{
        U8 q,row,col;
        int i,b,c,k; 
        static int j; 
        b=colfirst;
        i=0;j=0;
        row=rowfirst;   							   
        while(p[i]!='\0')
		{ 
	            if(p[i]=='\n')                    //遇到换行符,则换行
	            row+=18;
                    row=rowfirst+(i/20)*18;           //确定行值
                    if(240-row<16){Delay(2000);row=0;}              //若行到最大值,延时后从首行开始
	            col=b+i%20;
                    col++; 
                    c=col%4;
                    switch(c)                          //显示的列地址和寄存器的列地址的转换
                    {
                          case 1: k=4;break;
                          case 2: k=3;break;
                          case 3: k=2;break;
                          case 0: k=1;break;
                     }
                    col=(int)((col-1)/4)*4+k;          //寄存器的列地址
                    if(col==0)col=0;                   //判断是否为零,为零保持,否则减一
                    else col--; 
		  q=p[i];
		  i++;
		  Putedot((q-0x20),row,col);          //输出单个字符
		}
}
/*测试用,图片显示*/
void displaylcd4()
{
    U32 *pbuffer,temp_data;
     int i;
     
    clrscreen();
    pbuffer =(U32*) LcdBuffeer;
    for(i = 0; i< (1100/4) ;i++)
    {
       temp_data = (test3[i*4] << 24) + (test3[i*4+1] << 16) + (test3[i*4+2] << 8) +(test3[i*4+3]);
        pbuffer[i] = temp_data;

 }
}
/*画矩形函数(尚未成功)*/
void lcddrawbox(int V_offset,int H_offset,int V_size,int H_size)
{
    U32 i,j,c,col,row; 
    U8 *pbuffer;
    U8 a;
    U32 k;     
    pbuffer =(U8*) LcdBuffeer; 
    for(i = 0; i< V_size;i++)
      for(j = 0;j< H_size ;j++)
         { 
         	    row=V_offset+i;
         	    col=V_offset+i;
    	            c=V_size%4;
                    switch(c)                          //显示的列地址和寄存器的列地址的转换
                    {
                          case 1: k=4;break;
                          case 2: k=3;break;
                          case 3: k=2;break;
                          case 0: k=1;break;
                     }
                    V_size=(int)((V_size-1)/4)*4+k;          //寄存器的列地址
                    if(V_size==0)col=0;                   //判断是否为零,为零保持,否则减一
                    else V_size--; 
                    pbuffer =(U8*) LcdBuffeer; 
                    k=V_size+row*20; 
                    if(j==0)j=0;  else j++;                                            
                    for(i=0;i<16;i++)
	               {       
	    	   
                     a=ascii8x16[j][i];                
	    	    pbuffer[k+i*20]=ascii8x16[j][i];   //从字库中调出到显示寄存器
                             
	              }       
    }        

 
}
/*清屏函数*/
void clrscreen(void)
{
  int i,j;

 for (i=0;i<240;i++)
     for (j=0;j<320;j++)
   {
     LcdBuffeer[j][i]=0x0;//(0x0FFFFFFFF);  
   }
}


void Main()
{
    //char *ch="Hello!";
    Port_Init();
    *((U32 *)PLLCON) = 0x48032; //set clock to be 40M
    Uart_Init(0,115200);
    LcdInit();
    displaylcd();
    displaylcd4();
    clrscreen();
    printchar(0,0,"\nhello!\nThe LCD is OK!\\n temp_data = (plmmBitmap[i*4] << 24) + (plmmBitmap[i*4+1] << 16)plmmBitmap[i*4+3]");
}

⌨️ 快捷键说明

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