8*8 LED點(diǎn)陣模塊
之前我們使用MAX7219仿真驅(qū)動(dòng)了數(shù)碼管,
MAX7219驅(qū)動(dòng)數(shù)碼管(Proteus仿真)
手里恰好有一個(gè)MAX7219驅(qū)動(dòng)的8*8 LED點(diǎn)陣模塊,我們正好驗(yàn)證一下之前我們的驅(qū)動(dòng)文件實(shí)現(xiàn)的是否正確。
實(shí)現(xiàn)的效果類(lèi)似下面效果:
管腳順序
上圖為從正面觀看,如圖所示為共陰極點(diǎn)陣模塊
共陰共陽(yáng)一般區(qū)分方式:
- ①腳如果是公共正極,那就是共陽(yáng);
- 看絲印型號(hào),我買(mǎi)的是1088AS,為共陰,1088BS即為共陽(yáng)。
引腳排布
模塊原理圖
字模生成原理
點(diǎn)陣中每一行對(duì)應(yīng)一個(gè)字節(jié),8位。
點(diǎn)亮的LED--紅色,該位為1。
滅的LED--黑色,該位為0。
如果數(shù)字“0”在8*8的點(diǎn)陣中按下圖所示點(diǎn)亮,那么第一行對(duì)應(yīng)的字節(jié)就應(yīng)該為:0b00111100,16進(jìn)制即為0x3C。
同理,第二行對(duì)應(yīng)的字節(jié)為0x42。
由上分析,數(shù)字0的顯示編碼如下:{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C}
燒寫(xiě)程序,顯示效果如下:
我們可以用之前在OLED上顯示中文那個(gè)網(wǎng)文中使用的點(diǎn)陣生成軟件:PCtoLCD2002,自動(dòng)生成點(diǎn)陣。
不過(guò)在8*8點(diǎn)陣上顯示的字符很難看,這個(gè)軟件在這里使用不太合適。
在電梯中使用的點(diǎn)陣是 5*7的點(diǎn)陣,我們使用下面的軟件,手動(dòng)點(diǎn)擊生成對(duì)應(yīng)字符的編碼:
數(shù)字0對(duì)應(yīng)的編碼為:
/*這是“0”的字模;該字模由LEDDOT生成;字模的提取方式為:逐行提?。蛔帜5娘@示方式為:?jiǎn)巫謫涡酗@示;生成的字模格式:C51十六進(jìn)制 */
0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0
使用上面的軟件,設(shè)計(jì)待用字模如下:
u8 dispNum[8][8]={
{0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x0},//0
{0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x0},//1
{0x70,0x88,0x8,0x10,0x20,0x40,0xF8,0x0},//2
{0x70,0x88,0x8,0x30,0x8,0x88,0x70,0x0},//3
{0x10,0x30,0x50,0x90,0xF8,0x10,0x10,0x0},//4
{0xF8,0x80,0xF0,0x8,0x8,0x88,0x70,0x0},//5
{0x70,0x80,0x80,0xF0,0x88,0x88,0x70,0x0},//6
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//空白
};
u8 dispArrow[2][9]={
{0x0,0x20,0x70,0xA8,0x20,0x20,0x20,0x0,0x0},//向上箭頭
{0x0,0x20,0x20,0x20,0xA8,0x70,0x20,0x0,0x0},//向下箭頭
};
硬件接線
實(shí)現(xiàn)代碼
int main(void)
{
int nTimes = 0;
int i = 0;
int j = 0;
//延時(shí)函數(shù)初始化
delay_init();
delay_ms(50);
Max7219_Init();
while(1)
{
if(nTimes < 6)
{
for(i=1;i<=8;i++)
Write_Max7219(i,dispNum[nTimes][i-1]);
nTimes++;
delay_ms(1000);
}
else if(nTimes < 10) //閃爍
{
for(i=1;i<=8;i++)
Write_Max7219(i,dispNum[6][i-1]);
delay_ms(250);
for(i=1;i<=8;i++)
Write_Max7219(i,dispNum[7][i-1]);
delay_ms(100);
nTimes++;
}
else
{
//箭頭滾動(dòng)
for(i=0;i<70;i++)
{
for(j=1;j<=8;j++)
Write_Max7219(j,dispArrow[0][(j + i -1)%9]);
delay_ms(100);
}
nTimes = 0;
//最后顯示一幅向上箭頭
for(i=1;i<=8;i++)
Write_Max7219(i,dispArrow[0][(i -1)]);
//延時(shí)3秒,開(kāi)啟下一輪
delay_ms(1000); delay_ms(1000);delay_ms(1000);
}
}
}