📄 lcd1602.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 + -