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

📄 lcd1602.c

📁 基于arm单片机LPC2134上液晶显示器1602驱动源程序开发
💻 C
字号:

//#include "definition.h"
//#include "LPC2134.h"
typedef int				S32;
typedef unsigned int	U32;
typedef short int		S16;
typedef unsigned short	U16;
typedef signed char		S8;
typedef unsigned char	U8;
#include  "config.h"
#define LCD_RS  (1<<10) // P0.10
#define LCD_RW  (1<<9) // P0.9
#define LCD_E   (1<<8) // P0.8
#define LCD_DB0 (1<<0) // P0.0
#define LCD_DB1 (1<<1) // P0.1

#define LCD_DB2 (1<<2) // P0.2
#define LCD_DB3 (1<<3) // P0.3
#define LCD_DB4 (1<<4) // P0.4
#define LCD_DB5 (1<<5) // P0.5
#define LCD_DB6 (1<<6) // P0.6
#define LCD_DB7 (1<<7) // P0.7


#define LCD_RS_CLR IO0CLR=LCD_RS
#define LCD_RS_SET IO0SET=LCD_RS

#define LCD_RW_CLR IO0CLR=LCD_RW
#define LCD_RW_SET IO0SET=LCD_RW

#define LCD_E_CLR IO0CLR=LCD_E
#define LCD_E_SET IO0SET=LCD_E
#define Busy 0x80

 U8 MinDe_WWW[]="www.minde.cn    LAN Minzhi      ";

U8 LCD_ReadDataBus(void);
U8 LCD_ReadStatus(void);
void LCD_DisplayOneChar(U8 X, U8 Y, U8 data);
void Delay(U32 Time_micro_sec); 

/******************************************************************************
Function:		Init_LCD_IO
Description:	Initialize LCD IO 
Calls:			- None
Input:			- None
Output:			- None
Return:			
******************************************************************************/

void Init_LCD_IO(void)
{
  IO0DIR=LCD_RS|LCD_RW|LCD_E|LCD_DB0|LCD_DB1|LCD_DB2|LCD_DB3|LCD_DB4|        
         LCD_DB5|LCD_DB6|LCD_DB7;
  IO0CLR=LCD_RS|LCD_RW|LCD_E|LCD_DB0|LCD_DB1|LCD_DB2|LCD_DB3|LCD_DB4|        
         LCD_DB5|LCD_DB6|LCD_DB7;       
}

/******************************************************************************
Function:		LCD_WriteDataBus
Description:	Initialize LCD IO 
Calls:			- None
Input:			- U8
Output:			- None
Return:			
******************************************************************************/
void LCD_WriteDataBus(U8 data)
{
  U32 temp=0;
  IO0CLR=LCD_DB0|LCD_DB1|LCD_DB2|LCD_DB3|LCD_DB4|        
         LCD_DB5|LCD_DB6|LCD_DB7;
  temp= data;
        
  IO0SET=temp;      
}


/******************************************************************************
Function:		LCD_WriteData
Description:	Write a data to LCD Module 
Calls:			- None
Input:			- U8 data
Output:			- None
Return:			
******************************************************************************/
void LCD_WriteData(U8 data)
{
  LCD_E_CLR;
  LCD_RW_CLR;
  LCD_RS_SET;
  Delay(50);
  LCD_WriteDataBus(data);
  LCD_E_SET;
  Delay(50);
  LCD_E_CLR;
  Delay(50); 
}


/******************************************************************************
Function:		LCD_WriteCommand
Description:	Write a command to LCD Module 
Calls:			- None
Input:			- U8 LCDCOM
Output:			- None
Return:			
******************************************************************************/
void LCD_WriteCommand(U8 LCDCOM)
{    
  LCD_E_CLR;
  LCD_RS_CLR;
  LCD_RW_CLR;
  Delay(50);     
  LCD_WriteDataBus(LCDCOM);
  LCD_E_SET;
  Delay(50);
  LCD_E_CLR;
  Delay(50);  
}



/******************************************************************************
Function:		LCD_SendPage
Description:	Sends a page of data to LCD
Calls:			- None
Input:			- Pointer
Output:			- None
Return:			
******************************************************************************/
void LCD_SendPage(U8 *Pt)
{

 U8 temp;
 U8 i;
 
 LCD_WriteCommand(0x80);   //Set DDRAM add ptr to 00h, 1st line
 for (i=0;i<16;i++)
 {
    temp=*(Pt+i);
    LCD_WriteData(temp);
 }

 
LCD_WriteCommand(0xC0);    //Set DDRAM add ptr to 40h, 2nd line
 for(i=0;i<16;i++)
 {
    temp=*(Pt+i+16);
    LCD_WriteData(temp);
 }      
  
}







/******************************************************************************
Function:		LCD_Init
Description:	Initialize LCD
Calls:			- None
Input:			- None
Output:			- None
Return:			
******************************************************************************/
void LCD_Init(void)
{
  LCD_WriteCommand(0x38); //8bit I/F; 2-line display; 5x8 font
  Delay(10000);           //10ms
  LCD_WriteCommand(0x04); //No screen shifting
  Delay(10000);           //10ms 
  LCD_WriteCommand(0x0c); //Display on; cursor off; cursor-blinking off
  Delay(10000);
  LCD_WriteCommand(0x01); //clear screen
  Delay(20000);            //clear screen comand takes more time

} 


/******************************************************************************
Function:		LCD_DisplayTest
Description:	Test LCD functions
Calls:			- None
Input:			- 
Output:			- None
Return:			
******************************************************************************/
void LCD_DisplayTest(void)
{
  Init_LCD_IO();
  LCD_E_CLR;
  LCD_RW_CLR;
  LCD_RS_CLR;
  
  Delay(100000);     //delay 100 ms for LCD power on reset 
  LCD_Init();
  LCD_SendPage(MinDe_WWW);
  while(1);         //program ends


}

/******************************************************************************
Function:	 Delay
Description:	Delay some time
Calls:			- None
Input:			- Time_micro_sec
Output:			- None
Return:			
******************************************************************************/

void Delay(U32 Time_micro_sec)
{
  int i,k; 
  for (i=0;i<Time_micro_sec;i++)
      for (k=0;k<8;k++);
}

⌨️ 快捷键说明

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