51單片機實現SMC1602液晶屏顯示實例

来源:http://www.cnblogs.com/hughdong/archive/2017/05/22/6890337.html
-Advertisement-
Play Games

———————————————————————————————————————————— LCD1602 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...


————————————————————————————————————————————

LCD1602

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  • 1602的意思是每行顯示16個字元,一共可以顯示兩行。如果是12232液晶(圖形型液晶)則表示由122列32行組成,即共有122*32個點
  • p.s.註意使用溫度,通常液晶的工作範圍為0~+55℃,存儲溫度範圍為-22~+60℃。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

引腳情況:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

基本操作時序:

狀態

輸入

輸出

讀狀態

  • RS=0
  • R/W=1
  • E=1
  • D0~D7=狀態字

讀數據

  • RS=1
  • R/W=1
  • E=1
  • D0~D7=數據

寫指令

  • RS=0
  • R/W=0
  • E=1
  • D0~D7=指令碼
  • E=1

寫數據

  • RS=1
  • R/W=0
  • E=1
  • D0~D7=數據
  • E=1

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RAM內部映射:80個位元組

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

狀態字說明://狀態字反應了當前液晶屏的情況,當STA7為1時說明顯示器正在忙碌狀態,不可進行操作

  • STA0~STA6表示當前地址指針的數值
  • STA7表示讀/寫使能,=1表示進位,=0表示允許

    p.s.原則上每次對控制器讀寫操作之前都必須進行讀寫檢測,確保STA7=0,實際操作中由於單片機操作速度慢於液晶控制的反應速度,可以不進行讀寫檢測而只進行簡短的延時。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

數據指針設置:

用戶可以通過以下的數據地址指針訪問內部的80個位元組RAM,用來設置數據地址

80H+地址碼(0~27H,40~67H

例:對第一個地址進行操作,0x80+0x01

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

其他指令碼:

01H

顯示清屏(數據指針清零,所有顯示清零)

02H

顯示回車(數據指針清零)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

初始化:

  • 顯示模式設置:38H

  • 顯示開/關及游標設置

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

讀寫操作時序:

  • 讀操作

  • 寫操作

  • 操作時間參數

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

操作方式:

  • 對LCD的操作可以分為數據和指令兩部分。
  • 通過操作RS,R/W,E,執行四種操作:讀狀態,讀數據,寫指令,寫數據
  • D0~D7用來輸入輸出指令碼和數據

————————————————————————————————————————————

LCD1602使用實例:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

設計要求:

使用LCD1602顯示兩行字元,顯示兩行字,兩個按鍵控制著顯示或清屏

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

設計思路:

  • 初始化液晶顯示屏 //參照上文"初始化"
    • 打開使能
    • 指令碼操作
      • 設置16*2顯示,5*7點陣,8位數據結構
      • 開顯示,顯示游標,不閃爍
      • 讀寫完字元後地址指針+1,游標+1,整屏顯示不移動
      • 清屏
      • 設置地址顯示的首字元
  • 初始化中斷
    • 打開中斷
    • 外部中斷0和1
  • 死迴圈等待中斷
  • 按鍵中斷
    • 按鍵"顯示"
      • 迴圈寫入數據(字元數組)
      • 指令"換行"
      • 迴圈寫入第二行數據
    • 按鍵"清屏"
      • 指令"清屏"
  • 子函數 //參照上文"讀寫操作時序表"
    • 寫數據
    • 寫指令

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

實現代碼:

 1 #include <reg52.h>
 2 typedef unsigned char uchar;
 3 sbit en = P3 ^ 4;
 4 sbit rs = P3 ^ 5;
 5 uchar code table1[] =
 6 {
 7     "SMC1602 0x01..."
 8 };
 9 uchar code table2[] =
10 {
11     "      Hugh Dong."
12 };
13 void Delay(uchar m)
14 {
15     uchar i, j;
16     for (i = m; i > 0; --i)
17         for (j = 110; j > 0; --j);
18 }
19 /* 寫數據 */
20 void write_date(uchar date)
21 {
22     //參考寫操作時序圖
23     rs = 1; //RS高電平,寫數據
24     P2 = date; //寫入數據,對應時序圖t_SP2數據建立
25     Delay(5);
26     en = 1; //打開使能,給E一個高脈衝,開始寫入數據
27     Delay(5);
28     en = 0; //關閉使能,寫入數據完成
29 }
30 /* 寫指令 */
31 void write_com(uchar com)
32 {
33     //基本原理同寫數據
34     rs = 0; //RS低電平,寫指令
35     P2 = com;
36     Delay(5);
37     en = 1;
38     Delay(5);
39     en = 0;
40 }
41 /* 初始化LCD */
42 void Init()
43 {
44     en = 1;
45     write_com(0x38); //00111000 設置16*2顯示,5*7點陣,8位數據介面
46     write_com(0x0E); //00001110 開顯示,顯示游標,不閃爍
47     write_com(0x06); //00000110 讀寫字元後地址指針+1,游標+1,屏幕不移動
48     write_com(0x01); //清屏
49     write_com(0x80 + 0x01); //設置數據地址指針從第一個開始
50 }
51 int main()
52 {
53     /* 初始化LCD */
54     Init();
55     Delay(100);
56     /* 初始化中斷 */
57     EA = 1;
58     EX0 = 1;
59     EX1 = 1;
60     /* 死迴圈 */
61     while(1);
62 }
63 void Display()interrupt 0 using 1
64 {
65     uchar i;
66     for (i = 0; i < 16; ++i) //遍歷逐個寫入第一行數據
67     {
68         write_date(table1[i]);
69         Delay(20);
70     }
71     write_com(0x02); //換行
72     write_com(0x80 + 0x40); //數據地址指針指向第二行
73     for(i = 0; i < 16; ++i) //逐個遍歷寫入第二行數據
74     {
75         write_date(table2[i]);
76         Delay(20);
77     }
78 }
79 void Clear() interrupt 1 using 1
80 {
81     write_com(0x01);
82 }

 

   


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從一個表複製數據,然後把數據插入到另一個新表中。 假設有一個已創建且有數據的orders表,要把orders表備份到還未創建的newOrders表裡 SQL用法:SELECT * INTO newOrders FROM orders 但是mysql使用報錯,ERROR 1327 (42000): U ...
  • SQL Server 2014新功能 -- 延遲事務持久性(Delayed Transaction Durability) SQL Server事務提交預設是完全持久性的(Full Durable),從SQL Server 2014開始,增加了新的功能延遲事務持久性,使得事務提交可設置為延時持久性的 ...
  • windows10啟動優化 啟動時: 1)關閉windows自動更新 2)關閉windows防火牆 3)關閉Windows Defender (1)使用快捷鍵(WIN+R)調出運行工具,然後再輸入組策略命令(gpedit.msc)再點擊確定。 (2)進入組策略在電腦配置下麵的管理模板,Window ...
  • which命令 用於查找並顯示給定命令的絕對路徑,環境變數PATH中保存了查找命令時需要遍歷的目錄。which命令會在環境變數PATH設置的目錄里查找符合條件的文件。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。 whereis命令 用來定位命令的二 ...
  • 編譯安裝httpd 1 去官網下載源碼包 為避免非法軟體,一定要去官網下載http://www.apache.org httpd-2.4.25.tar.gz2 2 安裝開發包組 yum groupinstall "Development tools" 3 解壓httpd-2.4.25.tar.gz2 ...
  • bash shell中測試命令 test命令提供了if-than語句中測試不同條件的途徑。如果test命令中列出的條件成立,test命令就會退出並返回退出狀態嗎0 。這樣if-than語句就與其他編程語言中的if-than語句類似的方式工作了。如果條件不成立,test命令就會退出並返回非零的退出狀態 ...
  • 一、Squashfs文件系統簡介 squashfs是以linux 內核源碼補丁的形式發佈,附帶mksquashfs工具,用於創建squash文件系統。squashfs可以將整個文件系統或者某個單一的目錄壓縮在一起, 存放在某個設備, 某個分區或者普通的文件中. 如果你將其壓縮到一個設備中, 那麼你可 ...
  • 一般在使用VMware Workstation Pro linux 系統 預設可能都是自動分配的ip地址,如果改為靜態ip地址 改怎麼設置呢。 本次方法為NAT模式 非橋接 首先先查看運行虛擬機環境當前的主機ip配置 ipv4 的ip地址:192.168.254.1 鏈接linux 系統執行 vim ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...