日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32驱动LCD1602,哪位同学需要的,来了

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32驱动LCD1602,哪位同学需要的,来了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題由來

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

淘寶下單買一個:

LCD1602的意思就是每行可以顯示16個字符,一共可以顯示2行內容。

開發環境與工具

  • Keil 5
  • 公眾號開源的最小系統核心板
  • PC為Win10
  • 3.3V LCD1206的型號為:1602A

引腳定義

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

管腳號管腳名稱管腳功能描述
1Vss電源地(GND)
2Vdd電源電壓(+3.3V)
3VO對比度(清晰度)調整
4RS寄存器選擇輸入端,當RS=0,當進行寫模塊操作,指向指令寄存器;當RS=1,無論讀操作還是寫操作,均指向數據寄存器
5R/W讀寫控制輸入端。當R/W=1時為讀操作;當R/W=0時為寫操作。
6E使能信號輸入端。讀操作時,高電平有效;寫操作時,下降沿有效。
7~14DB0~DB78位雙向數據總線
15A背光板電源正+3.3V
16K背光板電源負0V

因為STM32為3.3V單片機,所以為了方便,本次測試選用了一個3.3V的LCD1602。

本次實例選用的LCD1602背部如下所示,顯示的型號為:1602A

原理圖

具體連接情況:

管腳號管腳名稱管腳功能描述
1Vss電源負極,接地
2Vdd電源正極,接3.3V(注意自己所選的LCD1602是否支持3.3V),原理圖中J30的1、2腳短接
3VO調節屏幕對比度,R30為10K的電位器
4RS與STM32任意一個GPIO相連即可,本實例選擇PB6
5R/W與STM32任意一個GPIO相連即可,本實例選擇PB7
6E與STM32任意一個GPIO相連即可,本實例選擇PB8
7~14DB0~DB7與STM32任意8個GPIO相連即可,如果方便選擇一組中相鄰的8個GPIO的話更好
15A背光板電源正+3.3V,中間加了一個10Ω的限流電阻,即R31=10Ω
16K背光板電源負,接地

注意:程序下載之后,如果屏幕沒有任何內容顯示,先別急著否定,可以嘗試調節一下與VO引腳相連的電位器,有時是因為對比度的原因導致沒有任何內容顯示。

寫操作時序

寫操作過程時序分析

  • 根據向LCD1602液晶寫入的內容是指令還是數據,將RS引腳置低或置高。寫指令,將RS置低;寫數據,將RS置高;

  • 因為是寫操作,所以我們需要將R/W引腳置低;

  • 做好寫數據之前的準備工作:先將E引腳置低,然后將要寫的內容(一個字節數據),發送至DB0~DB7上;

  • 封裝的改變DB0~DB7的函數如下:

    void WriteData(u8 data) {GPIO_WriteBit(GPIOA, GPIO_Pin_6,(BitAction)((data & 0x80) >> 7 )); //D7GPIO_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 }
  • 因為寫操作時,下降沿有效,所以我們先將E腳置高,延時一段時間之后,再置低,在此過程中,完成寫操作。
  • 綜上所述,發送命令和數據的函數封裝如下:

    /* 向LCD1602液晶寫入一字節命令,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液晶寫入一字節數據,dat-待寫入數據值 */ 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(); }

    因為要讓LCD1602顯示內容,只需要往LCD1602發送數據即可,即只需要完成寫操作,不需要讀操作,所以我們只需要封裝上面寫指令寫數據兩個函數即可,未封裝讀操作的函數。

    LCD內部資源及顯示原理

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

    通過選擇相應的指令設置,用戶可以實現多種字符顯示樣式。

    部分指令列表

    清屏指令

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

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

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

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

    設置顯示RAM起始地址

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

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

    具體對應關系如下:

    顯示RAM起始地址,即光標位置,封裝函數如下:

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

    液晶顯示字符串函數

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

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

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

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

    這里為什么寫入字符’1’,LCD1602正好可以顯示1呢?因為在LCD1602內部有這樣一個CGROM和CGRAM中字符代碼與字符圖形對應關系表:

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

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

    如果要顯示字符’1’,對應的十六進制為0x31,即高四位為0011,低四位為xxxx0001,組合一起即為要顯示內容的位置,具體如上表中框選位置。

    再對照ASCII碼表,發現二者是一一對應的,所以我們直接發送ASCII碼,即可對應其實際的字符。

    初始化LCD1602

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

    結果展示

    總的來說,LCD1602的驅動還是挺簡單的,液晶屏的單價也不貴,唯一的缺點就是不能顯示中文,至于選取哪種液晶屏,各位可以根據需要自由選取哈。

    資料獲取

    微信公眾號【嵌入式從0到1】后臺回復“LCD1602”,可以下載本文對應的工程源碼。

    推薦閱讀

    STM32驅動0.96寸OLED液晶屏

    OLED液晶屏如何顯示中文呢?

    4位數碼管顯示模塊驅動

    8X8點陣實現電梯運行效果

    STM32串行通信模式驅動LCD12864,結合手冊從原理讓你理解顯示過程

    基于鴻蒙OS移植OLED驅動程序

    歡迎關注

    一個專注于嵌入式知識分享,學習路上不迷路的公眾號,歡迎關注。

    想加技術交流群的,可以加我微信【chengxuyuanxiaoha】,讓我拉你進群。

    我有一個想法

    最近臨近畢業,很多兄弟都在準備畢業答辯,有各種各樣的問題要咨詢,我在想能不能搞個直播,現場回答各位問題給大家呢?這樣也能提高一下效率。

    如果大家支持小哈哥來個直播,文末點個,讓我看看有多人能捧場。

    人多的話,周末就搞起!~

    總結

    以上是生活随笔為你收集整理的STM32驱动LCD1602,哪位同学需要的,来了的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。