前言
本篇文章將為大家講解LCD1602的使用方法。
一、LCD1602簡單介紹
LCD1602是一種常用的液晶顯示器,它的原理是通過液晶分子的振蕩來控制顯示內(nèi)容的。液晶分子在電場的作用下,會發(fā)生振蕩,從而改變液晶分子的極性,從而控制顯示內(nèi)容。液晶顯示器的控制電路會根據(jù)輸入的信號,控制電場的強度,從而控制液晶分子的振蕩,從而控制顯示內(nèi)容。
二、LCD1602中各個引腳的作用
LCD1602的引腳有VSS、VDD、VO、RS、RW、E、D0-D7等。VSS和VDD分別為電源正負極;VO為顯示屏的背光控制引腳;RS、RW、E分別為控制字符顯示和數(shù)據(jù)讀寫的控制引腳;D0-D7為數(shù)據(jù)傳輸?shù)囊_。
四、LCD1602命令解析
對于如何寫命令我們直接看到數(shù)據(jù)手冊就可以了。無論是寫命令還是寫數(shù)據(jù)我們只需要關注RS,R/W,E這幾個引腳的電平即可。
1.寫命令
當RS=0時代表輸入指令。
R/W=0時代表向LCD寫入指令或數(shù)據(jù)。
E是使能信號當E從1變?yōu)?時也就是下降沿會執(zhí)行指令。
這里直接將要執(zhí)行的命令寫入LCD1602對應的數(shù)據(jù)端口即可。
寫入后讓E發(fā)生一個下降沿執(zhí)行寫入的指令。
void lcd1602_write_cmd(u8 cmd)
{
LCD1602_RS=0;//選擇命令
LCD1602_RW=0;//選擇寫
LCD1602_E=0;
LCD1602_DATAPORT=cmd;//準備命令
delay_ms(1);
LCD1602_E=1;//使能腳E先上升沿寫入
delay_ms(1);
LCD1602_E=0;//使能腳E后負跳變完成寫入
}
2.寫數(shù)據(jù)
當RS=1時代表輸入指令。
R/W=0時代表向LCD寫入指令或數(shù)據(jù)。
E是使能信號當E從1變?yōu)?時也就是下降沿會執(zhí)行指令。
其實寫數(shù)據(jù)和寫命令的函數(shù)只是需要注意RS的電平即可,其他代碼原理都是一樣的。
void lcd1602_write_data(u8 dat)
{
LCD1602_RS=1;//選擇數(shù)據(jù)
LCD1602_RW=0;//選擇寫
LCD1602_E=0;
LCD1602_DATAPORT=dat;//準備數(shù)據(jù)
delay_ms(1);
LCD1602_E=1;//使能腳E先上升沿寫入
delay_ms(1);
LCD1602_E=0;//使能腳E后負跳變完成寫入
}
3.清屏指令
根據(jù)手冊可以知道只需要往數(shù)據(jù)端口寫入0x01即可達到清屏效果。
void lcd1602_clear(void)
{
lcd1602_write_cmd(0x01);
}
4.光標歸位指令
光標歸位指令寫入0x02即可。
void lcd1602_CursorReset(void)
{
lcd1602_write_cmd(0x02);
}
5.進入模式設置指令
將DB1設置為1每次寫入一個字符后光標右移。
S=0寫入數(shù)據(jù)后顯示屏不移動。
void lcd1602_CursorReset(void)
{
lcd1602_write_cmd(0x06); //寫入新數(shù)據(jù)后光標右移,顯示屏不移動
}
6.顯示開關控制指令
這里看自己的需求設置對應的指令。
7.設定顯示屏或光標移動方向指令
字體左移
void lcd1602_LeftMove(void)
{
lcd1602_write_cmd(0x18);
}
字體右移
void lcd1602_RightMove(void)
{
lcd1602_write_cmd(0x1c);
}
三、LCD1602代碼編寫
lcd1602.c
這里使用普中的代碼進行講解。
這里使用的lcd1602是8位的,在lcd1602.h定義了一個宏來決定。
#include "lcd1602.h"
/*******************************************************************************
* 函 數(shù) 名 : lcd1602_write_cmd
* 函數(shù)功能 : LCD1602寫命令
* 輸 入 : cmd:指令
* 輸 出 : 無
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_cmd(u8 cmd)
{
LCD1602_RS=0;//選擇命令
LCD1602_RW=0;//選擇寫
LCD1602_E=0;
LCD1602_DATAPORT=cmd;//準備命令
delay_ms(1);
LCD1602_E=1;//使能腳E先上升沿寫入
delay_ms(1);
LCD1602_E=0;//使能腳E后負跳變完成寫入
}
#else //4位LCD
void lcd1602_write_cmd(u8 cmd)
{
LCD1602_RS=0;//選擇命令
LCD1602_RW=0;//選擇寫
LCD1602_E=0;
LCD1602_DATAPORT=cmd;//準備命令
delay_ms(1);
LCD1602_E=1;//使能腳E先上升沿寫入
delay_ms(1);
LCD1602_E=0;//使能腳E后負跳變完成寫入
LCD1602_DATAPORT=cmd<<4;//準備命令
delay_ms(1);
LCD1602_E=1;//使能腳E先上升沿寫入
delay_ms(1);
LCD1602_E=0;//使能腳E后負跳變完成寫入
}
#endif
/*******************************************************************************
* 函 數(shù) 名 : lcd1602_write_data
* 函數(shù)功能 : LCD1602寫數(shù)據(jù)
* 輸 入 : dat:數(shù)據(jù)
* 輸 出 : 無
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_data(u8 dat)
{
LCD1602_RS=1;//選擇數(shù)據(jù)
LCD1602_RW=0;//選擇寫
LCD1602_E=0;
LCD1602_DATAPORT=dat;//準備數(shù)據(jù)
delay_ms(1);
LCD1602_E=1;//使能腳E先上升沿寫入
delay_ms(1);
LCD1602_E=0;//使能腳E后負跳變完成寫入
}
#else
void lcd1602_write_data(u8 dat)
{
LCD1602_RS=1;//選擇數(shù)據(jù)
LCD1602_RW=0;//選擇寫
LCD1602_E=0;
LCD1602_DATAPORT=dat;//準備數(shù)據(jù)
delay_ms(1);
LCD1602_E=1;//使能腳E先上升沿寫入
delay_ms(1);
LCD1602_E=0;//使能腳E后負跳變完成寫入
LCD1602_DATAPORT=dat<<4;//準備數(shù)據(jù)
delay_ms(1);
LCD1602_E=1;//使能腳E先上升沿寫入
delay_ms(1);
LCD1602_E=0;//使能腳E后負跳變完成寫入
}
#endif
/*******************************************************************************
* 函 數(shù) 名 : lcd1602_init
* 函數(shù)功能 : LCD1602初始化
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_init(void)
{
lcd1602_write_cmd(0x38);//數(shù)據(jù)總線8位,顯示2行,5*7點陣/字符
lcd1602_write_cmd(0x0c);//顯示功能開,無光標,光標閃爍
lcd1602_write_cmd(0x06);//寫入新數(shù)據(jù)后光標右移,顯示屏不移動
lcd1602_write_cmd(0x01);//清屏
}
#else
void lcd1602_init(void)
{
lcd1602_write_cmd(0x28);//數(shù)據(jù)總線4位,顯示2行,5*7點陣/字符
lcd1602_write_cmd(0x0c);//顯示功能開,無光標,光標閃爍
lcd1602_write_cmd(0x06);//寫入新數(shù)據(jù)后光標右移,顯示屏不移動
lcd1602_write_cmd(0x01);//清屏
}
#endif
/*******************************************************************************
* 函 數(shù) 名 : lcd1602_clear
* 函數(shù)功能 : LCD1602清屏
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void lcd1602_clear(void)
{
lcd1602_write_cmd(0x01);
}
/*******************************************************************************
* 函 數(shù) 名 : lcd1602_show_string
* 函數(shù)功能 : LCD1602顯示字符
* 輸 入 : x,y:顯示坐標,x=0~15,y=0~1;
str:顯示字符串
* 輸 出 : 無
*******************************************************************************/
void lcd1602_show_string(u8 x,u8 y,u8 *str)
{
u8 i=0;
if(y>1||x>15)return;//行列參數(shù)不對則強制退出
if(y<1) //第1行顯示
{
while(*str!='\0')//字符串是以'\0'結(jié)尾,只要前面有內(nèi)容就顯示
{
if(i<16-x)//如果字符長度超過第一行顯示范圍,則在第二行繼續(xù)顯示
{
lcd1602_write_cmd(0x80+i+x);//第一行顯示地址設置
}
else
{
lcd1602_write_cmd(0x40+0x80+i+x-16);//第二行顯示地址設置
}
lcd1602_write_data(*str);//顯示內(nèi)容
str++;//指針遞增
i++;
}
}
else //第2行顯示
{
while(*str!='\0')
{
if(i<16-x) //如果字符長度超過第二行顯示范圍,則在第一行繼續(xù)顯示
{
lcd1602_write_cmd(0x80+0x40+i+x);
}
else
{
lcd1602_write_cmd(0x80+i+x-16);
}
lcd1602_write_data(*str);
str++;
i++;
}
}
}
lcd1602.h
#ifndef _lcd1602_H
#define _lcd1602_H
#include "public.h"
//LCD1602數(shù)據(jù)口4位和8位定義,若為1,則為LCD1602四位數(shù)據(jù)口驅(qū)動,反之為8位
#define LCD1602_4OR8_DATA_INTERFACE 0 //默認使用8位數(shù)據(jù)口LCD1602
//管腳定義
sbit LCD1602_RS=P2^6;//數(shù)據(jù)命令選擇
sbit LCD1602_RW=P2^5;//讀寫選擇
sbit LCD1602_E=P2^7; //使能信號
#define LCD1602_DATAPORT P0 //宏定義LCD1602數(shù)據(jù)端口
//函數(shù)聲明
void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_show_string(u8 x,u8 y,u8 *str);
#endif
四、代碼測試
這里我們實現(xiàn)了LCD1602左移顯示。文章來源:http://www.zghlxwxcb.cn/news/detail-460763.html
void main()
{
lcd1602_init();//LCD1602初始化
while(1)
{
lcd1602_show_string(0,0,"Hello World!");//第一行顯示
lcd1602_show_string(0,1,"0123456789");//第二行顯示
lcd1602_write_cmd(0x18);
delay_ms(1000);
}
}
總結(jié)
LCD1602是一種液晶顯示器,可以用于顯示文本和圖形信息。它具有低功耗,高分辨率和易于使用的特點,可以用于多種應用,如計算機控制、液晶顯示器、汽車儀表板等。它可以用于顯示漢字、英文字符、圖形和數(shù)字,可以實現(xiàn)更高的效率和速度。
使用LCD1602可以幫助我們實現(xiàn)非常多的功能,使用他我們可以制作電子時鐘,密碼鎖等小項目,希望大家好好理解這個模塊。文章來源地址http://www.zghlxwxcb.cn/news/detail-460763.html
到了這里,關于51單片機LCD1602的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!