首頁 > 評(píng)測(cè) > 【HC32L196PCTA測(cè)評(píng)】+點(diǎn)陣板顯示驅(qū)動(dòng)篇
【HC32L196PCTA測(cè)評(píng)】+點(diǎn)陣板顯示驅(qū)動(dòng)篇
- [導(dǎo)讀]
- #申請(qǐng)?jiān)瓌?chuàng)# @21小跑堂 在通常的情況下,我們所所用的顯示器件多是數(shù)碼管、液晶屏、OLED屏及TFT屏。但在公共場(chǎng)合要顯示信息,就要有較大尺寸以便觀察。通常多使用半板來拼接成較大的廣告牌,這里使用的是一款P4.75的
#申請(qǐng)?jiān)瓌?chuàng)# @21小跑堂
復(fù)制代碼
復(fù)制代碼
復(fù)制代碼
復(fù)制代碼
復(fù)制代碼
復(fù)制代碼
復(fù)制代碼
復(fù)制代碼
在通常的情況下,我們所所用的顯示器件多是數(shù)碼管、液晶屏、OLED屏及TFT屏。但在公共場(chǎng)合要顯示信息,就要有較大尺寸以便觀察。
通常多使用半板來拼接成較大的廣告牌,這里使用的是一款P4.75的紅色點(diǎn)陣板,其顯示分辨率為16*64像素點(diǎn)。

圖1 點(diǎn)陣屏外觀
該點(diǎn)陣屏采用的接口方式為HUB08,各引腳的名稱如圖2所示。

圖2 HUB08接口
該點(diǎn)陣屏與開發(fā)板的連接關(guān)系為:
A ----PE3
B ----PE4
C ----PE5
D ----PE2
R1 ----PA12
CLK----PA11
EN ----PE12
STB----PE11
所用引腳輸出高低電平的語句定義為:
#define LA_high Gpio_SetIO(GpioPortE, GpioPin3)
#define LA_low Gpio_ClrIO(GpioPortE, GpioPin3)
#define LB_high Gpio_SetIO(GpioPortE, GpioPin4)
#define LB_low Gpio_ClrIO(GpioPortE, GpioPin4)
#define LC_high Gpio_SetIO(GpioPortE, GpioPin5)
#define LC_low Gpio_ClrIO(GpioPortE, GpioPin5)
#define LD_high Gpio_SetIO(GpioPortE, GpioPin2)
#define LD_low Gpio_ClrIO(GpioPortE, GpioPin2)
#define LR1_high Gpio_SetIO(GpioPortA, GpioPin12)
#define LR1_low Gpio_ClrIO(GpioPortA, GpioPin12)
#define CLK_high Gpio_SetIO(GpioPortA, GpioPin11)
#define CLK_low Gpio_ClrIO(GpioPortA, GpioPin11)
#define LEN_high Gpio_SetIO(GpioPortE, GpioPin12)
#define LEN_low Gpio_ClrIO(GpioPortE, GpioPin12)
#define LSTB_high Gpio_SetIO(GpioPortE, GpioPin11)
#define LSTB_low Gpio_ClrIO(GpioPortE, GpioPin11)
所用引腳的初始化函數(shù)為:
- void dzb_GPIO_Init(void)
- {
- stc_gpio_cfg_t stcGpioCfg;
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
- stcGpioCfg.enDir = GpioDirOut;
- stcGpioCfg.enPu = GpioPuDisable;
- stcGpioCfg.enPd = GpioPdEnable;
- Gpio_Init(GpioPortA, GpioPin11, &stcGpioCfg);
- Gpio_Init(GpioPortA, GpioPin12, &stcGpioCfg);
- Gpio_Init(GpioPortE, GpioPin2, &stcGpioCfg);
- Gpio_Init(GpioPortE, GpioPin3, &stcGpioCfg);
- Gpio_Init(GpioPortE, GpioPin4, &stcGpioCfg);
- Gpio_Init(GpioPortE, GpioPin5, &stcGpioCfg);
- Gpio_Init(GpioPortE, GpioPin11, &stcGpioCfg);
- Gpio_Init(GpioPortE, GpioPin12, &stcGpioCfg);
- }
點(diǎn)陣板發(fā)送數(shù)據(jù)的函數(shù)為:
- void OutByte(uint16_t dat)
- {
- uint8_t i=0 ;
- for(i=0;i<16;i++)
- {
- CLK_low;
- if(dat&0x0001)
- {
- LR1_high;
- }
- else
- {
- LR1_low;
- }
- dat=dat>>1;
- CLK_high;
- }
- }
發(fā)送多列數(shù)據(jù)的函數(shù)為:
- void DisCol(uint16_t lenght)
- {
- uint16_t dat;
- uint8_t m=0;
- while(lenght--)
- {
- dat=(S[sj[m+1]*16+ScanRow]<<8)+S[sj[m]*16+ScanRow];
- OutByte(dat);
- m=m+2;
- }
- }
輸出行地址的函數(shù)為:
- void SeleRow(uint8_t Nd)
- {
- uint8_t N;
- N=Nd;
- N=N%16;
- if(N&0x01) LA_high;
- else LA_low;
- if (N&0x02) LB_high;
- else LB_low;
- if (N&0x04) LC_high;
- else LC_low;
- if (N&0x08) LD_high;
- else LD_low;
- }
實(shí)現(xiàn)顯示輸出的函數(shù)為:
- void Display(void)
- {
- DisCol(4);
- LEN_high;
- LSTB_high;
- LSTB_low;
- SeleRow(ScanRow);
- LEN_low;
- ScanRow++;
- if(ScanRow>15) ScanRow=0;
- }
為實(shí)現(xiàn)數(shù)字符號(hào)的顯示,以字模提取軟件所構(gòu)建的字庫存儲(chǔ)結(jié)構(gòu)為:
u8 S[]={
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"0",0*/
0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"1",1*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00,/*"2",2*/
...
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00,/*"9",9*/
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,/*":",10*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",11*/
};
實(shí)現(xiàn)顯示輸出效果的函數(shù)為:
- int32_t main(void)
- {
- dzb_GPIO_Init();
- ScanRow=0;
- while (1)
- {
- Display();
- delay1ms(1);
- }
- }
經(jīng)程序的編譯與下載,其顯示效果如圖3所示。

圖3顯示效果
在以上驅(qū)動(dòng)程序的基礎(chǔ)上,將測(cè)試的固定數(shù)值改為讀取字庫中的字模即可實(shí)現(xiàn)字符或漢字的顯示。
可通過工具軟件PCtoLCD2002來提取字模,并將字模存放到數(shù)組中,其格式為:
uint8_t tab[]={
0x00,0x00,0xF8,0x23,0x00,0x10,0x00,0x10,0x00,0x00,0xFC,0x07,0x20,0xF1,0x20,0x11,
0x20,0x11,0x20,0x11,0x24,0x11,0x24,0x12,0x24,0x12,0x1C,0x14,0x00,0x28,0xFE,0x47,/*"遠(yuǎn)",0*/
0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0xF8,0x03,0x00,0x02,
0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0xFE,0xFF,0x00,0x00,/*"上",1*/
0x00,0x02,0x00,0x01,0xFE,0x7F,0x42,0x44,0xF4,0x9F,0x40,0x04,0xF8,0x3F,0x40,0x04,
0xFE,0xFF,0x20,0x08,0x10,0x13,0x88,0x20,0x46,0xC0,0x00,0x06,0x80,0x01,0x40,0x00,/*"寒",2*/
0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,
0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0xF8,0x3F,0x08,0x00,0x00,0x00,/*"山",3*/
...
};
實(shí)現(xiàn)滿屏靜態(tài)顯示的函數(shù)為:
- void DisCol(int16_t lenght)
- {
- int16_t dat,n;
- int8_t m=0;
- while(lenght--)
- {
- dat=( tab [m*32+ScanRow*2+1]<<8)+ tab [m*32+ScanRow*2];
- OutBytep(dat);
- m=m+1;
- }
- }
其顯示的效果如圖4所示,說明顯示效果正確。

圖4 靜態(tài)顯示效果
若要實(shí)現(xiàn)向上滾屏顯示,則其顯示函數(shù)為:
- void DisColp(uint16_t lenght)
- {
- uint16_t dat,n;
- uint8_t m=0;
- while(lenght--)
- {
- n=(ScanRow+hang)%16;
- dat=( tab [m*32+n*2+1]<<8)+ tab [m*32+n*2];
- OutBytep(dat);
- m=m+1;
- }
- }

圖5 滾動(dòng)顯示效果
視頻演示:
-
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評(píng)論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
行業(yè)新聞
論壇活動(dòng)
more+
公開課
more+
項(xiàng)目外包
more+
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時(shí)前
- 12V汽車啟動(dòng)電源項(xiàng)目BMS設(shè)計(jì)
預(yù)算:¥50000023小時(shí)前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時(shí)前
- PLC項(xiàng)目調(diào)試修改
預(yù)算:¥100001天前
- 起動(dòng)電機(jī)控制器開發(fā)
預(yù)算:¥1100001天前