標(biāo)題:
STM32使用串行模式驅(qū)動(dòng)LCD12864源程序
[打印本頁]
作者:
酒不醉人
時(shí)間:
2019-7-7 14:18
標(biāo)題:
STM32使用串行模式驅(qū)動(dòng)LCD12864源程序
LCD12864支持兩種模式驅(qū)動(dòng),分別是并行模式和串行模式,通過PSB引腳進(jìn)行選擇模式,并行數(shù)據(jù)傳輸速度快,但是占用引腳多,反之串行模式,傳輸速度相對(duì)并行模式而言比較慢,但是省引腳。
串行模式驅(qū)動(dòng)LCD12864
說明:
GND——GND
VCC——VCC(5V or 3.3V)
V0 ——空(或者接一個(gè)可變電阻到VCC)
RS ——接PB14 RS = 0 命令 RS = 1 數(shù)據(jù)
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為低電平時(shí)選擇串行模式,在串行模式下,一個(gè)完整的串行傳輸周期由以下組成:
首先送入啟動(dòng)字節(jié),送入連續(xù)的5個(gè)“1”來啟動(dòng)一個(gè)周期此時(shí)傳輸計(jì)數(shù)器被重置,并且串行傳輸被同步。緊接的兩個(gè)位指定傳輸方向(RW,1是讀數(shù)據(jù),0是寫數(shù)據(jù))
以及傳輸性質(zhì)(RS,0是命令寄存器,1是數(shù)據(jù)寄存器),最后第八位是固定的“0”
所以寫指令之前,必須先傳輸 11111 000 (即0xF8)
寫數(shù)據(jù)之前 必須先傳輸 11111 010 (即0xFA)
傳輸完啟動(dòng)字節(jié)后,開始傳輸指令或者數(shù)據(jù),指令或者數(shù)據(jù)都是以字節(jié)為單位,一個(gè)字節(jié)8bit,在傳輸過程中會(huì)進(jìn)行拆分處理,如傳輸0x35(二進(jìn)制為 0011 0101)時(shí)
將0x35的高4位放在第一個(gè)字節(jié)的高4位,低4位補(bǔ)0,如 0011 0000
將0x35的低4位放在第二個(gè)字節(jié)的高4位,低4位補(bǔ)0,如 0101 0000
所以在傳輸指令或者數(shù)據(jù)時(shí),會(huì)將一個(gè)字節(jié)拆分為兩個(gè)字節(jié)進(jìn)行傳輸 0011 0000 0101 0000
假設(shè)此時(shí)傳輸?shù)?x35是數(shù)據(jù)而非指令,由于在代碼中將啟動(dòng)字節(jié)與數(shù)據(jù)進(jìn)行合并,所以傳輸?shù)臄?shù)據(jù)為:0x00FA3050
lcd12864.gif
(1.3 MB, 下載次數(shù): 72)
下載附件
效果圖
2019-7-7 14:16 上傳
單片機(jī)源程序如下:
//////////////////////////////////////////////////////////////////////////////////
// 文 件 名 : main.c
// 版 本 號(hào) : v1.0
// 作 者 :
// 生成日期 : 2019-0707
// 最近修改 :
// 功能描述 : 串行方式驅(qū)動(dòng)LCD12864
//
// 說明:
// ----------------------------------------------------------------
// GND——GND
// VCC——VCC(5V or 3.3V)
// V0 ——空(或者接一個(gè)可變電阻到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);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
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'); //個(gè)
Table[4] = '.'; //小數(shù)點(diǎn)
Table[5] = ((int)(Data * 100)/10%10+'0'); //小數(shù)點(diǎn)后一位
Table[6] = ((int)(Data * 100)%10+'0'); //小數(shù)點(diǎn)后兩位
while(1)
{
LcdDisplayString(0,0,"清時(shí)明月漢時(shí)關(guān)");
LcdDisplayString(1,0,"萬里長征人未還");
LcdDisplayString(2,0,"但使龍城飛將在");
LcdDisplayString(3,0,"不教胡馬度陰山");
DelayMs(1800); //最大延時(shí)不能超過2000
ClearLcdDisplay();
DelayMs(100);
LcdDisplayString(0,2,"顯示浮點(diǎn)數(shù)"); //第0行
LcdDisplayString(1,10,Table);
DelayMs(1800);
// ClearLcdDisplay(); //可不要,文字會(huì)覆蓋掉
// DelayMs(100);
}
}
復(fù)制代碼
所有資料51hei提供下載:
STM32串行模式驅(qū)動(dòng)LCD12864.7z
(191.21 KB, 下載次數(shù): 236)
2019-7-7 22:14 上傳
點(diǎn)擊文件名下載附件
代碼
下載積分: 黑幣 -5
作者:
zhang445465853
時(shí)間:
2019-7-9 11:13
學(xué)習(xí)了。
作者:
LIGHTING006
時(shí)間:
2019-8-2 17:41
謝謝了
作者:
1351952464
時(shí)間:
2019-11-30 23:54
謝謝樓主
作者:
1351952464
時(shí)間:
2019-11-30 23:54
開始學(xué)習(xí)了
作者:
kangp84
時(shí)間:
2020-6-14 08:36
厲害了!
作者:
hzd530
時(shí)間:
2020-6-15 09:56
感謝樓主分享!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1