學(xué)習(xí)目標(biāo)
- 字庫的創(chuàng)建與應(yīng)用
- 位移操作
- 動(dòng)態(tài)顯示的應(yīng)用
電路搭建
所需材料
ArduinoUNO * 1
8 * 8點(diǎn)陣屏 * 1
杜邦線若干
電路連接
程序編寫:
練習(xí):點(diǎn)陣屏動(dòng)態(tài)顯示數(shù)字
通過編寫程序,實(shí)現(xiàn)點(diǎn)陣屏動(dòng)態(tài)顯示數(shù)字0~9。本節(jié)課內(nèi)容主要通過代碼的方式來進(jìn)行講解,圖形化由于在后續(xù)使用點(diǎn)陣屏模塊的時(shí)候會非常容易,所以不在這里贅述。
代碼方式:
/* 項(xiàng)目名稱:動(dòng)態(tài)顯示數(shù)字
* 項(xiàng)目時(shí)間: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++) //控制流動(dòng)顯示內(nèi)容
{
for (int i = 0 ; i < 200 ; i++)//循環(huán)顯示達(dá)到延時(shí)效果
{
for (int c = 0; c < 8; c++) //8列循環(huán)掃描,達(dá)到點(diǎn)陣屏驅(qū)動(dòng)效果
{
ledShow(c, nums[c + a*8]);
}
}
}
}
程序分析:
上面這段程序?qū)崿F(xiàn)了在點(diǎn)陣屏上翻頁顯示數(shù)字09,雖然我們字庫按照十六進(jìn)制進(jìn)行了定義,但是這里根據(jù)要求,只需要09就可以了。
定義一個(gè)數(shù)組用于存儲需要顯示的字庫,每8個(gè)表示一個(gè)字符。
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-
};
這個(gè)數(shù)組,表示的是數(shù)字的字模。以數(shù)字3對應(yīng)的數(shù)據(jù)nums[0]{ 0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, },//0為例,包括有8個(gè)十六進(jìn)制的數(shù),每行一個(gè)十六進(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)的軌跡跟著劃一劃,不就是一個(gè)橫著的數(shù)字0字型的輪廓么。
loop()中的三重for循環(huán): 最里面控制8列掃描顯示,中間for循環(huán)用于控制顯示時(shí)間,最外層for循環(huán)用于控制流動(dòng)位置。
流動(dòng)效果: 依次移動(dòng)需要顯示的字符數(shù)據(jù),就達(dá)到了流動(dòng)顯示效果??梢钥刂泼看我苿?dòng)的間距,當(dāng)每次移動(dòng)8列就會實(shí)現(xiàn)整屏覆蓋的效果。
字符指針數(shù)據(jù)類型char: 指向了一個(gè)char類型的內(nèi)存單元,指針是編程語言中的一個(gè)對象,利用地址,它的值直接指向存在電腦存儲器中另一個(gè)地方的值。
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文章
1592瀏覽量
108467 -
十六進(jìn)制
+關(guān)注
關(guān)注
2文章
32瀏覽量
37854 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187978 -
點(diǎn)陣屏
+關(guān)注
關(guān)注
4文章
71瀏覽量
32002 -
for循環(huán)
+關(guān)注
關(guān)注
0文章
61瀏覽量
2550
發(fā)布評論請先 登錄
相關(guān)推薦
LED顯示屏動(dòng)態(tài)顯示和遠(yuǎn)程監(jiān)控的實(shí)現(xiàn)
關(guān)于單片機(jī)點(diǎn)陣動(dòng)態(tài)顯示仿真
如何去實(shí)現(xiàn)LED顯示屏的動(dòng)態(tài)顯示和控制?
LED點(diǎn)陣顯示牌的設(shè)計(jì)與動(dòng)態(tài)顯示控制
![LED<b class='flag-5'>點(diǎn)陣</b><b class='flag-5'>顯示</b>牌的設(shè)計(jì)與<b class='flag-5'>動(dòng)態(tài)顯示</b>控制](https://file.elecfans.com/web2/M00/48/85/pYYBAGKhtAuAEE1FAAAhQAsLp6k069.jpg)
MIN數(shù)碼管動(dòng)態(tài)顯示
LED點(diǎn)陣電路及其動(dòng)態(tài)顯示系統(tǒng)的設(shè)計(jì)
![LED<b class='flag-5'>點(diǎn)陣</b>電路及其<b class='flag-5'>動(dòng)態(tài)顯示</b>系統(tǒng)的設(shè)計(jì)](https://file.elecfans.com/web2/M00/49/6D/poYBAGKhwLKAAqJDAABavg4obSQ299.png)
如何實(shí)現(xiàn)LED點(diǎn)陣顯示屏的動(dòng)態(tài)顯示和控制
![如何實(shí)現(xiàn)LED<b class='flag-5'>點(diǎn)陣</b><b class='flag-5'>顯示屏</b>的<b class='flag-5'>動(dòng)態(tài)顯示</b>和控制](https://file.elecfans.com/web1/M00/7E/75/o4YBAFwZrWCAeHncAACN6FddJqg437.jpg)
如何實(shí)現(xiàn)LED顯示屏動(dòng)態(tài)顯示和遠(yuǎn)程監(jiān)控的詳細(xì)資料說明
![如何實(shí)現(xiàn)LED<b class='flag-5'>顯示屏</b><b class='flag-5'>動(dòng)態(tài)顯示</b>和遠(yuǎn)程監(jiān)控的詳細(xì)資料說明](https://file.elecfans.com/web1/M00/89/9C/pIYBAFyKBJWAFobyAAJ_17fP7LI433.png)
數(shù)碼管的靜態(tài)與動(dòng)態(tài)顯示和74HC138及點(diǎn)陣的動(dòng)態(tài)顯示詳細(xì)資料說明
![數(shù)碼管的靜態(tài)與<b class='flag-5'>動(dòng)態(tài)顯示</b>和74HC138及<b class='flag-5'>點(diǎn)陣</b>的<b class='flag-5'>動(dòng)態(tài)顯示</b>詳細(xì)資料說明](https://file.elecfans.com/web1/M00/8D/F8/o4YBAFywNR-ACanVAAFAuBWKbVg625.png)
LED顯示屏動(dòng)態(tài)顯示和遠(yuǎn)程監(jiān)控的實(shí)現(xiàn)資料
![LED<b class='flag-5'>顯示屏</b><b class='flag-5'>動(dòng)態(tài)顯示</b>和遠(yuǎn)程監(jiān)控的實(shí)現(xiàn)資料](https://file.elecfans.com/web1/M00/A4/E5/o4YBAF1o5mSAQLMCAAHN5s4uei8682.png)
如何使用單片機(jī)實(shí)現(xiàn)LED顯示屏動(dòng)態(tài)顯示和遠(yuǎn)程監(jiān)控詳細(xì)方法說明
![如何使用單片機(jī)實(shí)現(xiàn)LED<b class='flag-5'>顯示屏</b><b class='flag-5'>動(dòng)態(tài)顯示</b>和遠(yuǎn)程監(jiān)控詳細(xì)方法說明](https://file.elecfans.com/web1/M00/AE/05/o4YBAF3VAfWAJFqDAAH4XH4KIy4102.png)
Micro LED AR顯示屏是全球最小最密集的動(dòng)態(tài)顯示屏
基于Proteus與匯編語言的漢字點(diǎn)陣動(dòng)態(tài)顯示
![基于Proteus與匯編語言的漢字<b class='flag-5'>點(diǎn)陣</b><b class='flag-5'>動(dòng)態(tài)顯示</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論