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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...