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

📄 lcd.c

📁 lcd驱动程序示例 大家可以参考参考 很不错的(并联方式)
💻 C
字号:
#include "config.h"
#define   PWR       1<<16
#define   LCD_PSB   1<<0
#define   LCD_RS    1<<1
#define   LCD_RW    1<<2
#define   LCDE      1<<3
#define   D0        1<<4   
#define   D1        1<<5
#define   D2        1<<6
#define   D3        1<<7
#define   D4        1<<8
#define   D5        1<<9
#define   D6        1<<10
#define   D7        1<<11
#define   HBIT      0x30     
#define   LBIT      0x20
uint8  sel;
uint8  com;
uint8  LCDRAM[32][32];

void LCDW_COM(uint8 com)
{
 uint32 i;
 
 IO0PIN =  (IO0PIN&0xfffffff0)|0x01;     //PSB=1并口 RS=0 RW=0写入命令
 
 IO0SET =  LCDE;                         //将E信号置位
 
 for(i=0;i<200;i++);
 
 IO0PIN = (IO0PIN&0xfffff00f)|(com<<4);  //命令发送 
 
 for(i=0;i<200;i++);
   
 IO0CLR = LCDE;     //将E信号归零  
  
 for(i=0;i<200;i++);
}



void LCD_INT(uint8 sel)
{
  uint32 i;
  switch(sel)
  { 
  case 0:                     //4bit   并口模式,基本指令集
        IO0SET = LCD_RS;   
        IO0CLR = LCD_RW;
        IO0SET = LCD_PSB;
        LCDW_COM(LBIT);
        LCDW_COM(0x08);        //清除
        LCDW_COM(0x0c);        //显示打开,光标关,反白关
        LCDW_COM(0x01);        //清屏,DDRAM地址计数器归零
        for(i=0;i<500;i+=1);
        LCDW_COM(0x02);         //地址归位
        LCDW_COM(LBIT);
        break;
  case 1:
        IO0SET = LCD_RS;   
        IO0CLR = LCD_RW;
        IO0SET = LCD_PSB;
        LCDW_COM(HBIT);
        LCDW_COM(0x08);        //清除
        LCDW_COM(0x0c);        //显示打开,光标关,反白关
        LCDW_COM(0x01);        //清屏,DDRAM地址计数器归零
        for(i=0;i<500;i+=1);
        LCDW_COM(0x02);         //地址归位
        LCDW_COM(HBIT);                     //8bit   并口模式
        break;
  case 2:                     //ser    串口模式
        break;
  default:
        break; 
  }

}

void LCDW_DAT(uint8 dat)
{
 uint32 i;
 IO0SET = LCD_RS;   
 
 IO0SET = LCD_PSB;
 
 for(i=0;i<200;i++);
 
 IO0CLR = LCD_RW;
 
 for(i=0;i<200;i++);
 
 IO0PIN = (IO0PIN&0xfffff00f)|(dat<<4);
 for(i=0;i<200;i++);
 IO0SET =  LCDE;                         //将E信号置位
 for(i=0;i<200;i++);
 IO0CLR = LCDE;                          //将E信号清零
 for(i=0;i<200;i++);
}

//清屏
void  PicClear(void)
{
  	   uint8 i,k;
  	
  	    LCDW_COM(0x34);
        for (i=0;i<255;i++);
        for (i=0;i<255;i++);
  	for(i=0;i<16;i+=1)
	 {
	
	    for(k=0;k<32;k+=1)
	    {
	
	     LCDW_COM(0x80+k); LCDW_COM(0x80+i);	
	     LCDW_DAT(0x00);
	     LCDW_DAT(0x00);
	    }
	 }   //图形清屏
	 for(i=0;i<32;i+=1)
	 {
	
	    for(k=0;k<32;k+=1)
	    {
	
	      LCDRAM[i][k]	       = 0;
	    }
	 }
	 LCDW_COM(0x30);
}


//直接显示数据(全宽)
void LCDGB5(uint8 add,uint32 data)
{
      LCDW_COM(add);
      LCDW_DAT((data>>8)&0xff);		
      LCDW_DAT(data&0xff);
}

//显示data变量的值(全宽)
void LCD_Data(uint8 add,uint32 data)
{
  uint8 display[]={0};
  int i,j,c=0xA3B0;
  
  for(i=0;i<100;i++)
  {
    display[i]=data%10;
    data=data/10;
    if(data==0)
    {
      display[i+1]='\0';
      break;
    }
  }
  //把数据从变量中提取出来,放入display数组中
  
  for(j=i;i>=0;i--)
  {
    LCDGB5(add+(j-i),c+display[i]);
  }
  
  
}

void  PicClear1(uint8 block)
{
  	   uint8 i,k;
         for (i=0;i<255;i++);
         for (i=0;i<255;i++);
  	 i=block;
	
	    for(k=0;k<32;k+=1)
	    {
	
	     LCDW_COM(0x80+k); LCDW_COM(0x80+i);	
	     LCDW_DAT(0x00);
	     LCDW_DAT(0x00);
	    }
	    //图形清屏
	 for(i=0;i<32;i+=1)
	 {
	
	    for(k=0;k<32;k+=1)
	    {
	
	      LCDRAM[i][k]= 0;
	    }
	 }
	
}
//直接显示数据(半宽字符)
void LCD_ASCII(uint8 add,uint32 data)
{
      LCDW_COM(add);
      LCDW_DAT(data);		
}


//显示data变量的值(半宽)
void LCD_ASCII_Data(uint8 add,uint32 data)
{
  uint8 display[]={0};
  int i,j,c=0x30;
  
  for(i=0;i<100;i++)
  {
  //把数据从变量中提取出来,放入display数组中
    display[i]=data%10;
    data=data/10;
    if(data==0)
    {
      display[i+1]='\0';
      break;
    }
  }

  
  for(j=i;i>=0;i--)
  {
     if(i==j)
     {
        LCDW_COM(add);
        LCDW_DAT(display[i]+c);
     }
     else{LCDW_DAT(display[i]+c);}
  }
  
  
}

//显示小数data变量的值(半宽)
//只能显示0-10的小数,小数点后3位
void LCD_ASCII_float(uint8 add,double data)
{
  uint8  display[]={0};
  int i,j,c=0x30,tmpdata;
  tmpdata=data*1000;
  for(i=0;i<100;i++)
  {
  //把数据从变量中提取出来,放入display数组中
    display[i]=tmpdata%10;
    tmpdata=tmpdata/10;
    if(tmpdata==0)
    {
      display[i+1]='\0';
      break;
    }
  }
  if(data>1)
  {  
    for(j=i+1;i>=0;i--)
    {
       if(j==i+1)
       {
          LCDW_COM(add);
          LCDW_DAT(display[i]+c);
       }
       else if(j==i+2)
       {
         LCDW_DAT(0x2e);
         LCDW_DAT(display[i]+c);
       }
       else{LCDW_DAT(display[i]+c);}
    }
  }
  else
  {
     for(j=i+1;i>=0;i--)
    {
       if(j==i+1)
       {
          LCDW_COM(add);
          LCDW_DAT(0+c);
          LCDW_DAT(0x2e);
          LCDW_DAT(display[i]+c);
       }
       else if(j==i+2)
       {
         LCDW_DAT(display[i]+c);
       }
       else{LCDW_DAT(display[i]+c);}
    }
  }
}


int main (void)
{// add user source code 
    
    IO0SET  = PWR; 
    
    
    LCD_INT(1);
    
    
     while(1)
    {
      LCD_ASCII_Data(0x80,9);
    }
     
    
    
    return 0;
}

⌨️ 快捷键说明

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