1.前言
LCD1602液晶顯示器是廣泛使用的一種字符型液晶顯示模塊。液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富、超薄輕巧等優(yōu)點,在嵌入式應用系統(tǒng)中得到越來越廣泛的應用,這講中向大家介紹的LCD1602?液晶顯示模塊(其內(nèi)部控制器為HD44780?芯片),它可以顯示兩行,每行16?個字符,因此可相當于32?個LED?數(shù)碼管,而且比數(shù)碼管顯示的信息還多。
1.1實驗現(xiàn)象
當然大家也可以根據(jù)自己的需求編寫自己需要的內(nèi)容;
?
2. LCD1602相關介紹
LCD1602(Liquid Crystal Display)液晶顯示屏是一種字符型液晶顯示模塊,可以顯示ASCII碼的標準字符和其它的一些內(nèi)置特殊字符,還可以有8個自定義字符
顯示容量:16×2個字符,每個字符為5*7點陣(其實時5*8的字符占了5*7)
2.1 LCD1602 引腳及應用電路
2.2 LCD1602 內(nèi)部結構框圖
每個小方塊都是一個點陣;
CGRAM與CGROM這兩個存儲區(qū)域,相當于數(shù)碼管的斷碼表一樣;其中CGRAM是可寫的,可以自己定義字符的數(shù)據(jù)存儲區(qū);CGROM是不可寫的,內(nèi)部固定的字模區(qū),出廠已經(jīng)設定好了;
DDRAM:我們想要顯示的數(shù)據(jù)實際上時寫在DDRAM這個儲存單元中的,通過DDRAM的數(shù)據(jù)來向字模庫中找到相應字符的一個顯示點陣的字模,然后再在對應位置顯示我們想要顯示的數(shù)據(jù)。
DDRAM(數(shù)據(jù)顯示區(qū))
?
2.4 LCD1602指令集
2.4 LCD1602操作流程
初始化:
?? ?發(fā)送指令0x38?? ?//八位數(shù)據(jù)接口,兩行顯示,5*7點陣
?? ?發(fā)送指令0x0C?? ?//顯示開,光標關,閃爍關
?? ?發(fā)送指令0x06?? ?//數(shù)據(jù)讀寫操作后,光標自動加一,畫面不動
?? ?發(fā)送指令0x01?? ?//清屏文章來源:http://www.zghlxwxcb.cn/news/detail-439330.html
顯示字符:
?? ?發(fā)送指令0x80|AC?? ?//設置光標位置
?? ?發(fā)送數(shù)據(jù)?? ??? ?//發(fā)送要顯示的字符數(shù)據(jù)
?? ?發(fā)送數(shù)據(jù)?? ??? ?//發(fā)送要顯示的字符數(shù)據(jù)
?? ?……文章來源地址http://www.zghlxwxcb.cn/news/detail-439330.html
3.源碼
3.1 main.c
#include <REGX52.H>
#include "LCD1602.h"
void main()
{
LCD_Init(); //LCD初始化
LCD_ShowChar(1,1,'x'); //在1行1列顯示字符x
LCD_ShowString(1,3,"Hello"); //在1行3列顯示字符串Hello
LCD_ShowNum(1,9,33,2); //在1行9列顯示數(shù)字33,長度為2
LCD_ShowSignedNum(1,12,-20,2); //在1行12列顯示有符號數(shù)字-20,長度為2
LCD_ShowHexNum(2,1,0xA5,2); //在2行1列顯示十六進制數(shù)字0xA5,長度為2
LCD_ShowBinNum(2,4,0xaa,8); //在2行4列顯示二進制數(shù)字0xA5,長度為8
LCD_ShowChar(2,13,0xDF); //在2行13列顯示編碼為0xDF的字符
LCD_ShowChar(2,14,'C'); //在2行14列顯示字符C
}
3.2 LCD1602.c
#include <REGX52.H>
//引腳定義
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;
#define LCD_DataPort P0
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
/**
* @brief LCD1602寫命令
* @param Command 要寫入的命令
* @retval 無
*/
void LCD_WriteCommand(unsigned char Command)
{
LCD_RS=0;
LCD_RW=0;
LCD_DataPort=Command;
LCD_E=1;
Delay(1);
LCD_E=0;
Delay(1);
}
/**
* @brief LCD1602寫數(shù)據(jù)
* @param Data 要寫入的數(shù)據(jù)
* @retval 無
*/
void LCD_WriteData(unsigned char Data)
{
LCD_RS=1;
LCD_RW=0;
LCD_DataPort=Data;
LCD_E=1;
Delay(1);
LCD_E=0;
Delay(1);
}
/**
* @brief LCD1602初始化函數(shù)
* @param 無
* @retval 無
*/
void LCD_Init(void)
{
LCD_WriteCommand(0x38);
LCD_WriteCommand(0x0C);
LCD_WriteCommand(0x06);
LCD_WriteCommand(0x01);
}
/**
* @brief LCD1602設置光標位置
* @param Line 行位置,范圍:1~2
* @param Column 列位置,范圍:1~16
* @retval 無
*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{
if(Line==1)
{
LCD_WriteCommand(0x80|(Column-1));
}
else
{
LCD_WriteCommand(0x80|(Column-1)+0x40);
}
}
/**
* @brief 在LCD1602指定位置上顯示一個字符
* @param Line 行位置,范圍:1~2
* @param Column 列位置,范圍:1~16
* @param Char 要顯示的字符
* @retval 無
*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{
LCD_SetCursor(Line,Column);
LCD_WriteData(Char);
}
/**
* @brief 在LCD1602指定位置開始顯示所給字符串
* @param Line 起始行位置,范圍:1~2
* @param Column 起始列位置,范圍:1~16
* @param String 要顯示的字符串
* @retval 無
*/
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String)
{
unsigned char i;
LCD_SetCursor(Line,Column);
for(i=0;String[i]!='\0';i++)
{
LCD_WriteData(String[i]);
}
}
/**
* @brief 返回值=X的Y次方
*/
int LCD_Pow(int X,int Y)
{
unsigned char i;
int Result=1;
for(i=0;i<Y;i++)
{
Result*=X;
}
return Result;
}
/**
* @brief 在LCD1602指定位置開始顯示所給數(shù)字
* @param Line 起始行位置,范圍:1~2
* @param Column 起始列位置,范圍:1~16
* @param Number 要顯示的數(shù)字,范圍:0~65535
* @param Length 要顯示數(shù)字的長度,范圍:1~5
* @retval 無
*/
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
unsigned char i;
LCD_SetCursor(Line,Column);
for(i=Length;i>0;i--)
{
LCD_WriteData('0'+Number/LCD_Pow(10,i-1)%10);
}
}
/**
* @brief 在LCD1602指定位置開始以有符號十進制顯示所給數(shù)字
* @param Line 起始行位置,范圍:1~2
* @param Column 起始列位置,范圍:1~16
* @param Number 要顯示的數(shù)字,范圍:-32768~32767
* @param Length 要顯示數(shù)字的長度,范圍:1~5
* @retval 無
*/
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{
unsigned char i;
unsigned int Number1;
LCD_SetCursor(Line,Column);
if(Number>=0)
{
LCD_WriteData('+');
Number1=Number;
}
else
{
LCD_WriteData('-');
Number1=-Number;
}
for(i=Length;i>0;i--)
{
LCD_WriteData('0'+Number1/LCD_Pow(10,i-1)%10);
}
}
/**
* @brief 在LCD1602指定位置開始以十六進制顯示所給數(shù)字
* @param Line 起始行位置,范圍:1~2
* @param Column 起始列位置,范圍:1~16
* @param Number 要顯示的數(shù)字,范圍:0~0xFFFF
* @param Length 要顯示數(shù)字的長度,范圍:1~4
* @retval 無
*/
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
unsigned char i;
unsigned char SingleNumber;
LCD_SetCursor(Line,Column);
for(i=Length;i>0;i--)
{
SingleNumber=Number/LCD_Pow(16,i-1)%16;
if(SingleNumber<10)
{
LCD_WriteData('0'+SingleNumber);
}
else
{
LCD_WriteData('A'+SingleNumber-10);//減10得到偏移量
}
}
}
/**
* @brief 在LCD1602指定位置開始以二進制顯示所給數(shù)字
* @param Line 起始行位置,范圍:1~2
* @param Column 起始列位置,范圍:1~16
* @param Number 要顯示的數(shù)字,范圍:0~1111 1111 1111 1111
* @param Length 要顯示數(shù)字的長度,范圍:1~16
* @retval 無
*/
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
unsigned char i;
LCD_SetCursor(Line,Column);
for(i=Length;i>0;i--)
{
LCD_WriteData('0'+Number/LCD_Pow(2,i-1)%2);
}
}
3.3 LCD1602.h
#ifndef __LCD1602_H__
#define __LCD1602_H__
void LCD_Init(void);
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char);
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String);
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
#endif
到了這里,關于51單片機LCD1602液晶屏顯示字符,字符串,(有)無符號整數(shù),十六進制數(shù),二進制數(shù)等的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!