硬件平臺
STM32開發板
功能實現
??在OLED屏上實現字符串滾動顯示。
??0.96寸OLED分辨率為128*64(128列,64行)。我們可以定義二維數組緩沖區buff[64][128],先將要顯示的數據放在緩沖驅動中,然后按固定頻率將數據更新到屏幕上。
示例效果
STM32驅動OLED屏滾動顯示


軟件設計
?顯示一列數據函數
/*
函數功能: 顯示一列
函數參數:
u8 x - 橫坐標位置
u8 y - 縱坐標位置
u8 size -字體大小
u8 *p - 源數據
說 明:保證縱向為8的倍數
取模方式:縱向取模,以8個點為單位進行取模,高位在前
*/
void OLED_DrawRecData2(u8 x,u8 y,u8 size,const u8 *p)
{
u8 y0=y; //保存y坐標
u8 i,j;
u8 data=0;
for(i=0;i
滾動顯示函數(左移顯示)
/******************************字符串滾動顯示****************************
**左移滾動顯示
** u8 x,u8 y --- 顯示的起始位置
** u8 size --- 字體大小
** u8 *p --- 需要滾動顯示的數據
** u8 number --- 要顯示的漢字個數
*******************************************************************/
void OLED_Left_Move_Display(u8 x,u8 y,u8 size,u8 *p,u8 number)
{
int x0=x;//顯示的起始位置
int i=0;
u8 *data=p;
u16 cnt=0,offset=0;
while(1)
{
for(cnt=0,i=x0;i<128;i++)
{
OLED_DrawRecData2(i,y,size,data+cnt);//顯示一列
cnt+=size/8;//一列的偏移量
}
OLED_RefreshGRAM(); //更新一次顯示
x0--;//左移顯示
if(x0<=0)//完整顯示完一行數據
{
x0=0;
data+=size/8;//數據的起始位置往后移動
}
offset++;
if(offset>=number*size+128)//保存顯示的數據完整滾動完一遍
{
offset=0; //歸位
x0=x;
data=p;//數據地址歸位
}
}
}
主函數
/*測試數據: 縱向取模,以8個點為單位進行取模,高位在前*/
u8 font_test2[28][32]=
{
{0x20,0x08,0x24,0x10,0x22,0x60,0x21,0x80,0x26,0x41,0x39,0x32,0x02,0x04,0x0C,0x18,0xF0,0x60,0x13,0x80,0x10,0x60,0x10,0x18,0x14,0x04,0x18,0x02,0x00,0x01,0x00,0x00},/*"歡",0*/
{0x02,0x00,0x02,0x02,0x42,0x04,0x33,0xF8,0x00,0x04,0x00,0x02,0x3F,0xF2,0x20,0x22,0x40,0x42,0x00,0x02,0x3F,0xFE,0x20,0x42,0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00},/*"迎",1*/
{0x00,0x84,0x10,0x84,0x10,0x88,0x14,0x88,0x13,0x90,0x10,0xA0,0x10,0xC0,0xFF,0xFF,0x10,0xC0,0x10,0xA0,0x11,0x90,0x16,0x88,0x10,0x88,0x10,0x84,0x00,0x84,0x00,0x00},/*"來",2*/
{0x20,0x01,0x20,0x02,0x20,0x04,0x20,0x18,0x20,0x60,0x3F,0x80,0x22,0x00,0x22,0x00,0x22,0x02,0x22,0x01,0x22,0x02,0x23,0xFC,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00},/*"萬",3*/
{0x10,0x41,0x12,0x42,0x12,0x44,0x12,0x58,0xFF,0xE0,0x12,0x40,0x12,0x40,0x10,0x40,0x00,0x00,0x7F,0xFF,0x40,0x10,0x44,0x08,0x5B,0x10,0x60,0xE0,0x00,0x00,0x00,0x00},/*"邦",4*/
{0x00,0x00,0x00,0x10,0x00,0x20,0x00,0x42,0xFE,0xC4,0x93,0x48,0x92,0x71,0x92,0x42,0x92,0x4C,0x92,0x70,0x92,0x42,0xFE,0x41,0x00,0x42,0x00,0x7C,0x00,0x00,0x00,0x00},/*"易",5*/
{0x01,0x00,0x01,0x00,0x77,0xFE,0x11,0x24,0x11,0x24,0x11,0x24,0x17,0xFE,0xF1,0x00,0x10,0x81,0x11,0x02,0x1E,0x0C,0x12,0xF0,0x72,0x0C,0x02,0x82,0x03,0x01,0x00,0x00},/*"嵌",6*/
{0x02,0x20,0x0C,0x20,0x88,0x20,0x69,0x20,0x09,0x20,0x09,0x22,0x89,0x21,0x69,0x7E,0x09,0x60,0x09,0xA0,0x19,0x20,0x28,0x20,0xC8,0x20,0x0A,0x20,0x0C,0x20,0x00,0x00},/*"學",7*/
{0x00,0x00,0x40,0x10,0x40,0x18,0x40,0x10,0x48,0x20,0x44,0x20,0x43,0x20,0x40,0x40,0x40,0x40,0x40,0x82,0x40,0x81,0x40,0x02,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00},/*"習",8*/
{0x01,0x00,0x01,0x00,0x77,0xFE,0x11,0x24,0x11,0x24,0x11,0x24,0x17,0xFE,0xF1,0x00,0x10,0x81,0x11,0x02,0x1E,0x0C,0x12,0xF0,0x72,0x0C,0x02,0x82,0x03,0x01,0x00,0x00},/*"嵌",9*/
{0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x30,0x80,0xC0,0x47,0x00,0x38,0x00,0x07,0x00,0x00,0xC0,0x00,0x30,0x00,0x0C,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x00},/*"入",10*/
{0x08,0x00,0x08,0x04,0x09,0x06,0x09,0x04,0x09,0xFC,0x09,0x08,0x09,0x08,0x08,0x08,0x08,0x00,0xFF,0xC0,0x08,0x30,0x08,0x08,0x88,0x04,0x68,0x02,0x08,0x1F,0x00,0x00},/*"式",11*/
{0x01,0x00,0x41,0x01,0x41,0x02,0x41,0x0C,0x7F,0xF0,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7F,0xFF,0x41,0x00,0x41,0x00,0x41,0x00,0x01,0x00,0x00,0x00},/*"開",12*/
{0x00,0x00,0x00,0x04,0x18,0x08,0x68,0x31,0x08,0xC1,0x0B,0x01,0x1D,0x82,0xE9,0x62,0x09,0x14,0x09,0x08,0x09,0x14,0x49,0x22,0x29,0xC2,0x08,0x01,0x00,0x01,0x00,0x00},/*"發",13*/
};
int main(void)
{
u8 *p;
BEEP_Init(); //初始化蜂鳴器
LED_Init(); //初始化LED燈
KEY_Init(); //初始化按鍵
USART1_Init(115200); //初始化串口1
OLED_Init(); //OLED顯示屏初始化
OLED_Clear(0x00); //清屏
p=font_test2[0]; //要顯示的字符串
while(1)
{
OLED_Left_Move_Display(127,10,16,p,14);//滾動顯示
}
}
結論:0.96寸OLED屏硬件自帶滾動顯示效果,但使用OLED屏硬件方式實現滾動無法靈活顯示,采用軟件方式實現滾動顯示更加靈活便捷。
審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
STM32
+關注
關注
2309文章
11162瀏覽量
373399 -
OLED屏
+關注
關注
0文章
164瀏覽量
22036 -
滾動顯示
+關注
關注
0文章
10瀏覽量
5805
發布評論請先 登錄
相關推薦
熱點推薦
深入剖析LM3509:高效白光LED與OLED顯示驅動器
深入剖析LM3509:高效白光LED與OLED顯示驅動器 在當今的電子設備中,顯示屏的質量和性能至關重要。無論是智能手機、平板電腦還是其他便攜式設備,都需要高效穩定的LED和
使用硬件SPI1輪詢模式來實現驅動OLED顯示屏
此篇介紹使用硬件SPI1輪詢模式來實現驅動OLED顯示屏硬件連接
GND ——GND
VCC ——3.3V
DO——PA5
DI——PA7
RES ——PB1
DC——PB0
CS——PA4
軟件
發表于 01-27 12:36
使用硬件I2C2輪詢模式來實現驅動OLED顯示屏
此篇介紹使用硬件I2C2輪詢模式來實現驅動OLED顯示屏
硬件連接
GND——GND
VCC——3.3V
SCL——PA1
SDA——PA2
軟件代碼
I2C2配置:
復制
//I2C初始化
發表于 12-04 06:27
蜂鳥E203驅動OLED顯示
利用GPIO模擬IIC驅動4pin的OLED顯示字符,開發平臺為芯來官方IDE。
不想寫過程,上傳整個工程文件,主要代碼如下:
下載:led
發表于 10-31 06:08
【RA4M2-SENSOR】+OLED屏顯示驅動
RA4M2-SENSOR開發板是一款近于最小系統的開發板,通過添加相應的外設,可豐富其功能。
這里就為它配置一個I2C接口的OLED屏,驅動OLED
發表于 09-02 18:28
【RA-Eco-RA6M4開發板評測】點亮OLED顯示屏
));
OLED_SSD1306_WritenB(0x40, img, w);
img+=w;
}
}
【動態OLED顯示屏】
驅動 OLED
發表于 08-31 10:25
【RA-Eco-RA6M4開發板評測】+OLED屏顯示驅動
SDIN------P209
在使用I2C進行硬件驅動前,先以模擬的方式來驅動該顯示屏。
在程序設計前,需使用RASC對所用引腳加以配置,以是其作為GPIO口來使用。
然后,在回到KEIL中進
發表于 07-23 17:33
液晶顯示屏背光驅動設計的核心要點
在液晶顯示屏的世界里,無論是信息清晰的單色屏還是色彩絢麗的彩色屏,背光都是其視覺呈現的靈魂。然而,背光驅動絕非簡單的“通電即亮”。忽視設計細節,輕則導致亮度不均、用戶體驗打折,重則縮短
從設計到市場:如何利用冠顯0.39" Micro OLED顯示解決方案快速實現產品開發?
冠顯0.39" Micro OLED顯示解決方案主要包括0.39" 顯示屏、FPC及驅動板,是TV系列中最小巧緊湊的一款,其
冠顯光電0.6"HDMI 單目驅動板方案,加速微顯示方案落地
該方案主要包括0.6”硅基顯示屏,HDMI單目顯示屏驅動板。驅動板以 Micro HDMI 接口為視頻數據傳輸接口,可用于 TDO 硅基產品
Techwiz OLED應用:透明顯示
如今,透明顯示器作為未來的顯示技術之一已經引起了廣泛的關注。特別是,使用OLED器件的透明顯示器已被積極研究。TechWiz OLED的發光
發表于 03-17 11:35
STM32驅動OLED屏設計方案完成漢字滾動顯示
評論