?? lcd4bit.h
字號:
//***************液晶顯示****************//(未實測)
/********************************************************
*液晶(1602) DATA(4 bit)
**************this file include funtion******************
*void LcdDisplayRam(unsigned char X, unsigned char Y, unsigned char *DData,unsigned char Leng);
*void LcdDisplayRom(unsigned char X, unsigned char Y, unsigned char *DData,unsigned char Leng);
*void LcdInit(void);
********************************************************/
/*入口設置:
#define LCD_DATA PORTD //define data directional register(用高4位)
#define LCD_DATA_DI DDRD //define setup port directional register
#define LCD_DATA_IN PIND //define inport register
#define CTLPORT PORTC //模擬總線用了PD口的PD5,PD6,PD7
#define LCD_RS 3 // pin-0 on CTLPORT
#define LCD_RW 4 // pin-1 on CTLPORT
#define LCD_E 5 // pin-2 on CTLPORT
*/
#define SET_LCD_E CTLPORT|=(1<<LCD_E) // LCD: E = 1
#define CLR_LCD_E CTLPORT&=~(1<<LCD_E) // LCD: E = 0
#define SET_LCD_RW CTLPORT|=(1<<LCD_RW) // LCD: R/W = 1 (read)
#define CLR_LCD_RW CTLPORT&=~(1<<LCD_RW) // LCD: R/W = 0 (write)
#define SET_LCD_RS CTLPORT|=(1<<LCD_RS) // LCD: R/S = 1 (data reg)
#define CLR_LCD_RS CTLPORT&=~(1<<LCD_RS) // LCD: R/S = 0 (status reg)
//*******************************************************************寫數據11//
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM(); //檢測忙
SET_LCD_RS;
CLR_LCD_RW;
LCD_DATA =(LCD_DATA_IN&0x0f)|(WDLCM&0xF0);
CLR_LCD_E;CLR_LCD_E;
SET_LCD_E;SET_LCD_E;
WDLCM<<=4;
LCD_DATA =(LCD_DATA_IN&0x0f)|(WDLCM&0xF0);
CLR_LCD_E;CLR_LCD_E;
SET_LCD_E;SET_LCD_E;
}
//********************************************************************寫指令12//
void WriteCommandLCM(unsigned char WDLCM,unsigned char BuysC) //BuysC為0時忽略忙檢測
{
if (BuysC) ReadStatusLCM(); //根據需要檢測忙
CLR_LCD_RS;
CLR_LCD_RW;
LCD_DATA =(LCD_DATA_IN&0x0f)|(WDLCM&0xF0);
CLR_LCD_E;CLR_LCD_E;
SET_LCD_E;SET_LCD_E;
WDLCM<<=4;
LCD_DATA =(LCD_DATA_IN&0x0f)|(WDLCM&0xF0);
CLR_LCD_E;CLR_LCD_E;
SET_LCD_E;SET_LCD_E;
}
//*******************************************************************讀狀態13//
void ReadStatusLCM(void)
{
LCD_DATA_DI = 0x00; //輸入
CLR_LCD_RS;
SET_LCD_RW;
CLR_LCD_E;CLR_LCD_E;
SET_LCD_E;SET_LCD_E;
while (LCD_DATA_IN&0x80); //檢測忙信號
LCD_DATA_DI=0xff;//變回輸出
}
//*************************************************************顯示一個字符14//
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1; X &= 0xF;
if (Y) X |= 0x40;
X |= 0x80;
WriteCommandLCM(X, 1);
WriteDataLCM(DData);
WriteCommandLCM(X, 1);
}
//************************************************************顯示ROM字符串15//
void LcdDisplayRom(unsigned char X, unsigned char Y, const unsigned char *DData,unsigned char Leng)
{
unsigned char j;
Y &= 0x01;X &= 0x0F;
for(j=0;j<Leng;X++,j++)
{
if(X<=0xf)DisplayOneChar(X,Y,DData[j]);
}
}
//************************************************************顯示RAM字符串16//
void LcdDisplayRam(unsigned char X, unsigned char Y, unsigned char *DData,unsigned char Leng)
{
unsigned char j;
Y &= 0x01;X &= 0x0F;
for(j=0;j<Leng;X++,j++)
{
if(X<=0xf)DisplayOneChar(X,Y,DData[j]);
}
}
//****************************************************************LCM初始化17//
void LcdInit(void)
{
LCD_DATA &=0x0f;
LCD_DATA_DI=0xf0;
WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每次檢測忙信號
WriteCommandLCM(0x08,1); //關閉顯示
WriteCommandLCM(0x01,1); //顯示清屏
WriteCommandLCM(0x06,1); // 顯示光標移動設置
WriteCommandLCM(0x0C,1); // 顯示開及光標設置
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -