?? lcd1602.h
字號:
/****************************************************************
*************** 字符型液晶1602對應(yīng)字符表 *****************
*************** 注:以下所有均未加48 *****************
** ASCII: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 **
** DISPLAY: 0 1 2 3 4 5 6 7 8 9 : ; < = > ? **
** ASCII: 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 **
** DISPLAY: A B C D E F G H I J K L M N O P **
** ASCII: 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 **
** DISPLAY: Q R S T U V W X Y Z [ ¥ ] ^ _ ~ **
** ASCII: 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 **
** DISPLAY: a b c d e f g h i j k l m n o p **
** ASCII: 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 16 **
** DISPLAY: q r s t u v w x y z { | } → ← **
** ASCII: 175 241 242 243 244 245 246 247 248 249 250 251 **
** DISPLAY: ° ! " # $ % & ' ( ) * + **
** ASCII: 252 253 254 255 **
** DISPLAY: , - . / **
*****************************************************************/
#ifndef _lcd1602_h_
#define _lcd1602_h_
#include<reg52.h>
#include<intrins.h>
#define LcdData P0
#define Busy 0x80 // 用于檢測LCM狀態(tài)字中的Busy標(biāo)識
sbit LcdE = P3^2; // 定義使能信號口
sbit LcdRw = P3^3; // 定義讀/寫選擇端
sbit LcdRs = P3^4; // 定義數(shù)據(jù)/命令選擇端
unsigned char code Name[] = {"STC-MCU-STUDY"};
unsigned char code Logo[] = {"Seawind-Mcu"};
/********************************************************
**名稱:ReadStatusLcd()
**功能:檢測忙狀態(tài)
**輸入:無
**返回:LcdData
**說明:無
********************************************************/
unsigned char ReadStatusLcd(void)
{
LcdData = 0xFF;
LcdRs = 0;
LcdRw = 1;
LcdE = 0;
DelayMs(1);
LcdE = 1; // 讀狀態(tài) E=1, Rw=1, Rs=0
while (LcdData & Busy); // 檢測忙信號
return(LcdData);
}
/********************************************************
**名稱:WriteDataLcd()
**功能:LCD寫數(shù)據(jù)
**輸入:ucDat
**返回:無
**說明:無
********************************************************/
void WriteDataLcd(unsigned char ucDat)
{
ReadStatusLcd(); // 檢測忙
LcdData = ucDat;
LcdRs = 1;
LcdRw = 0;
LcdE = 0; // 若晶振速度太高可以在這后加小的延時(shí)
DelayMs(1);
LcdE = 1; // 寫數(shù)據(jù) E=1, Rw=0, Rs=1
}
/********************************************************
**名稱:WriteCmdLcd()
**功能:LCD寫命令
**輸入:ucCmd,ucBusyCmd
**返回:無
**說明:BusyCmd為0時(shí)忽略忙檢測
********************************************************/
void WriteCmdLcd(unsigned char ucCmd, ucBusyCmd)
{
if (ucBusyCmd) ReadStatusLcd(); // 根據(jù)需要檢測忙
LcdData = ucCmd;
LcdRs = 0;
LcdRw = 0;
LcdE = 0;
DelayMs(1);
LcdE = 1; // 寫指令 E=1, Rw=0, Rs=0
}
/********************************************************
**名稱:InitLcd()
**功能:LDC初始化
**輸入:無
**返回:無
**說明:無
********************************************************/
void InitLcd(void)
{
LcdData = 0; // 給數(shù)據(jù)端口送0
WriteCmdLcd(0x38,0); // 三次顯示模式設(shè)置,不檢測忙信號
DelayMs(5);
WriteCmdLcd(0x38,1); // 顯示模式設(shè)置,開始要求每次檢測忙信號
WriteCmdLcd(0x08,1); // 關(guān)閉顯示
WriteCmdLcd(0x01,1); // 顯示清屏
WriteCmdLcd(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
WriteCmdLcd(0x0C,1); // 顯示開及光標(biāo)設(shè)置
}
/********************************************************
**名稱:DisplayOneChar()
**功能:按指定位置顯示一個(gè)字符
**輸入:X:水平位置(0-15)
Y:垂直位置(0→第一行,1→第二行)
DData:顯示字符
**返回:無
**說明:無
********************************************************/
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; // 限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; // 當(dāng)要顯示第二行時(shí)地址碼 0x40;
X |= 0x80; // 算出指令碼
WriteCmdLcd(X, 0); // 這里不檢測忙信號,發(fā)送地址碼
WriteDataLcd(DData);
}
/********************************************************
**名稱:DisplayListChar()
**功能:按指定位置顯示一串字符
**輸入:X:水平位置(0-15)
Y:垂直位置(0→第一行,1→第二行)
*DData:字符串的首地址
**返回:無
**說明:無
********************************************************/
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength;
ListLength = 0;
Y &= 0x1;
X &= 0xF; // 限制X不能大于15,Y不能大于1
while (DData[ListLength]>0x20) // 若到達(dá)字串尾則退出
{
if (X <= 0xF) // X坐標(biāo)應(yīng)小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]); // 顯示單個(gè)字符
ListLength = ListLength+1 ;
X = X+1 ;
}
}
}
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -