99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

程序員小哈
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
作者動(dòng)態(tài)
自動(dòng)洗碗機(jī)綜合實(shí)例第二講 - 最小系統(tǒng)核心板PCB繪制
2024-07-18 09:21
自動(dòng)洗碗機(jī)綜合實(shí)例第一講 - 最小系統(tǒng)核心板原理圖繪制
2024-07-16 09:40
線路板焊接的干貨都在這里呢
2024-07-14 12:08
基于單片機(jī)的智能風(fēng)扇DIY總結(jié)
2024-07-13 14:42
基于HAL庫(kù)實(shí)現(xiàn)按鍵(外部中斷)翻轉(zhuǎn)一個(gè)LED
2024-06-30 14:02

STM32驅(qū)動(dòng)LCD1602的源碼,來了!

問題由來

我們之前分享過了數(shù)碼管、OLED、LCD12864,最近群里小伙伴有需要STM32驅(qū)動(dòng)LCD1602的源碼,咱們今天就分享一下,如何使用STM32驅(qū)動(dòng)LCD1602液晶屏,授人以魚不如授人以漁,一起來看看怎么驅(qū)動(dòng)LCD1602。

淘寶下單買一個(gè):

LCD1602的意思就是每行可以顯示16個(gè)字符,一共可以顯示2行內(nèi)容。

開發(fā)環(huán)境與工具

  • Keil 5
  • 公眾號(hào)開源的最小系統(tǒng)核心板
  • PC為Win10
  • 3.3V LCD1206的型號(hào)為:1602A

引腳定義

LCD1602一共有16個(gè)引腳,具體定義如下:

本次實(shí)例選用的LCD1602背部如下所示,顯示的型號(hào)為:1602A

原理圖

具體連接情況:

注意:程序下載之后,如果屏幕沒有任何內(nèi)容顯示,先別急著否定,可以嘗試調(diào)節(jié)一下與VO引腳相連的電位器,有時(shí)是因?yàn)閷?duì)比度的原因?qū)е聸]有任何內(nèi)容顯示。

寫操作時(shí)序

寫操作過程時(shí)序分析

  1. 根據(jù)向LCD1602液晶寫入的內(nèi)容是指令還是數(shù)據(jù),將RS引腳置低或置高。寫指令,將RS置低;寫數(shù)據(jù),將RS置高;

  2. 因?yàn)槭菍懖僮鳎晕覀冃枰獙/W引腳置低;

  3. 做好寫數(shù)據(jù)之前的準(zhǔn)備工作:先將E引腳置低,然后將要寫的內(nèi)容(一個(gè)字節(jié)數(shù)據(jù)),發(fā)送至DB0~DB7上;

封裝的改變DB0~DB7的函數(shù)如下:

void WriteData(u8 data)
{
	GPIO_WriteBit(GPIOA, GPIO_Pin_6,(BitAction)((data & 0x80) >> 7 )); 		//D7
	GPIO_WriteBit(GPIOA, GPIO_Pin_0,(BitAction)((data & 0x40) >> 6 )); 
	GPIO_WriteBit(GPIOC, GPIO_Pin_3,(BitAction)((data & 0x20) >> 5 )); 
	GPIO_WriteBit(GPIOC, GPIO_Pin_2,(BitAction)((data & 0x10) >> 4 )); 
	GPIO_WriteBit(GPIOC, GPIO_Pin_1,(BitAction)((data & 0x08) >> 3 )); 
	GPIO_WriteBit(GPIOC, GPIO_Pin_0,(BitAction)((data & 0x04) >> 2 )); 
	GPIO_WriteBit(GPIOC, GPIO_Pin_13,(BitAction)((data & 0x02) >> 1 )); 
	GPIO_WriteBit(GPIOB, GPIO_Pin_9,(BitAction)(data & 0x01));              //DB0
}
  1. 因?yàn)閷懖僮鲿r(shí),下降沿有效,所以我們先將E腳置高,延時(shí)一段時(shí)間之后,再置低,在此過程中,完成寫操作。

綜上所述,發(fā)送命令和數(shù)據(jù)的函數(shù)封裝如下:

/* 向LCD1602液晶寫入一字節(jié)命令,cmd-待寫入命令值 */
void LCD1602_Write_Cmd(u8 cmd)
{
	LCD_RS_Clr();
	LCD_RW_Clr();
	LCD_EN_Clr();
	WriteData(cmd);
	LCD_EN_Set();
	delay_ms(5);
	LCD_EN_Clr();
}

/* 向LCD1602液晶寫入一字節(jié)數(shù)據(jù),dat-待寫入數(shù)據(jù)值 */
void LCD1602_Write_Dat(u8 dat)
{
	LCD_RS_Set();
	LCD_RW_Clr();
	LCD_EN_Clr();
	WriteData(dat);
	LCD_EN_Set();
	delay_ms(5);
	LCD_EN_Clr();
}

因?yàn)橐孡CD1602顯示內(nèi)容,只需要往LCD1602發(fā)送數(shù)據(jù)即可,即只需要完成寫操作,不需要讀操作,所以我們只需要封裝上面寫指令寫數(shù)據(jù)兩個(gè)函數(shù)即可,未封裝讀操作的函數(shù)。

LCD內(nèi)部資源及顯示原理

LCD1602內(nèi)部提供了較為豐富的指令設(shè)置,比如:清顯示(清屏)、光標(biāo)回原點(diǎn)、顯示開/關(guān)、光標(biāo)開/關(guān)、顯示字符閃爍、光標(biāo)移位、顯示移位等指令。

通過選擇相應(yīng)的指令設(shè)置,用戶可以實(shí)現(xiàn)多種字符顯示樣式。

部分指令列表

清屏指令

查看上面指令表,我們可以知道清屏操作,只需要發(fā)送指令0x01即可。

利用上面封裝的寫指令void LCD1602_Write_Cmd(u8 cmd) 函數(shù),我們封裝清屏操作函數(shù)如下:

/* 清屏 */
void LCD1602_ClearScreen(void)
{
	LCD1602_Write_Cmd(0x01);
}

發(fā)送此指令,DDRAM(display data RAM)中的內(nèi)容全部清除,顯示消失;地址計(jì)數(shù)器AC=0,自動(dòng)增1模式;顯示歸位,光標(biāo)或者閃爍回到原點(diǎn)(顯示屏左上角),但并不改變移位設(shè)置模式。

設(shè)置顯示RAM起始地址

要顯示字符,首先要設(shè)定顯示的地址,即告訴LCD1602在哪里顯示字符,查找LCD1602數(shù)據(jù)手冊(cè),我們知道內(nèi)部顯示地址(DDRAM)如下:

如果要顯示在第一行,第一個(gè)字符的位置,那么其地址就是0x00,要顯示在第二行,第一個(gè)字符位置,那么其地址就是0x40。

具體對(duì)應(yīng)關(guān)系如下:

顯示RAM起始地址,即光標(biāo)位置,封裝函數(shù)如下:

/* 設(shè)置顯示RAM起始地址,亦即光標(biāo)位置,(x,y)-對(duì)應(yīng)屏幕上的字符坐標(biāo) */
void LCD1602_Set_Cursor(u8 x, u8 y)
{
	u8 addr;
	
	if (y == 0)
		addr = 0x00 + x;
	else
		addr = 0x40 + x;
	LCD1602_Write_Cmd(addr | 0x80);
}

液晶顯示字符串函數(shù)

要想顯示具體的內(nèi)容,就要先設(shè)置在液晶上顯示的位置,即調(diào)用上面的函數(shù)void LCD1602_Set_Cursor(u8 x, u8 y) ,利用其設(shè)定顯示的坐標(biāo)位置,然后調(diào)用寫數(shù)據(jù)函數(shù)void LCD1602_Write_Dat(u8 dat) ,這樣就完成了待顯示字符的寫入。

/* 在液晶上顯示字符串,(x,y)-對(duì)應(yīng)屏幕上的起始坐標(biāo),str-字符串指針 */
void LCD1602_Show_Str(u8 x, u8 y, u8 *str)
{
	LCD1602_Set_Cursor(x, y);
	while(*str != '\0')
	{
		LCD1602_Write_Dat(*str++);
	}
}

比如我們想要在液晶屏第二行顯示小哈哥的個(gè)人網(wǎng)站的網(wǎng)址:www.xiaohage.com,需要的代碼如下:

LCD1602_Show_Str(0, 1, "www.xiaohage.com");

這里為什么寫入字符’1’,LCD1602正好可以顯示1呢?因?yàn)樵贚CD1602內(nèi)部有這樣一個(gè)CGROM和CGRAM中字符代碼與字符圖形對(duì)應(yīng)關(guān)系表:

上圖即為CGROM表,表的最左邊一列為允許用戶自定義字模的CGRAM空間。

表的橫行是其高4位地址,表的列是其低4位地址。

如果要顯示字符’1’,對(duì)應(yīng)的十六進(jìn)制為0x31,即高四位為0011,低四位為xxxx0001,組合一起即為要顯示內(nèi)容的位置,具體如上表中框選位置。

再對(duì)照ASCII碼表,發(fā)現(xiàn)二者是一一對(duì)應(yīng)的,所以我們直接發(fā)送ASCII碼,即可對(duì)應(yīng)其實(shí)際的字符。

初始化LCD1602

/* 初始化1602液晶 */
void LCD1602_Init(void)
{
	LCD1602_Write_Cmd(0x38);	//16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)口
	delay_ms(5);
	LCD1602_Write_Cmd(0x0c);	//開顯示,光標(biāo)關(guān)閉
	delay_ms(5);
	LCD1602_Write_Cmd(0x06);	//文字不動(dòng),地址自動(dòng)+1
	delay_ms(5);
	LCD1602_Write_Cmd(0x01);	//清屏
	delay_ms(5);
}

結(jié)果展示

總的來說,LCD1602的驅(qū)動(dòng)還是挺簡(jiǎn)單的,液晶屏的單價(jià)也不貴,唯一的缺點(diǎn)就是不能顯示中文,至于選取哪種液晶屏,各位可以根據(jù)需要自由選取哈。

歡迎關(guān)注

一個(gè)專注于嵌入式知識(shí)分享,學(xué)習(xí)路上不迷路,歡迎關(guān)注。

想加技術(shù)交流群的,可以加我微信【chengxuyuanxiaoha】,讓我拉你進(jìn)群。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 3
收藏 4
關(guān)注 69
成為作者 賺取收益
全部留言
0/200
  • dy-M6Z6kbjV 2021-06-17 00:28
    感謝 分享
    回復(fù)
主站蜘蛛池模板: 亚洲日本高清成人aⅴ片 | 久久看精品 | 国产精品免费久久久久久久久久中文 | 中文久久| 免费高清一区二区三区 | 狠狠躁狠狠爱免费视频欧美 | 免费国产视频 | 少妇又色又爽又高潮极品 | 成年人黄色在线观看 | 99国内精品久久久久久久 | 怡红院成永久免费人视频视色 | 综合自拍亚洲综合图区高清 | 成人免费视频xbxb入口 | 亚洲视频二区在线观看 | 欧美jizzhd精品欧美 | 久久综合九色综合97网 | 8x8x国产精品 | 精品卡一卡二卡3卡高清乱码 | 亚洲色偷偷av男人的天堂 | 精品无人码麻豆乱码1区2区 | 国产精品久久久久久久美男 | 欧美精品久久久久 | 久久久久久草 | 欧美丰满熟妇性xxxx | 成人福利一区 | 国产二区自拍 | 综合自拍亚洲综合图区高清 | 精品日产一区二区三区手机 | 欧美性猛交xxxx乱大交退制版 | 新久草在线视频 | 久艹精品 | 僵尸启示录没删掉版免费观看 | 国产成人在线观看网站 | 国产91一区二区三区 | 色婷婷综合久久久久中国一区二区 | 亚洲人成未满十八禁网站 | 日韩精品一区二区三区中文无码 | 邻居少妇张开腿让我爽了在线观看 | 国产又黄又硬又粗 | 久久99日韩国产精品久久99 | 18videossex性欧美69|