?? 1602.h
字號:
#include "reg51.h"
/********IO引腳定義***********************************************************/
#ifdef USE_PLCC44
sbit LCD_RS=P2^7;//定義引腳
sbit LCD_RW=P2^6;
sbit LCD_E=P2^5;
#define LCD_Data P1
#elif defined USE_DIP40
sbit LCD_RS=P1^0;//定義引腳
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
#define LCD_Data P0
#else
sbit LCD_RS=P1^0;//定義引腳
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
#define LCD_Data P0
#endif
/********宏定義***********************************************************/
#define Busy 0x80 //用于檢測LCD狀態字中的Busy標識
#define uchar unsigned char
#define uint unsigned int
/********數據定義*************************************************************/
code uchar table[]={48,49,50,51,52,53,54,55,56,57}; //0_9 ascii碼的數字
/********函數聲明*************************************************************/
void WriteDataLCD(unsigned char WR_DATA); //寫數據
void WriteCommandLCD(unsigned char WCLCD); //寫命令
void busy_check(void); //讀狀態
void LCDInit(void); //初始化
void DisplayOneChar(uchar X, uchar Y, uchar DData); //相應坐標顯示字節內容
void DisplayListChar(uchar X, uchar Y, uchar code *DData); //相應坐標開始顯示一串內容
/*初始化*/
void LCDInit(void)
{
WriteCommandLCD(0x38); //顯示模式設置,開始要求每次檢測忙信號 0011 1000
WriteCommandLCD(0x08); //關閉顯示
WriteCommandLCD(0x01); //顯示清屏
WriteCommandLCD(0x06); //顯示光標移動設置
WriteCommandLCD(0x0C); //顯示開及光標設置
}
/*按指定位置顯示一串字符*/
void DisplayListChar(uchar X, uchar Y, uchar code *DData)
{
unsigned char ListLength;
ListLength = 0;
X &= 0xF;
Y &= 0x1; //限制X不能大于15,Y不能大于1
while (DData[ListLength]>=0x20){ //若到達字串尾則退出
if (X <= 0xF){ //X坐標應小于0xF
DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
ListLength++;
X++;
}
}
}
/*按指定位置顯示一個字符*/
void DisplayOneChar(uchar X, uchar Y, uchar DData)
{
X &= 0xF;
Y &= 0x1; //限制X不能大于15,Y不能大于1
if (Y)
X |= 0x40; //當要顯示第二行時地址碼+0x40;
X |= 0x80; //算出指令碼
WriteCommandLCD(X); //發送地址碼
WriteDataLCD(DData);
}
/***********寫指令********************************************************/
void WriteCommandLCD(uchar WCLCD)
{
busy_check();
LCD_Data = WCLCD;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 0;
LCD_E = 1;
}
/***********寫數據********************************************************/
void WriteDataLCD(uchar WR_DATA)
{
busy_check(); //檢測忙
LCD_Data = WR_DATA;
LCD_RS = 1;
LCD_RW = 0;
// LCD_E = 0; //若晶振速度太高可以在這后加小的延時
LCD_E = 0;
LCD_E = 1;
}
//檢測忙信號
void busy_check(void)
{
LCD_Data = 0xFF;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 0;
LCD_E = 1;
while (LCD_Data & Busy);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -