本文適合初級入門的同學(xué),大佬請繞道。講解怎么用stm32驅(qū)動成品LED點陣屏顯示一副七色無灰度的圖片,有灰度的圖片可以入門后繼續(xù)研究。
?
使用軟硬件:
軟件:Keil5,程序在后面會給出
硬件:STM32F103最小系統(tǒng)、全彩色P4LED點陣屏(HUB75接口,16掃)
說下stm32驅(qū)動LED點陣屏用途:
可以自己做些東西玩,比如日期時鐘、音樂頻譜、一些滾動字幕;
商業(yè)用途,開發(fā)控制器,結(jié)合各種傳感器,LED點陣屏幕顯示數(shù)據(jù);
開始正題。
本文中使用的是STM32F103C8T6最小系統(tǒng),這個估計在看的同學(xué)都有了。另外用到主角是LED點陣屏,本文使用的是一張全彩色P4LED點陣屏,接口是HUB75,掃描是1/16掃,這些參數(shù)不懂沒關(guān)系,只要點陣屏買對了不影響學(xué)習(xí)。
這種成品的點陣屏是行、列驅(qū)動的方式,行驅(qū)動用38類譯碼器,列驅(qū)動用普通16路恒流驅(qū)動芯片(比如:sm16206s、fm6024、icn2038等等特別多,這類芯片是串行數(shù)據(jù)的)。比如本文用到的P4點陣屏是64*32點陣的,用到4個38譯碼器,R、G、B各4個sm16206s恒流芯片。
這里說下R、G、B。R指的是紅色,G是綠色,B是藍色。全彩色點陣屏是將RGB三種顏色燈封裝在一個燈珠里,給對應(yīng)的引腳供電即可顯示相應(yīng)的顏色,具體怎么驅(qū)動我們不需要了解,因為每種顏色有一個恒流芯片,我們控制芯片就好了。R、G同時亮我們就看到黃色;R、B同時亮我們就看到紫色;G、B同時亮我們就看到青色;加上R、G、B三色就是常說的七彩。
說一下HUB75接口,如下圖。A、B、C、D、E是行信號,其中E信號在小于等于16掃時不需要;CLK(有的板也寫作SCLK)是時鐘信號;LE(有的板也寫作LAT)是數(shù)據(jù)鎖存信號);OE是使能信號;R1,G1,B1和R2,G2,B2是兩組數(shù)據(jù)信號;
我們結(jié)合代碼講解一下顯示過程:
下面是LED的顯示函數(shù)。
//打點函數(shù)
void LED_Display(void)
{
static uint8_t i,j;
LED_D(j&0x8);
LED_C(j&0x4);
LED_B(j&0x2);
LED_A(j&0x1);
for(i=0;i<LED_Width;i++)
{
//上半部16行
LED_R1(LED_Buffer[i][(LED_Height-1)-j]&0x1);
LED_G1(LED_Buffer[i][(LED_Height-1)-j]&0x2);
LED_B1(LED_Buffer[i][(LED_Height-1)-j]&0x4);
//下半部16行
LED_R2(LED_Buffer[i][(LED_Height/2-1)-j]&0x1);
LED_G2(LED_Buffer[i][(LED_Height/2-1)-j]&0x2);
LED_B2(LED_Buffer[i][(LED_Height/2-1)-j]&0x4);
LED_CLK(1);
LED_CLK(0); //寫入數(shù)據(jù)
}
LED_LAT(1);
LED_LAT(0); //鎖存
LED_OE(0); //顯示
Delay_us(100); //顯示停留時間,可以試著調(diào)這個值
LED_OE(1);
j++;
j%=16;
}
//將圖片的取模數(shù)組Disp64x32存入顯存數(shù)組LED_Buffer
void Display_ShowPicture(uint8_t X,uint8_t Y,uint8_t W,uint8_t H,uint8_t Color)
{
uint8_t i,j;
for(i=0;i<H;i++)//32
{
for(j=0;j<W;j++)//64
{
/* LED_Buffer[x][y]中xy指的是屏幕的橫縱坐標 */
LED_Buffer[W-1-j][H-1-i]=(Disp64x32[i][7-(j)/8]&(0x01<<(j)%8))?Color:0x00;
}
}
}
int main(void)
{
u8 flag;
LED_Init();
Display_ShowPicture(0,0,64,32,0x06/*綠+藍*/);
while (1)
{
LED_Display();
}
}
其中下面這部分是用來選擇行的。
LED_D(j&0x8);
LED_C(j&0x4);
LED_B(j&0x2);
LED_A(j&0x1);
...
...
j++;
j%=16;
LED_Buffer[LED_Width][LED_Height]這個數(shù)組就是我們要顯示的圖片對應(yīng)顯存數(shù)組,它與點陣屏上的像素點是一一對應(yīng)的(數(shù)據(jù)倒著存放是為了運算方便)。
我們用單片機控制點陣屏使用的是行掃描的方式,我們對這種方式并不陌生,學(xué)51單片機時控制LED數(shù)碼管顯示也是用的這種方式。先選擇某一行,然后將這一行的顯示數(shù)據(jù)分別發(fā)送給恒流芯片(串行的),接著鎖存、顯示(都是低電平有效)。
LED_LAT(1);
LED_LAT(0); //鎖存
LED_OE(0); //顯示
Delay_us(100); //顯示停留時間,可以試著調(diào)這個值
LED_OE(1);
通過調(diào)整OE信號低電平持續(xù)時間可以改變點陣屏的亮度。
經(jīng)過以上程序,就可以將取模后的圖片顯示在LED點陣屏上。
總結(jié):
本文是入門教程,但仍然基于在看同學(xué)會stm32單片機配置和使用,會C語言。
完整程序下載:STM32F103驅(qū)動LED點陣屏P5全彩色HUB75接口_hub75接口定義-單片機文檔類資源-CSDN下載
也可以群文件中免費下載(676606232)文章來源:http://www.zghlxwxcb.cn/news/detail-803840.html
程序適用的LED點陣屏必須是普通恒流驅(qū)動芯片,38類譯碼器,1/16掃描,HUB75接口的屏幕,請同學(xué)們向商家問清楚。文章來源地址http://www.zghlxwxcb.cn/news/detail-803840.html
到了這里,關(guān)于[入門教程]詳細講解STM32控制LED點陣屏(HUB75接口)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!