LCD12864支持兩種模式驅動,分別是并行模式和串行模式,通過PSB引腳進行選擇模式,并行數據傳輸速度快,但是占用引腳多,反之串行模式,傳輸速度相對并行模式而言比較慢,但是省引腳。
串行模式驅動LCD12864
說明:
GND——GND
VCC——VCC(5V or 3.3V)
V0 ——空(或者接一個可變電阻到VCC)
RS ——接PB14 RS = 0 命令 RS = 1 數據
RW ——接PB13 RW = 0 寫 RW = 1 讀
E ——接PB15
DB0-DB7 ——空
PSB——接GND,PSB = 0 串行模式 PSB = 1 并行模式
RST——接PB12
BLA——VCC(5V or 3.3V)
BLK——接GND
剩余引腳不接,留空
注意:ST7920在PSB為低電平時選擇串行模式,在串行模式下,一個完整的串行傳輸周期由以下組成:
首先送入啟動字節,送入連續的5個“1”來啟動一個周期此時傳輸計數器被重置,并且串行傳輸被同步。緊接的兩個位指定傳輸方向(RW,1是讀數據,0是寫數據)
以及傳輸性質(RS,0是命令寄存器,1是數據寄存器),最后第八位是固定的“0”
所以寫指令之前,必須先傳輸 11111 000 (即0xF8)
寫數據之前 必須先傳輸 11111 010 (即0xFA)
傳輸完啟動字節后,開始傳輸指令或者數據,指令或者數據都是以字節為單位,一個字節8bit,在傳輸過程中會進行拆分處理,如傳輸0x35(二進制為 0011 0101)時
將0x35的高4位放在第一個字節的高4位,低4位補0,如 0011 0000
將0x35的低4位放在第二個字節的高4位,低4位補0,如 0101 0000
所以在傳輸指令或者數據時,會將一個字節拆分為兩個字節進行傳輸 0011 0000 0101 0000
假設此時傳輸的0x35是數據而非指令,由于在代碼中將啟動字節與數據進行合并,所以傳輸的數據為:0x00FA3050
lcd12864.gif (1.3 MB, 下載次數: 72)
下載附件
效果圖
2019-7-7 14:16 上傳
單片機源程序如下:
- //////////////////////////////////////////////////////////////////////////////////
- // 文 件 名 : main.c
- // 版 本 號 : v1.0
- // 作 者 :
- // 生成日期 : 2019-0707
- // 最近修改 :
- // 功能描述 : 串行方式驅動LCD12864
- //
- // 說明:
- // ----------------------------------------------------------------
- // GND——GND
- // VCC——VCC(5V or 3.3V)
- // V0 ——空(或者接一個可變電阻到VCC)
- // RS ——接PB14
- // RW ——接PB13
- // E ——接PB15
- // DB0-DB7 ——空
- // PSB——接GND 串行模式
- // RST——接PB12
- // BLA——VCC(5V or 3.3V)
- // BLK——接GND
- // 剩余引腳不接,留空
- // ----------------------------------------------------------------
- //
- //All rights reserved
- //////////////////////////////////////////////////////////////////////////////////
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "iic.h"
- #include "oled.h"
- #include "bmp.h"
- #include "lcd12864.h"
- static float Data = 9876.65; //在12864顯示
- char Table[] = {"0000.00"};
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
- InitDelay();
- InitUart(115200);
- InitLcd();
-
- ClearLcdDisplay();
-
- Table[0] = ((int)(Data * 100)/100000 + '0'); //千
- Table[1] = ((int)(Data * 100)/10000%10 + '0'); //百
- Table[2] = ((int)(Data * 100)/1000%10 + '0'); //十
- Table[3] = ((int)(Data * 100)/100%10 + '0'); //個
- Table[4] = '.'; //小數點
- Table[5] = ((int)(Data * 100)/10%10+'0'); //小數點后一位
- Table[6] = ((int)(Data * 100)%10+'0'); //小數點后兩位
- while(1)
- {
- LcdDisplayString(0,0,"清時明月漢時關");
- LcdDisplayString(1,0,"萬里長征人未還");
- LcdDisplayString(2,0,"但使龍城飛將在");
- LcdDisplayString(3,0,"不教胡馬度陰山");
- DelayMs(1800); //最大延時不能超過2000
- ClearLcdDisplay();
- DelayMs(100);
- LcdDisplayString(0,2,"顯示浮點數"); //第0行
- LcdDisplayString(1,10,Table);
- DelayMs(1800);
- // ClearLcdDisplay(); //可不要,文字會覆蓋掉
- // DelayMs(100);
- }
- }
復制代碼
所有資料51hei提供下載:
STM32串行模式驅動LCD12864.7z
(191.21 KB, 下載次數: 236)
2019-7-7 22:14 上傳
點擊文件名下載附件
代碼 下載積分: 黑幣 -5
|