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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

基于51单片机+LCD1602显示

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于51单片机+LCD1602显示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LCD1602顯示介紹及程序

  • LCD1602介紹
            • 寫命令 代碼
            • 寫數據 代碼
    • LCD1602顯示程序步驟及如何初始化
        • 具體需要初始化什么?
        • 具體指令相關介紹:
        • 初始化代碼
      • 原理圖及顯示程序
      • 最終項目展示

LCD1602介紹


LCD1602相關引腳

LCD1602寫命令、寫數據相關操作圖


根據上面時序圖和時序參數圖我們可以寫出 寫命令代碼 和寫數據代碼

寫命令 代碼
寫命令 void write_com(char command) {RS = 0; RW = 0; //高讀低寫LCD = command;delay5ms(); //這里延時最低要30納秒 我們直接給5msE = 1;//使能拉高 delay5ms(); //最低要求延遲150納秒 我們直接給5msE = 0; }
寫數據 代碼
寫數據 void write_data(char data) {RS = 1;RW = 0;LCD = data;delay5ms(); //這里延時最低要30納秒 我們直接給5msE = 1;//使能拉高 delay5ms(); //最低要求延遲150納秒 我們直接給5msE = 0; }

LCD1602顯示程序步驟及如何初始化

1. 初始化
2. 寫命令(RS=0)
3. 寫數據(RS=1)

具體需要初始化什么?

1.顯示開關控制指令(功能:控制顯示器開/關 光標顯示/關閉 是否閃爍)2.進入模式設置指令(功能:每寫入一位數據后光標的移動 左/右 顯示屏不移動/整體右移 )3.功能設定指令(功能:設定數據總線的位數 顯示的行數 字型 )4.清屏指令(功能:清屏顯示空白 光標歸位 地址計數器(AC)的值為05.顯示位置設置(功能:指定在1602上哪個位置上顯示數據)

具體指令相關介紹:

1.顯示開關控制指令

write_com(0x0c); //開顯示功能 無光標 不閃爍

2.進入模式設置指令

write_com(0x06); //寫入數據后光標自動右移 整屏不移動。

3.功能設定指令

write_com(0x38); //數據總線8位 16X2顯示 5*7點陣

4.清屏指令

write_com(0x01); //清屏 0000 0001

5.顯示位置設置

如果想在1602屏幕上第一行第一個開始顯示 就是0x80
如果想在1602屏幕上第二行第一個開始顯示 就是0xc0

我這里就設置在第一行第三個開始顯示hello word

write_com(0x83); //在1602第一行第3個開始顯示

初始化代碼

void init_lcd() { write_com(0x0c); //開顯示功能 無光標 不閃爍write_com(0x06); //寫入數據后光標自動右移 整屏不移動write_com(0x38); //數據總線8位 16X2顯示 5*7點陣write_com(0x01); //清屏 0000 0001write_com(0x83); //在1602第一行第3個開始顯示 }

原理圖及顯示程序



引腳定義

//引腳定義 #define LCD P0 sbit E = P2^7; sbit RS = P2^6; sbit RW = P2^5;

lcd1602.h

void write_com(unsigned char command); //寫命令函數 void write_data(unsigned char dat); //寫數據函數 void init_lcd(); //初始化LCD1602函數 void delay5ms(); //延時5ms函數

lcd1602.c

#include <reg52.h> #include "lcd1602.h"#define LCD P0 sbit E = P2^7; //使能 sbit RS = P2^6; //數據/命令(H/L) sbit RW = P2^5; //讀寫(H/L)/******延遲5毫秒函數********/ void delay5ms() //誤差 -0.000000000001us {unsigned char a,b;for(b=15;b>0;b--)for(a=152;a>0;a--); }/******LCD1602寫命令函數********/ void write_com(unsigned char command) {RS = 0; RW = 0; //高讀低寫LCD = command;delay5ms(); //這里延時最低要30納秒 我們直接給5msE = 1; //使能拉高 delay5ms(); //最低要求延遲150納秒 我們直接給5msE = 0; }/******LCD1602寫數據函數********/ void write_data(unsigned char dat) {RS = 1;RW = 0;LCD = dat;delay5ms(); //這里延時最低要30納秒 我們直接給5msE = 1; //使能拉高 delay5ms(); //最低要求延遲150納秒 我們直接給5msE = 0; } /******初始化LCD1602********/ void init_lcd() { write_com(0x06); //寫入數據后光標自動右移 整屏不移動。write_com(0x0c); //開顯示功能 無光標 不閃爍write_com(0x38); //數據總線8位 16X2顯示 5*7點陣write_com(0x01); //清屏 0000 0001write_com(0x83); //在1602第一行第3個開始顯示 }

main.c

#include <reg52.h> #include "lcd1602.h"unsigned char array[] = {"hello word"}; unsigned char i = 0;void main() {//1.初始化lcd1602init_lcd();//2.寫數據(hello word)到LCD1602顯示while(array[i] != '\0'){ write_data(array[i]);i++;} while(1); }

最終項目展示

總結

以上是生活随笔為你收集整理的基于51单片机+LCD1602显示的全部內容,希望文章能夠幫你解決所遇到的問題。

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