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

📄 lcd.c

📁 lpc2214的串口通信程序
💻 C
字号:
/****************************************************************************
* 文 件 名:lcd.c
* 功    能:lcd的显示。
* 说    明:。
****************************************************************************/
#define	  BEEPCON	0x1ff		    // P0.7控制BEEP
#define   LCD		0x000001ff;//0x803ff  
#define   RW		1<<16 
#define   RS		1<<17 
#define   E		1<<30
#define   B		0x80000000  
uint16  i,j;
uint8 addr;

/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
**              延时时间与系统时钟有关。
** Input: dly	延时参数,值越大,延时越久
** Output: 无
********************************************************************************************************/
void  DelayNS(uint32  dly)
{  
 
   	for(; dly > 0; dly--) 
       for(i = 0; i < 100;)
       i++;
}

void delay(uint8 j)
{

 for(i=3000;i>0;i--)
    for(;j>0;j--);
}
/****************************************************************************************************
// 函数名称 EGodown
// 函数功能 产生下跳沿 
****************************************************************************************************/

void EGodown()
{
IO3SET=E;
IO3CLR=E;
}	
	
/****************************************************************************************************
// 函数名称 busy
// 函数功能 判忙
****************************************************************************************************/
void busy()
{   
uint32 IO2; 
IO2DIR=0x00000000;    

while(1)
   {
     IO3CLR=RS;     //RS=0;
     IO3SET=RW;     //RW=1;
     IO3SET=E;      //e=1;这是read指令状态
    
   	 IO2=IO2PIN;
   	 IO3CLR=E;
   	 if((IO2&0x01)==0x00) break;
    }
 }
/******************************************************************************************************
** Function name:Crc() 
**循环移位
**
******************************************************************************************************/
uint32 Crc(uint8 data)
{

uint8 a=0x00,b=0x00,c=0x00,d=0x00;
uint8 f=0x00,g=0x00,h=0x00,j=0x00,k=0x00;

a=(data&(0x81));
b=(data&(0x42));
c=(data&(0x24));
d=(data&(0x18));

f=(a<<7);
f=(f|(a>>7));
f=f&0x81;

g=(b<<5);
g=(g|(b>>5));
g=g&0x42;

h=(c<<3);
h=(h|(c>>3));
h=h&0x24;

j=(d<<1);
j=(j|(d>>1));
j=j&0x18;

k=(f|g|h|j);
return k;
} 
			
/******************************************************************************************************
** Function name:SetInit() 
**给LCD写命令
**
******************************************************************************************************/
void SetInit(uint8 com)
{
 IO2DIR=0x000000ff;
 IO3CLR=RW;  // RW=0;
 IO3CLR=RS;  //RS=0;
 IO2CLR=0x000000ff;
 IO2SET=com;      
 EGodown();        //产生下跳沿 
 }
/******************************************************************************************************
** Function name:SetCom() 
**给LCD写命令
**
******************************************************************************************************/
void SetCom(uint8 com)
{

 busy(); 
 IO2DIR=0x000000ff;
 IO3CLR=RW;  // RW=0;
 IO3CLR=RS;  //RS=0;
 
 IO2CLR=0x000000ff;
 IO2SET=com;      
 EGodown();        //产生下跳沿 
 }
 /******************************************************************************************************
** Function name:SetCom() 
**给LCD写命令
**
******************************************************************************************************/
void SetComd(uint8 com)
{

 busy(); 
 IO2DIR=0x000000ff;
 IO3CLR=RW;  // RW=0;
 IO3CLR=RS;  //RS=0;
 
 IO2CLR=0x000000ff;
 IO2SET=Crc(com);      
 EGodown();        //产生下跳沿 
 }
/******************************************************************************************************
** Function name:SetLcd() 
**给LCD写命令
**
******************************************************************************************************/
void SetData(uint8 data)
{

 busy();
 IO2DIR=0x000000ff;
 
 //IO3CLR=RS; 
 IO3CLR=RW;     //RW=0;
 IO3SET=RS;     //RS=1;
 
 IO2CLR=0x000000ff;
 IO2SET=Crc(data);
 EGodown();     //产生下跳沿
 IO2CLR=0x000000ff;
  return;
 }

/******************************************************************************************************
** Function name:write() 
**给LCD写命令
**
******************************************************************************************************/
 
void write(uint8 add,uint8 word[16])
{
int n;
uint8 p=' ';
char *err="OUT DISPLAY";

n=strlen(word);
if(n>32){
add=0x80;
for(i=0;i<11;i++){
      p=err[i];
      SetComd(add);
      SetData(p);
      add++;
      }
      return;
}else
if(n>16){
    for(i=0;i<n;i++)
     {
      add=0x80;
      if(i>16){
        add=0xc0;
        p=word[i];
        SetComd(add);
        SetData(p);
        add++;
             }
      else{
        p=word[i];
        SetComd(add);
        SetData(p);
        add++;
          }
     }
    }
   else
   {
    for(i=0;i<n;i++)
      {
      p=word[i];
      SetComd(add);
      SetData(p);
      add++;
      }
   }
}
/******************************************************************************************************
** Function name:InitLcd() 
**LCD初始化
**
******************************************************************************************************/
void InitLcd(void)
{ 
    SetInit(0x0c);
    delay(5); 
    SetInit(0x0c);
    delay(1); 
    SetInit(0x0c);
    delay(2); 
    
    SetComd(0x38);   //设置工作方式-8位总线 字符行数两行 5*7点阵
    SetComd(0x08);   //设置显示状态-关显示
    SetComd(0x01);   //清屏
    delay(20); 
    SetComd(0x06);   //设置输入方式-画面不动光标右移
    SetComd(0x0e);   //设置显示状态-画面显示,光标、闪烁显示

}
void Lcd_Bcd(uint8 ic_buff[16])
{
uint8 tp;
 addr=0x80;
   for(i=0;i<4;i++){
   
      tp=ic_buff[i];
      if(i<2)
      tp=(tp&0x7f);
      else
      tp=(tp&0x3f);
      
      tp=(tp>>4)+'0';   
      SetComd(addr);
      SetData(tp);
      addr++;
      tp=ic_buff[i];
      tp=(tp&0x0f)+'0';
      SetComd(addr);
      SetData(tp);
      addr++;
      }
      addr=0xc0;
      for(;i<7;i++){
      
      tp=ic_buff[i];
      if(i==4)
      tp=(tp&0x07);
      else
      tp=(tp&0x1f);
      
      tp=(tp>>4)+'0';   
      SetComd(addr);
      SetData(tp);
      addr++;
      tp=ic_buff[i];
      if(i==4)
      tp=(tp&0x07);
      tp=(tp&0x0f)+'0';
      SetComd(addr);
      SetData(tp);
      addr++;
      }
}
    
void lcdok(void)
{   
    PINSEL0 = 0x00000000;			
    PINSEL2 = 0x00000034;	   
    PINSEL1 = 0x00000001;   
    IO2DIR=0x000000ff;
    IO3DIR =0xc00301ff;    //P3.31,P3.30,P3.17,P3.16;P3.0~3.8 ALL OUTPUT// IO3SET = LCD; 
    IO3SET=B; 
     
    IO3CLR=RS;           //RS=1;ELCDB=1
    IO3CLR=RW;
    IO3CLR=E;			//RS=1;RW=0;e=0; 
    DelayNS(100);
    InitLcd();
   
 }   

⌨️ 快捷键说明

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