欧美人与禽2O2O性论交,秋霞免费视频,国产美女视频免费观看网址,国产成人亚洲综合网色欲网

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

大家好,今天給大家介紹LCD1602屏幕,下方附有本文涉及的全部資料和源代碼的獲取方式,可進群免費領取。

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

1.接線說明

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

第1引腳:GND為電源地

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

第3引腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會 產生“鬼影”,使用時可以通過一個10K的電位器調整對比度)。

第4引腳:RS為寄存器選擇,高電平1時選擇數據寄存器低電平0時選擇指令寄存器。

第5引腳:RW為讀寫信號線,高電平(1)時進行讀操作,以51為例的簡單原理圖低電平(0)時進行寫操作。

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

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

開發(fā)板接線圖:

2.LCD1602顯示原理

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

首先來說一下在哪顯示這個問題:

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

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

在哪顯示說清楚了,現在來搞怎么顯示這個問題:

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

在LCD1602的手冊中給出了這樣一個表格,我們想顯示表格中的字符只需獲取某個字符的高位和低位即可。例如我想顯示“B”這個字符,就是0100 0010轉換成16進制就是0x42,剛好對應‘B’的ASCLL碼66。當然我們在編程的時候無需這樣操作,只需輸入字符即可,編譯器會自動編譯成對應的ASCLL碼。

說到這里會發(fā)現無論是傳輸地址的指令還是傳輸字符的指令都是通過D0-D7這八根線進行傳輸,那么我們什么時候傳輸的數據,說明時候傳輸的是地址呢。我們靠的是在1602上的RS引腳,RS為高電平1時選擇數據寄存器(寫數據)、低電平0時選擇指令寄存器(寫地址)。

3.LCD1602時序分析

LCD1602的時序分為讀操作時序和寫操作時序,我們先分析一下最重要的寫操作時序。我們無論是寫入數據還是寫入地址都必須要執(zhí)行寫操作,因此我們在編程是最好封裝兩個函數(寫地址函數,寫數據函數)。

寫時序分析

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

首先看RS,RS的時序分析非常簡單就正如上文所說我們只需搞清楚到底是是寫地址還是寫數據 ,寫地址為0,寫數據為1即可,沒有太多好分析的。

R/W:可以從途中看出來R/W的時序低電平貫穿了整個時序,因此我們將R/W置0即可。

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

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

#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) //寫命令函數{ check_busy(); //檢測忙信號函數 RS = 0; //RS為低電平:寫指令 RW = 0; EN = 0; _nop_(); //執(zhí)行一個空函數,延時約1us databuffer = cmd; _nop_(); EN = 1; _nop_(); _nop_(); EN = 0; _nop_(); } void Write_data_Func(char datashow) //寫命令函數{ check_busy(); //檢測忙信號函數 RS = 1; //RS為高電平:寫內容 RW = 0; EN = 0; _nop_(); databuffer = datashow; _nop_(); EN = 1; _nop_(); _nop_(); EN = 0; _nop_(); }

讀操作時序:

讀操作時序主要應用在檢測忙信號,忙信號也在手冊初始化中使用到,下文會提到。所以我們分析讀操作時序的目的也就是為了寫檢測忙信號函數。

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

RS:置0,寫命令

RW:高電平貫穿整個時序,因此置1。

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

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

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

代碼如下:

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

LCD1602初始化:

當然這里還需注意LCD1602的手冊給出了使用前還需將LCD1602初始化,具體初始化內容如下,我們只需調用我們剛剛封裝好的寫命令函數一步一步執(zhí)行手冊所給的內容即可。

(1)延時 15ms

(2)寫指令 38H(不檢測忙信號)

(3)延時 5ms

(4)以后每次寫指令,讀/寫數據操作均需要檢測忙信號

(5)寫指令 38H:顯示模式設置

(6)寫指令 08H:顯示關閉

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

(8)寫指令 06H:顯示光標移動設置

(9)寫指令 0CH:顯示開及光標設置

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顯示一個字符

我們上面已經把寫命令函數,寫數據函數,初始化函數等都已經寫完了,現在就可以在main函數里面操作讓我們的LCD1602顯示一個字符了。

代碼如下:

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

效果如下:

LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)LCD1602屏幕簡介(含代碼講解)【超級詳細教程】(lcd1602顯示屏介紹)

完整資料可進群免費領?。。?!

嵌入式物聯網的學習之路非常漫長,不少人因為學習路線不對或者學習內容不夠專業(yè)而錯失高薪offer。不過別擔心,我為大家整理了一份150多G的學習資源,基本上涵蓋了嵌入式物聯網學習的所有內容。點擊下方鏈接,0元領取學習資源,讓你的學習之路更加順暢!記得點贊、關注、收藏、轉發(fā)哦!

相關新聞

聯系我們
聯系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部