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

📄 main.c

📁 这是lcd驱动程序
💻 C
字号:

//DB0--DB7====P0.16--P0.23

//*********************************************************************
#include"lpc213x.h"
#include"config.h"
//*********************************************************************
#define	CLR_LCD_DI		IOCLR0=(1<<25);  //P0.25
#define	SET_LCD_DI		IOSET0=(1<<25);
#define	CLR_LCD_E		IOCLR0=(1<<27);  //P0.27
#define	SET_LCD_E		IOSET0=(1<<27);
#define	CLR_LCD_CS1		IOCLR0=(1<<28);  //P0.28
#define	SET_LCD_CS1		IOSET0=(1<<28);
#define	CLR_LCD_CS2		IOCLR0=(1<<29);  //P0.29
#define	SET_LCD_CS2		IOSET0=(1<<29);
#define uchar unsigned char
#define uint unsigned int


static unsigned char  x1[]=
{
/*------------------------------------------------------------------------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;  源文件 / 文字 : 字
;  宽×高(像素): 16×16
;  字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/32字节
;  数据转换日期  : 2007-11-9 9:51:47
------------------------------------------------------------------------------*/
//0x10,0x10,0x02,//宽的像素数,高的像素数,宽的字节数,参数设置可选
0x00,0x00,0x20,0x18,0x28,0x28,0x28,0x2A,0xAC,0xA8,0x68,0x28,0x28,0x18,0x00,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x22,0x42,0x3F,0x02,0x02,0x02,0x02,0x03,0x02,0x00,
};



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

void DelayNS (U32 dly)          //延时10mS?
{ 
  U32 i;
  for(;dly>0;dly--)
     for(i=0;i<50;i++);
 }
 
 
 void LCD_sendcommand (uchar m_s, uchar command)   //写指令子程序
 {
   if(m_s&1)            //左半屏
      { 
       //CLR_LCD_E 
       CLR_LCD_DI
       SET_LCD_CS1
       CLR_LCD_CS2       
       IOCLR0=(0xFF<<16);//D0-D7数据总线输出低
       IOSET0=(command<<16);//D0-D7数据总线输出高
       DelayNS(1);
       SET_LCD_E
       DelayNS(1);
       CLR_LCD_E
      }
      
    if(m_s&2)            //右半屏
      {         
      // CLR_LCD_E
       CLR_LCD_DI
       SET_LCD_CS2
       CLR_LCD_CS1	
       IOCLR0=(0xFF<<16);
       IOSET0=(command<<16); 
       DelayNS(1);
       SET_LCD_E
       DelayNS(1);
       CLR_LCD_E
      }
       
      // DelayNS(3);
  }
  
  
  void LCD_senddata(uchar m_s, uchar command)          //写数据子程序
  {     
    if(m_s&1)        //左半屏
      {
       //CLR_LCD_E     
       SET_LCD_DI
       SET_LCD_CS1
       CLR_LCD_CS2	
       IOCLR0=(0xFF<<16);
       IOSET0=(command<<16);
       DelayNS(1);
       SET_LCD_E
       DelayNS(1);
       CLR_LCD_E
      }
      
    if(m_s&2)            //右半屏
      {  
       //CLR_LCD_E
       SET_LCD_DI
       SET_LCD_CS2
       CLR_LCD_CS1	      
       IOCLR0=(0xFF<<16);
       IOSET0=(command<<16);
       DelayNS(1);
       SET_LCD_E
       DelayNS(1);
       CLR_LCD_E
      }
       //DelayNS(3);
  }
  
  void LCD_setxyaddr(uchar x, uchar y)
   {
    if(x<64)
    {
    LCD_sendcommand(1,0xB8+x);
    LCD_sendcommand(1, 0x40+y);
    }
    
    else
  
     {
     LCD_sendcommand(2, 0xB8+x);
     LCD_sendcommand(2, y);
     }
}  


  void LCD_clean(void)
  {
    U32 row,i;
    for(row=0;row<8;row++)
    {
      LCD_sendcommand(3,0xB8+row);
      LCD_sendcommand(3,0x40);
      for(i=64;i>0;i--)
        {  LCD_senddata(3,0);
          DelayNS(1);
        }
    }
   }
   
   void lcd_open(void)
{
	LCD_sendcommand(3, 0x3F);				// LCD reset
	LCD_sendcommand(3, 0xC0);				// LCD start line=0
	LCD_clean();
}

   
  void LCD_show(uchar xx,uchar yy)
  {
   int p;
	uchar x,y;
	p=0;
	 for(x=xx;x<2+xx;x++)
	 {
		for(y=yy;y<16+yy;y++)
		{
			LCD_setxyaddr(x,y);
			if(y<64){
				LCD_senddata(1,  x1[p]);
			        }
			else{
				LCD_senddata(2,  x1[p]);
			    }
			p++;			
		}
	  }
   }
   
int main(void)
 {
 
 U32 a=0xffff;
  PINSEL1=0x00000000;
  IODIR0=(a<<16);
   LCD_sendcommand(3, 0x3F);
   LCD_sendcommand(3, 0xC0);	 
   LCD_clean();
   lcd_open(); 
   
   
        	
   while(1){
   LCD_show(0,0);
           }
   return(0);
   
 }

⌨️ 快捷键说明

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