學習目標
- 字庫的創(chuàng)建與應用
- 位移操作
- 動態(tài)顯示的應用
電路搭建
所需材料
ArduinoUNO * 1
8 * 8點陣屏 * 1
杜邦線若干
電路連接
程序編寫:
練習:點陣屏動態(tài)顯示數(shù)字
通過編寫程序,實現(xiàn)點陣屏動態(tài)顯示數(shù)字0~9。本節(jié)課內(nèi)容主要通過代碼的方式來進行講解,圖形化由于在后續(xù)使用點陣屏模塊的時候會非常容易,所以不在這里贅述。
代碼方式:
/* 項目名稱:動態(tài)顯示數(shù)字
* 項目時間:2022.03.04
* 項目作者:MRX
*/
int leds[8] = {9, 14, 8, 12, 1, 7, 2, 5}; //點陣屏正極引腳
int gnds[8] = {13, 3, 4, 10, 6, 11, 15, 16}; //點陣屏負極引腳
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++)//將點陣屏正極拉低,負極拉高,關斷顯示
{
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); //負極引腳拉高,熄滅所有LED
}
}
void loop() {
for (int a = 0; a < 10; a++) //控制流動顯示內(nèi)容
{
for (int i = 0 ; i < 200 ; i++)//循環(huán)顯示達到延時效果
{
for (int c = 0; c < 8; c++) //8列循環(huán)掃描,達到點陣屏驅(qū)動效果
{
ledShow(c, nums[c + a*8]);
}
}
}
}
程序分析:
上面這段程序?qū)崿F(xiàn)了在點陣屏上翻頁顯示數(shù)字09,雖然我們字庫按照十六進制進行了定義,但是這里根據(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對應的數(shù)據(jù)nums[0]{ 0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, },//0為例,包括有8個十六進制的數(shù),每行一個十六進制數(shù),并且換成二進制的表示,會是什么樣的呢?
00000000 //0x00
01111100 //0x7C
10001010 //0x8A
10010010 //0x92
10100010 //0xA2
01111100 //0x7C
00000000 //0x00
00000000 //0x00
請看1出現(xiàn)的地方,可以借著鼠標按1出現(xiàn)的軌跡跟著劃一劃,不就是一個橫著的數(shù)字0字型的輪廓么。
loop()中的三重for循環(huán): 最里面控制8列掃描顯示,中間for循環(huán)用于控制顯示時間,最外層for循環(huán)用于控制流動位置。
流動效果: 依次移動需要顯示的字符數(shù)據(jù),就達到了流動顯示效果。可以控制每次移動的間距,當每次移動8列就會實現(xiàn)整屏覆蓋的效果。
字符指針數(shù)據(jù)類型char: 指向了一個char類型的內(nèi)存單元,指針是編程語言中的一個對象,利用地址,它的值直接指向存在電腦存儲器中另一個地方的值。
dat<<=1: 即dat=dat<<1;,將dat變量左移1位后的值賦給dat,結(jié)果會改變dat變量的值。
dat & 0x80: 就是dat和10000000位相與,即把dat最高位置1,其它位不變。(這里的“&”是位邏輯運算(一位一位的運算)。)
-
led燈
+關注
關注
22文章
1602瀏覽量
110696 -
十六進制
+關注
關注
2文章
32瀏覽量
38740 -
Arduino
+關注
關注
190文章
6508瀏覽量
194668 -
點陣屏
+關注
關注
4文章
71瀏覽量
32438 -
for循環(huán)
+關注
關注
0文章
61瀏覽量
2822
發(fā)布評論請先 登錄
LED顯示屏動態(tài)顯示和遠程監(jiān)控的實現(xiàn)
關于單片機點陣動態(tài)顯示仿真
LED點陣電路及其動態(tài)顯示系統(tǒng)的設計

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

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

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

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

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

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

評論