學(xué)習(xí)目標(biāo)
- 字庫的創(chuàng)建與應(yīng)用
- 位移操作
- 動態(tài)顯示的應(yīng)用
電路搭建
所需材料
ArduinoUNO * 1
8 * 8點(diǎn)陣屏 * 1
杜邦線若干
電路連接
程序編寫:
練習(xí):點(diǎn)陣屏動態(tài)顯示數(shù)字
通過編寫程序,實(shí)現(xiàn)點(diǎn)陣屏動態(tài)顯示數(shù)字0~9。本節(jié)課內(nèi)容主要通過代碼的方式來進(jìn)行講解,圖形化由于在后續(xù)使用點(diǎn)陣屏模塊的時候會非常容易,所以不在這里贅述。
代碼方式:
/* 項(xiàng)目名稱:動態(tài)顯示數(shù)字
* 項(xiàng)目時間:2022.03.04
* 項(xiàng)目作者:MRX
*/
int leds[8] = {9, 14, 8, 12, 1, 7, 2, 5}; //點(diǎn)陣屏正極引腳
int gnds[8] = {13, 3, 4, 10, 6, 11, 15, 16}; //點(diǎn)陣屏負(fù)極引腳
char nums[] = {
0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, // -0-
0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, 0x00, // -1-
0x00, 0x46, 0x8A, 0x92, 0x92, 0x62, 0x00, 0x00, // -2-
0x00, 0x84, 0x82, 0x92, 0xB2, 0xCC, 0x00, 0x00, // -3-
0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, 0x00, // -4-
0x00, 0xE4, 0xA2, 0xA2, 0xA2, 0x9C, 0x00, 0x00, // -5-
0x00, 0x3C, 0x52, 0x92, 0x92, 0x8C, 0x00, 0x00, // -6-
0x00, 0x80, 0x8E, 0x90, 0xA0, 0xC0, 0x00, 0x00, // -7-
0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -8-
0x00, 0x62, 0x92, 0x92, 0x94, 0x78, 0x00, 0x00, // -9-
0x00, 0x3E, 0x48, 0x88, 0x48, 0x3E, 0x00, 0x00, // -A-
0x00, 0xFE, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -B-
0x00, 0x7C, 0x82, 0x82, 0x82, 0x44, 0x00, 0x00, // -C-
0x00, 0xFE, 0x82, 0x82, 0x82, 0x7C, 0x00, 0x00, // -D-
0x00, 0xFE, 0x92, 0x92, 0x92, 0x82, 0x00, 0x00, // -E-
0x00, 0xFE, 0x90, 0x90, 0x90, 0x80, 0x00, 0x00, // -F-
};
void ledclean()
{
for (int i = 0; i < 8; i++)//將點(diǎn)陣屏正極拉低,負(fù)極拉高,關(guān)斷顯示
{
digitalWrite(leds[i], LOW);
digitalWrite(gnds[i], HIGH);
}
}
//字符顯示
void ledShow(char num, char dat)
{
digitalWrite(gnds[num], LOW);
for (int i = 0; i < 8; i++)
{
digitalWrite(leds[i], dat & 0x80); // 1 0 0 0 0 0 0 0
dat < <= 1;
}
delayMicroseconds(100);
digitalWrite(gnds[num], HIGH);
ledclean();
}
void setup() {
for (int i = 0; i < 8; i++)
{
pinMode(leds[i], OUTPUT);
pinMode(gnds[i], OUTPUT);
digitalWrite(gnds[i], HIGH); //負(fù)極引腳拉高,熄滅所有LED
}
}
void loop() {
for (int a = 0; a < 10; a++) //控制流動顯示內(nèi)容
{
for (int i = 0 ; i < 200 ; i++)//循環(huán)顯示達(dá)到延時效果
{
for (int c = 0; c < 8; c++) //8列循環(huán)掃描,達(dá)到點(diǎn)陣屏驅(qū)動效果
{
ledShow(c, nums[c + a*8]);
}
}
}
}
程序分析:
上面這段程序?qū)崿F(xiàn)了在點(diǎn)陣屏上翻頁顯示數(shù)字09,雖然我們字庫按照十六進(jìn)制進(jìn)行了定義,但是這里根據(jù)要求,只需要09就可以了。
定義一個數(shù)組用于存儲需要顯示的字庫,每8個表示一個字符。
char nums[] = {
0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, // -0-
0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, 0x00, // -1-
0x00, 0x46, 0x8A, 0x92, 0x92, 0x62, 0x00, 0x00, // -2-
0x00, 0x84, 0x82, 0x92, 0xB2, 0xCC, 0x00, 0x00, // -3-
0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, 0x00, // -4-
0x00, 0xE4, 0xA2, 0xA2, 0xA2, 0x9C, 0x00, 0x00, // -5-
0x00, 0x3C, 0x52, 0x92, 0x92, 0x8C, 0x00, 0x00, // -6-
0x00, 0x80, 0x8E, 0x90, 0xA0, 0xC0, 0x00, 0x00, // -7-
0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -8-
0x00, 0x62, 0x92, 0x92, 0x94, 0x78, 0x00, 0x00, // -9-
0x00, 0x3E, 0x48, 0x88, 0x48, 0x3E, 0x00, 0x00, // -A-
0x00, 0xFE, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -B-
0x00, 0x7C, 0x82, 0x82, 0x82, 0x44, 0x00, 0x00, // -C-
0x00, 0xFE, 0x82, 0x82, 0x82, 0x7C, 0x00, 0x00, // -D-
0x00, 0xFE, 0x92, 0x92, 0x92, 0x82, 0x00, 0x00, // -E-
0x00, 0xFE, 0x90, 0x90, 0x90, 0x80, 0x00, 0x00, // -F-
};
這個數(shù)組,表示的是數(shù)字的字模。以數(shù)字3對應(yīng)的數(shù)據(jù)nums[0]{ 0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, },//0為例,包括有8個十六進(jìn)制的數(shù),每行一個十六進(jìn)制數(shù),并且換成二進(jìn)制的表示,會是什么樣的呢?
00000000 //0x00
01111100 //0x7C
10001010 //0x8A
10010010 //0x92
10100010 //0xA2
01111100 //0x7C
00000000 //0x00
00000000 //0x00
請看1出現(xiàn)的地方,可以借著鼠標(biāo)按1出現(xiàn)的軌跡跟著劃一劃,不就是一個橫著的數(shù)字0字型的輪廓么。
loop()中的三重for循環(huán): 最里面控制8列掃描顯示,中間for循環(huán)用于控制顯示時間,最外層for循環(huán)用于控制流動位置。
流動效果: 依次移動需要顯示的字符數(shù)據(jù),就達(dá)到了流動顯示效果??梢钥刂泼看我苿拥拈g距,當(dāng)每次移動8列就會實(shí)現(xiàn)整屏覆蓋的效果。
字符指針數(shù)據(jù)類型char: 指向了一個char類型的內(nèi)存單元,指針是編程語言中的一個對象,利用地址,它的值直接指向存在電腦存儲器中另一個地方的值。
dat<<=1: 即dat=dat<<1;,將dat變量左移1位后的值賦給dat,結(jié)果會改變dat變量的值。
dat & 0x80: 就是dat和10000000位相與,即把dat最高位置1,其它位不變。(這里的“&”是位邏輯運(yùn)算(一位一位的運(yùn)算)。)
-
led燈
+關(guān)注
關(guān)注
22文章
1593瀏覽量
109170 -
十六進(jìn)制
+關(guān)注
關(guān)注
2文章
32瀏覽量
38158 -
Arduino
+關(guān)注
關(guān)注
188文章
6485瀏覽量
189691 -
點(diǎn)陣屏
+關(guān)注
關(guān)注
4文章
71瀏覽量
32140 -
for循環(huán)
+關(guān)注
關(guān)注
0文章
61瀏覽量
2654
發(fā)布評論請先 登錄
相關(guān)推薦
LED顯示屏動態(tài)顯示和遠(yuǎn)程監(jiān)控的實(shí)現(xiàn)
關(guān)于單片機(jī)點(diǎn)陣動態(tài)顯示仿真
如何去實(shí)現(xiàn)LED顯示屏的動態(tài)顯示和控制?
LED點(diǎn)陣電路及其動態(tài)顯示系統(tǒng)的設(shè)計

如何實(shí)現(xiàn)LED點(diǎn)陣顯示屏的動態(tài)顯示和控制

如何實(shí)現(xiàn)LED顯示屏動態(tài)顯示和遠(yuǎn)程監(jiān)控的詳細(xì)資料說明

數(shù)碼管的靜態(tài)與動態(tài)顯示和74HC138及點(diǎn)陣的動態(tài)顯示詳細(xì)資料說明

LED顯示屏動態(tài)顯示和遠(yuǎn)程監(jiān)控的實(shí)現(xiàn)資料

如何使用單片機(jī)實(shí)現(xiàn)LED顯示屏動態(tài)顯示和遠(yuǎn)程監(jiān)控詳細(xì)方法說明

Micro LED AR顯示屏是全球最小最密集的動態(tài)顯示屏
基于Proteus與匯編語言的漢字點(diǎn)陣動態(tài)顯示

評論