目錄
LCD1602:
數(shù)據(jù)指令:?
字節(jié)寫入時(shí)序:
1. LCD1602:LCD1602液晶上顯示字符信息
LCD1602:
????????1602液晶也叫1602字符型液晶,它能顯示2行字符信息,每行又能顯示16個(gè)字符。它是一種專門用來顯示字母、數(shù)字、符號(hào)的點(diǎn)陣型液晶模塊。它是由若 干個(gè)5x7的點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以用顯示一個(gè)字符, 每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱?,所以它不能很好的顯示圖片。
????????字符代碼0x00~0x0F為用戶自定義的字符圖形RAM(對(duì)于5X8點(diǎn)陣的字符,可以存放8組,5X10點(diǎn)陣的字符,存放4組),就是CGRAM了。0x20~0x7F為標(biāo)準(zhǔn)的ASCII碼,0xA0~0xFF為日文字符和希臘文字符,其余字符碼(0x10~0x1F及0x80~0x9F)沒有定義。寫入顯示地址時(shí)要求最高位D7恒定為高電平1。
數(shù)據(jù)指令:?
//初始化
0X38 //八位數(shù)據(jù)接口,兩行顯示,5*7點(diǎn)陣
0X0C //顯示開,光標(biāo)關(guān),閃爍關(guān)
0X06 //數(shù)據(jù)讀、寫操作后,AC自動(dòng)加一,畫面不動(dòng)
0X01 //清除DDRAM和AC值,光標(biāo)復(fù)位(清屏)
//顯示位置
發(fā)送指令(0x80|(lie-1)); //設(shè)置光標(biāo)位置80~8F
發(fā)送指令(0x80|(lie-1)+0x40); //設(shè)置光標(biāo)位置C0~CF
字節(jié)寫入時(shí)序:
????????不是所有的地址都可以直接用來顯示字符數(shù)據(jù),只有第一行中的00-0F,第二行中的40-4F才能顯示,其他地址只能用于存儲(chǔ)。要使用LCD1602,首先需要對(duì)其初始化,即通過寫入一些特定的指令實(shí)現(xiàn)。 然后選擇要在LCD1602的哪個(gè)位置顯示并將所要顯示的數(shù)據(jù)發(fā)送到LCD的DDRAM。
????????①當(dāng)要寫指令字,設(shè)置LCD1602的工作方式時(shí):需要把RS置為低電平,RW置為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,最后E引腳一個(gè)高脈沖將數(shù)據(jù)寫入(下降沿即可)。
????????②當(dāng)要寫入數(shù)據(jù)字,在1602上實(shí)現(xiàn)顯示時(shí):需要把RS置為高電平,RW置為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,最后E引腳一個(gè)高脈沖將數(shù)據(jù)寫入(下降沿即可)。 寫指令和寫數(shù)據(jù),差別僅僅在于RS的電平不一樣而已。
????????當(dāng)要寫命令字節(jié)的時(shí)候,時(shí)間由左往右,RS變?yōu)榈碗娖?,R/W變?yōu)榈碗娖剑?注意看是RS的狀態(tài)先變化完成。然后這時(shí),DB0~DB7上數(shù)據(jù)進(jìn)入有效階段,接著E引腳有一個(gè)整脈沖的跳變,接著要維持時(shí)間最小值為tpw=400ns的E脈沖寬 度。然后E引腳負(fù)跳變,RS電平變化,R/W電平變化。這樣便是一個(gè)完整的LCD1602寫命令的時(shí)序。
1. LCD1602:LCD1602液晶上顯示字符信息
? ? ? ? LCD1602函數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-449802.html
#include <REGX52.H>
#include "intrins.h"
sbit LCD_RS=P2^6;
sbit LCD_WR=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DB P0
void LCD_Delay1ms()//LCD1602延時(shí)1ms函數(shù)@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
void LCD1602_WriteCommand(unsigned char Command)//寫指令
{
LCD_RS=0;
LCD_WR=0;
LCD_DB=Command;
LCD_EN=1;
LCD_Delay1ms();//延時(shí) 速度太快可能讀不過來
LCD_EN=0;
LCD_Delay1ms();//延時(shí) 速度太快可能讀不過來
}
void LCD1602_WriteData(unsigned char Data)//寫數(shù)據(jù)
{
LCD_RS=1;
LCD_WR=0;
LCD_DB=Data;
LCD_EN=1;
LCD_Delay1ms();//延時(shí) 速度太快可能讀不過來
LCD_EN=0;
LCD_Delay1ms();//延時(shí) 速度太快可能讀不過來
}
void LCD1602_Init(void)//初始化
{
LCD1602_WriteCommand(0x38);//八位數(shù)據(jù)接口,兩行顯示,5*7點(diǎn)陣
LCD1602_WriteCommand(0x0c);//顯示開,光標(biāo)關(guān),閃爍關(guān)
LCD1602_WriteCommand(0x06);//數(shù)據(jù)讀、寫操作后,AC自動(dòng)加一,畫面不動(dòng)
LCD1602_WriteCommand(0x01);//清除DDRAM和AC值,光標(biāo)復(fù)位(清屏)
}
void LCD1602_SetCursor(unsigned char hang,lie)//設(shè)置光標(biāo)位置 1~2行,1~16列
{
if(hang==1)
{
LCD1602_WriteCommand(0x80|(lie-1));//第一行設(shè)置光標(biāo)位置80~8F
}
else if(hang==2)
{
LCD1602_WriteCommand(0x80|(lie-1)+0x40);//第二行設(shè)置光標(biāo)位置C0~CF
}
}
void LCD1602_zifu(unsigned char hang,lie,Data)//顯示字符 1~2行,1~16列,字符'*'
{
LCD1602_SetCursor(hang,lie);
LCD1602_WriteData(Data);
}
void LCD1602_zifuchuan(unsigned char hang,lie,char *Datas)//顯示字符串 1~2行,1~16列,字符串"**"
{
unsigned char i;
LCD1602_SetCursor(hang,lie);
for(i=0;Datas[i]!='\0';i++)
{
LCD1602_WriteData(Datas[i]);
}
}
int LCD_Pow(int X,int Y)//返回值=X的Y次方
{
unsigned char i;
int Result=1;
for(i=0;i<Y;i++)
{
Result*=X;
}
return Result;
}
void lCD1602_shuzi(unsigned char hang,lie,unsigned int Num,unsigned char wei)//顯示十進(jìn)制數(shù)字 1~2行,1~16列,數(shù)字0~65535,范圍1~5
{
unsigned char i;
LCD1602_SetCursor(hang,lie);
for(i=wei;i>0;i--)
{
LCD1602_WriteData(Num/LCD_Pow(10,i-1)%10+'0');
}
}
void LCD1602_zfshuzi(unsigned char hang,lie,int zfNum,unsigned char wei)//顯示有符號(hào)十進(jìn)制數(shù)字 1~2行,1~16列,數(shù)字-32768~32767,范圍1~5
{
unsigned char i;
unsigned int zfNumber;
LCD1602_SetCursor(hang,lie);
if(zfNum>=0)
{
LCD1602_WriteData('+');
zfNumber=zfNum;
}
else
{
LCD1602_WriteData('-');
zfNumber=-zfNum;
}
for(i=wei;i>0;i--)
{
LCD1602_WriteData(zfNumber/LCD_Pow(10,i-1)%10+'0');
}
}
void LCD1602_hex(unsigned char hang,lie,unsigned int hex,unsigned char wei)//顯示十六進(jìn)制數(shù)字 1~2行,1~16列,數(shù)字0~0xFFFF,范圍1~4
{
unsigned char i,hexnum;
LCD1602_SetCursor(hang,lie);
for(i=wei;i>0;i--)
{
hexnum=hex/LCD_Pow(16,i-1)%16;
if(hexnum<10)
{
LCD1602_WriteData(hexnum+'0');
}
else
{
LCD1602_WriteData(hexnum-10+'A');
}
}
}
void LCD1602_bin(unsigned char hang,lie,unsigned int bin,unsigned char wei)//顯示二進(jìn)制數(shù)字 1~2行,1~16列,數(shù)字0~1111 1111 1111 1111,范圍1~16
{
unsigned char i;
LCD1602_SetCursor(hang,lie);
for(i=wei;i>0;i--)
{
LCD1602_WriteData(bin/LCD_Pow(2,i-1)%2+'0');
}
}
? ? ? ? 主函數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-449802.html
#include <REGX52.H>
#include "LCD1602.h"
void main()
{
LCD1602_Init();
LCD1602_zifu(1,1,'a');
LCD1602_zifuchuan(1,3,"Hello");
lCD1602_shuzi(1,9,12,5);
LCD1602_hex(1,15,0xae,2);
LCD1602_bin(2,1,0xaa,8);
LCD1602_zfshuzi(2,10,-36,2);
while(1)
{
}
}
到了這里,關(guān)于51單片機(jī)——LCD1602液晶屏 C語言入門編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!