日韩高清亚洲日韩精品一区二区三区,成熟人妻av无码专区,国产又A又黄又潮娇喘视频,男女猛烈无遮挡免费视频在线观看

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

大家好,今天給大家介紹LCD1602屏幕,下方附有本文涉及的全部資料和源代碼的獲取方式,可進(jìn)群免費(fèi)領(lǐng)取。

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

1.接線說(shuō)明

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

第1引腳:GND為電源地

第2引腳:VCC接5V電源正極

第3引腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì) 產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。

第4引腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。

第5引腳:RW為讀寫(xiě)信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,以51為例的簡(jiǎn)單原理圖低電平(0)時(shí)進(jìn)行寫(xiě)操作。

第6引腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。

第7~14引腳:D0~D7為8位雙向數(shù)據(jù)端。第15~16腳:空腳或背燈電源。第15引腳背光正極,第16引腳背光負(fù)極。

開(kāi)發(fā)板接線圖:

2.LCD1602顯示原理

要想搞懂1602如何顯示,就只需搞懂兩個(gè)問(wèn)題(在哪顯示,如何顯示)。

首先來(lái)說(shuō)一下在哪顯示這個(gè)問(wèn)題:

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

LCD1602可以顯示16*2個(gè)字符且通過(guò)D0-D7八個(gè)引腳傳輸數(shù)據(jù)八位數(shù)據(jù),每一個(gè)顯示的位置都對(duì)應(yīng)上圖的一個(gè)地址。例如我想在第一行的第三個(gè)位置顯示,那么就可以鎖定上表中的“02”,換算成二進(jìn)制就是0000 0010。聽(tīng)上去很簡(jiǎn)單,但是LCD1602有個(gè)特點(diǎn)就是寫(xiě)入顯示地址時(shí)要求最高位 D7 恒定為高電平。所以我們想顯示真實(shí)的地址應(yīng)該為1000 0010。

在哪顯示說(shuō)清楚了,現(xiàn)在來(lái)搞怎么顯示這個(gè)問(wèn)題:

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

在LCD1602的手冊(cè)中給出了這樣一個(gè)表格,我們想顯示表格中的字符只需獲取某個(gè)字符的高位和低位即可。例如我想顯示“B”這個(gè)字符,就是0100 0010轉(zhuǎn)換成16進(jìn)制就是0x42,剛好對(duì)應(yīng)‘B’的ASCLL碼66。當(dāng)然我們?cè)诰幊痰臅r(shí)候無(wú)需這樣操作,只需輸入字符即可,編譯器會(huì)自動(dòng)編譯成對(duì)應(yīng)的ASCLL碼。

說(shuō)到這里會(huì)發(fā)現(xiàn)無(wú)論是傳輸?shù)刂返闹噶钸€是傳輸字符的指令都是通過(guò)D0-D7這八根線進(jìn)行傳輸,那么我們什么時(shí)候傳輸?shù)臄?shù)據(jù),說(shuō)明時(shí)候傳輸?shù)氖堑刂纺?。我們靠的是?602上的RS引腳,RS為高電平1時(shí)選擇數(shù)據(jù)寄存器(寫(xiě)數(shù)據(jù))、低電平0時(shí)選擇指令寄存器(寫(xiě)地址)。

3.LCD1602時(shí)序分析

LCD1602的時(shí)序分為讀操作時(shí)序和寫(xiě)操作時(shí)序,我們先分析一下最重要的寫(xiě)操作時(shí)序。我們無(wú)論是寫(xiě)入數(shù)據(jù)還是寫(xiě)入地址都必須要執(zhí)行寫(xiě)操作,因此我們?cè)诰幊淌亲詈梅庋b兩個(gè)函數(shù)(寫(xiě)地址函數(shù),寫(xiě)數(shù)據(jù)函數(shù))。

寫(xiě)時(shí)序分析

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

首先看RS,RS的時(shí)序分析非常簡(jiǎn)單就正如上文所說(shuō)我們只需搞清楚到底是是寫(xiě)地址還是寫(xiě)數(shù)據(jù) ,寫(xiě)地址為0,寫(xiě)數(shù)據(jù)為1即可,沒(méi)有太多好分析的。

R/W:可以從途中看出來(lái)R/W的時(shí)序低電平貫穿了整個(gè)時(shí)序,因此我們將R/W置0即可。

E:初始狀態(tài)為0,然后延時(shí)至少tR之后置1(tR的值參考上表,25ns執(zhí)行一個(gè)_nop_();函數(shù)即可),置1后要延時(shí)至少tPW(上圖給出的tPW值為150ns,建議執(zhí)行兩個(gè)_nop_();函數(shù)),接著再至少延時(shí)tF(執(zhí)行一個(gè)_nop_();函數(shù))后置0。

代碼如下(基于51單片機(jī)),其它單片機(jī)此原理都可適用。

#include "reg52.h"#include "intrins.h"#include "delay.h" #define databuffer P0 //定義D0-D7引腳sbit EN = P2^7;sbit RS = P2^6;sbit RW = P2^5; void Write_cmd_Func(char cmd) //寫(xiě)命令函數(shù){ check_busy(); //檢測(cè)忙信號(hào)函數(shù) RS = 0; //RS為低電平:寫(xiě)指令 RW = 0; EN = 0; _nop_(); //執(zhí)行一個(gè)空函數(shù),延時(shí)約1us databuffer = cmd; _nop_(); EN = 1; _nop_(); _nop_(); EN = 0; _nop_(); } void Write_data_Func(char datashow) //寫(xiě)命令函數(shù){ check_busy(); //檢測(cè)忙信號(hào)函數(shù) RS = 1; //RS為高電平:寫(xiě)內(nèi)容 RW = 0; EN = 0; _nop_(); databuffer = datashow; _nop_(); EN = 1; _nop_(); _nop_(); EN = 0; _nop_(); }

讀操作時(shí)序:

讀操作時(shí)序主要應(yīng)用在檢測(cè)忙信號(hào),忙信號(hào)也在手冊(cè)初始化中使用到,下文會(huì)提到。所以我們分析讀操作時(shí)序的目的也就是為了寫(xiě)檢測(cè)忙信號(hào)函數(shù)。

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

RS:置0,寫(xiě)命令

RW:高電平貫穿整個(gè)時(shí)序,因此置1。

E:初始狀態(tài)為0,延時(shí)tR后拉高,之后再延時(shí)tPW后拉低。

讀操作時(shí)序與寫(xiě)操作時(shí)序的區(qū)別在于:寫(xiě)操作時(shí)序在E=0的時(shí)候就開(kāi)始傳輸數(shù)據(jù),而讀操作時(shí)序要等E=1之后才開(kāi)始傳輸數(shù)據(jù)。

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

代碼如下:

void check_busy()//檢測(cè)忙信號(hào)函數(shù){ char tmp = 0x80; //創(chuàng)建一個(gè)變量,存放數(shù)據(jù) databuffer=0x80; //初始值為忙,只要當(dāng)單片機(jī)發(fā)數(shù)據(jù)后高位變低后才為不忙 while(tmp & 0x80){ //檢測(cè)tmp的高位bf的值是否為高電平,如果為忙程序卡住不往下執(zhí)行 //高電平:忙 低電平:不忙 RS = 0; RW = 1; EN = 0; _nop_(); EN = 1; _nop_(); _nop_(); tmp=databuffer; EN = 0; _nop_(); }}

LCD1602初始化:

當(dāng)然這里還需注意LCD1602的手冊(cè)給出了使用前還需將LCD1602初始化,具體初始化內(nèi)容如下,我們只需調(diào)用我們剛剛封裝好的寫(xiě)命令函數(shù)一步一步執(zhí)行手冊(cè)所給的內(nèi)容即可。

(1)延時(shí) 15ms

(2)寫(xiě)指令 38H(不檢測(cè)忙信號(hào))

(3)延時(shí) 5ms

(4)以后每次寫(xiě)指令,讀/寫(xiě)數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)

(5)寫(xiě)指令 38H:顯示模式設(shè)置

(6)寫(xiě)指令 08H:顯示關(guān)閉

(7)寫(xiě)指令 01H:顯示清屏

(8)寫(xiě)指令 06H:顯示光標(biāo)移動(dòng)設(shè)置

(9)寫(xiě)指令 0CH:顯示開(kāi)及光標(biāo)設(shè)置

void LCD1602_Init() //LCD1602初始化{ Delay15ms(); Write_cmd_Func(0x38); Delay5ms(); Write_cmd_Func(0x38); Write_cmd_Func(0x08); Write_cmd_Func(0x01); Write_cmd_Func(0x06); Write_cmd_Func(0x0c);}

4.LCD1602顯示一個(gè)字符

我們上面已經(jīng)把寫(xiě)命令函數(shù),寫(xiě)數(shù)據(jù)函數(shù),初始化函數(shù)等都已經(jīng)寫(xiě)完了,現(xiàn)在就可以在main函數(shù)里面操作讓我們的LCD1602顯示一個(gè)字符了。

代碼如下:

void main(){ char position = 0x80 0x08; //定義顯示的位置 char datashow = 'E' //定義顯示的字符 LCD1602_Init(); Write_cmd_Func(position); Write_data_Func(datashow);}

效果如下:

LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)LCD1602屏幕簡(jiǎn)介(含代碼講解)【超級(jí)詳細(xì)教程】(lcd1602顯示屏介紹)

完整資料可進(jìn)群免費(fèi)領(lǐng)取?。?!

嵌入式物聯(lián)網(wǎng)的學(xué)習(xí)之路非常漫長(zhǎng),不少人因?yàn)閷W(xué)習(xí)路線不對(duì)或者學(xué)習(xí)內(nèi)容不夠?qū)I(yè)而錯(cuò)失高薪offer。不過(guò)別擔(dān)心,我為大家整理了一份150多G的學(xué)習(xí)資源,基本上涵蓋了嵌入式物聯(lián)網(wǎng)學(xué)習(xí)的所有內(nèi)容。點(diǎn)擊下方鏈接,0元領(lǐng)取學(xué)習(xí)資源,讓你的學(xué)習(xí)之路更加順暢!記得點(diǎn)贊、關(guān)注、收藏、轉(zhuǎn)發(fā)哦!

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢(xún)
分享本頁(yè)
返回頂部