大家好,我是老耿,高職青椒一枚,一直從事單片機、嵌入式、物聯網等課程的教學。對于高職的學生層次,同行應該都懂的,老師在課堂上教學幾乎是沒什麼成就感的。正是如此,才有了借助頭條平台尋求認同感和成就感的想法。在這裡,我準備陸續把自己花了很多心思設計的教學課件分享出來,如果您正是一名單片機愛好者或是一名同行,歡迎點贊 關注,各位的支持是本人持續輸出的動力,多謝多謝!#30天學會STM32##單片機#
前邊我們講解了LED、按鍵和蜂鳴器的應用,這三類器件本身工作原理十分簡單,因此我們的重點是放在STM32的GPIO上面。這一章我們來學習一下開發闆配套的那塊厚厚的液晶屏——LCD1602,聚焦的是這個器件本身的特點和工作時序。因此,我們需要熟讀它的數據手冊,因為手冊裡告訴了編程的要點、參數、時序等。閱讀器件手冊是做單片機和嵌入式開發必備的基本能力,我們就從這一章開始鍛煉起來吧。為了不讓篇幅太長,本章打算分四個部分來講解,本文是第四部分。
【學習目标】
- 了解LCD1602的工作原理
- 掌握LCD1602的工作時序
- 領悟軟件模拟時序的思路和方法
四、字符跳動顯示實驗
我們在前面的液晶指令描述中可以看到,LCD1602還支持光标和屏幕移動,下面我們就通過兩個實驗來感受一下動态顯示的效果。
4.1 任務描述這個實驗是讓字符串裡的每個字符逐個跳出來顯示,我們将實驗效果分解在圖18中,中間部分做了一些省略,同時也通過視頻進行了展現。
圖18 字符跳動顯示效果
4.2 工程源碼剖析
對于底層的lcd1602.c和lcd1602.h驅動文件來說,我們盡量不去改動。控制字符跳出的代碼在主程序裡實現,見如下代碼清單15。
代碼清單15 字符跳動顯示主程序源碼
五、液晶滾動顯示實驗5.1 任務描述這個實驗是讓整個屏幕畫面整體向左或向右滾動顯示,我們将實驗效果分解在圖19中,中間部分做了一些省略,同時也通過視頻進行了展現。
圖19 液晶滾動顯示效果
5.2 工程源碼剖析
同理,還是隻修改主程序裡的控制代碼,見如下代碼清單16。
代碼清單16 液晶滾動顯示主程序源碼
六、液晶顯示功能的擴展在上面的實驗中,我們通過Lcd1602_ShowStr()函數實現了字符串信息的顯示。但不知你是否考慮過,倘若顯示的内容不是字符的類型,比如傳感器采集溫濕度值、ADC采集的電壓值等,這些數據都是浮點類型的,也想通過液晶顯示出來,該如何處理呢?
針對以上問題,我們補充一個顯示函數Lcd1602_printf(),來實現多種數據類型的顯示,就像使用printf()函數那樣,可以通過%d、%f、%s這樣的形式來指定顯示内容的數據類型。該函數用到了C語言中解決變參問題的操作方式,想詳細了解這部分知識的同學請自行搜索查閱,這裡不展開。源碼見如下代碼清單17。
代碼清單17 Lcd1602_Printf()函數源碼
有了這個函數,我們就可以在主程序中像使用printf()函數那樣在液晶屏上“打印”需要的内容了,代碼清單18給了一個簡單示例。
代碼清單18 使用帶變參顯示函數示例
可以看到,帶變參的Lcd1602_Printf()函數更靈活通用,使我們不必再糾結顯示内容究竟是什麼數據類型,這是它的優勢。那有沒有劣勢呢?當然有了,在顯示同樣内容的情況下,使用Lcd1602_Printf()函數比用Lcd1602_ShowStr()函數編譯出來的代碼量大了不是一點兒,如圖20所示。
圖20 編譯的代碼量對比
(第四部分完,共四部分)
,