1、1602液晶讀寫時序
(1)、讀狀態(tài)
RS=L,R/W=H,E=H。(判斷忙完畢后釋放總線)
(2)、讀數據
RS=H,R/W=H,E=H。
(3)、寫指令
RS=L,R/W=L,D0~D7=指令碼,E=高脈沖
(4)、寫數據
RS=H,R/W=L,D0~D7=數據,E=高脈沖
2、液晶顯示驅動文件
#include
#define LCD1602_DB P0
sbit LCD1602_RS = P1 ^ 0;
sbit LCD1602_RW = P1 ^ 1;
sbit LCD1602_E = P1 ^ 5;
/* 等待液晶準備好 */
void LcdWaitReady()
{
unsigned char sta;
LCD1602_DB = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
do
{
LCD1602_E = 1;
sta = LCD1602_DB; //讀取狀態(tài)字
LCD1602_E = 0;
}
while (sta & 0x80); //bit7等于1表示液晶正忙,重復檢測直到其等于0為止
}
/* 向LCD1602液晶寫入一字節(jié)命令,cmd-待寫入命令值 */
void LcdWriteCmd(unsigned char cmd)
{
LcdWaitReady();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 向LCD1602液晶寫入一字節(jié)數據,dat-待寫入數據值 */
void LcdWriteDat(unsigned char dat)
{
LcdWaitReady();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 設置顯示RAM起始地址,亦即光標位置,(x,y)-對應屏幕上的字符坐標 */
void LcdSetCursor(unsigned char x, unsigned char y)
{
unsigned char addr;
if(y == 0) //由輸入的屏幕坐標計算顯示RAM的地址
{
addr = 0x00 + x; //第一行字符地址從0x00起始
}
else
{
addr = 0x40 + x; //第二行字符地址從0x40起始
}
LcdWriteCmd(addr | 0x80); //設置RAM地址
}
/* 在液晶上顯示字符串,(x,y)-對應屏幕上的起始坐標,str-字符串指針 */
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
{
LcdSetCursor(x, y); //設置起始地址
while (*str != ‘ 主站蜘蛛池模板: 法库县| 保山市| 梁山县| 象州县| 凌云县| 隆化县| 崇州市| 教育| 上饶市| 广宁县| 崇礼县| 平乡县| 宁德市| 信阳市| 成都市| 黎川县| 宁安市| 郯城县| 辉县市| 南宁市| 宜州市| 蕉岭县| 如皋市| 建瓯市| 五河县| 浦城县| 麻阳| 蓬溪县| 蓝田县| 勐海县| 尼玛县| 丹巴县| 长寿区| 菏泽市| 石台县| 安图县| 西安市| 台州市| 徐汇区| 涞源县| 琼结县|