FireBeetle 24×8 LED點(diǎn)陣屏是螢火蟲(chóng)系列的配件產(chǎn)品,與常規(guī)點(diǎn)陣屏不同的是它直接用LED發(fā)光二極管來(lái)構(gòu)建顯示陣列,而非用點(diǎn)陣模塊來(lái)構(gòu)建。
為了節(jié)省I/O口,該點(diǎn)陣屏是采用高性能的LED驅(qū)動(dòng)芯片HT1632C來(lái)進(jìn)行控制。對(duì)每個(gè)LED都有獨(dú)立的寄存器,故可分別驅(qū)動(dòng)每個(gè)LED燈。它內(nèi)置了256KHz的RC時(shí)鐘,在低功耗模式下,可關(guān)閉RC時(shí)鐘,使功耗僅為5uA。
點(diǎn)陣屏的外觀如圖1和圖2所示,盡管顯示屏的引腳較多,但在使用時(shí)所涉及的引腳并不很多。
點(diǎn)陣屏的性能如下:
· 工作電壓:3.3V· 顯示顏色:白色· HT1632C驅(qū)動(dòng)芯片· 內(nèi)置256KHzRC時(shí)鐘· 低功耗:5uA· 工作電流:6mA~100mA· 串行數(shù)據(jù)通信· 支持Arduino庫(kù)· 支持滾屏顯示· 接口方式:FireBeetle系列兼容· 工作溫度:-40℃~+85℃· 模塊尺寸:24 ×58(mm)/0.94 x 2.28(inches)· 安裝孔尺寸:內(nèi)徑3.1mm/外徑6mm
要驅(qū)動(dòng)該點(diǎn)陣屏有2種方式,一種是以常規(guī)的Arduino開(kāi)發(fā)板來(lái)驅(qū)動(dòng),另一種則是以ESP32-E Arduino開(kāi)發(fā)板來(lái)驅(qū)動(dòng)。
對(duì)于常規(guī)的Arduino開(kāi)發(fā)板驅(qū)動(dòng),在使用前安裝對(duì)應(yīng)的FireBeetleLEDMatrix-master庫(kù),安裝后即可見(jiàn)到對(duì)應(yīng)庫(kù)以供使用。
若以ESP32-EArduino開(kāi)發(fā)板來(lái)驅(qū)動(dòng),則無(wú)法直接進(jìn)行編譯和上傳,為此只好以I/O口驅(qū)來(lái)編程實(shí)現(xiàn)。
按點(diǎn)陣屏的原理圖可知,為了便于使用片選信號(hào)CS是可供選擇的,選擇的對(duì)象可以是CS1~CS4中的任意一個(gè),選取時(shí)只需將S1對(duì)應(yīng)的開(kāi)關(guān)接通即可。而CS1~CS4所對(duì)應(yīng)的引腳則是D2~D5,編程時(shí)是以A4來(lái)控制串行。
圖8 點(diǎn)陣屏片選控制
圖9 片選開(kāi)關(guān)
為此,點(diǎn)陣屏與開(kāi)發(fā)板的連接關(guān)系定義為:
#define cs1 A4#define rd D3#define wr D7#define dat D2
實(shí)現(xiàn)HT1632C初始化的函數(shù)為:
void HT1632C_Init(void){ digitalWrite(cs1, HIGH); #define SYS_DIS 0x00 //關(guān)閉系統(tǒng)震蕩 #define SYS_EN 0x01 //打開(kāi)系統(tǒng)震蕩 #define LED_OFF 0x02 //關(guān)閉LED顯示 #define LED_ON 0x03 //打開(kāi)LED顯示 #define BLINK_OFF 0x08 //關(guān)閉閃爍 #define BLINK_ON 0x09 //打開(kāi)閃爍 #define SLAVE_MODE 0x10 //從模式 #define RC_MASTER_MODE 0x18 //內(nèi)部RC時(shí)鐘 #define COM_OPTION 0x24 //24:16COM,NMOS。C:COM,PMOS。 #define PWM_DUTY 0xAE //PWM亮度控制 digitalWrite(wr, HIGH); digitalWrite(dat, HIGH); HT1632C_Write_CMD(SYS_DIS); //關(guān)閉HT1632C內(nèi)部RC時(shí)鐘 HT1632C_Write_CMD(COM_OPTION); //選擇HT1632C工作模式,COM,NMOS模式 HT1632C_Write_CMD(RC_MASTER_MODE); //選擇內(nèi)部RC時(shí)鐘 HT1632C_Write_CMD(SYS_EN); //打開(kāi)HT1632C內(nèi)部RC時(shí)鐘 HT1632C_Write_CMD(PWM_DUTY); //PWM亮度設(shè)置 HT1632C_Write_CMD(BLINK_OFF); //關(guān)閉閃爍 HT1632C_Write_CMD(LED_ON); //打開(kāi)LED顯示}
實(shí)現(xiàn)清屏處理的函數(shù)為:
void HT1632C_clr(void){ unsigned char i; digitalWrite(cs1, LOW); HT1632C_Write(0xa0,3); HT1632C_Write(0x00,7); for(i=0;i《48;i++) HT1632C_Write(0,8); digitalWrite(cs1, HIGH);}
向HT1632C發(fā)送數(shù)據(jù)的函數(shù)為:
voidHT1632C_Write(unsigned char Data,unsigned char cnt){ unsigned char i; for(i=0;i《cnt;i++) { digitalWrite(wr, LOW); if(Data & 0x80) digitalWrite(dat, HIGH); else digitalWrite(dat, LOW); Data《《=1; digitalWrite(wr, HIGH); }}
向HT1632 C寫(xiě)入命令的函數(shù)為:
void HT1632C_Write_CMD(unsignedchar cmd){digitalWrite(cs1, LOW);HT1632C_Write(0x80,3);HT1632C_Write(cmd,9);digitalWrite(cs1, HIGH);}
向HT1632 C寫(xiě)入數(shù)據(jù)的函數(shù)為:
void HT1632C_Write_DATA(unsignedchar Addr,unsigned char p,unsigned char cnt){ unsigned char i; digitalWrite(cs1, LOW); HT1632C_Write(0xa0,3); HT1632C_Write(Addr《《1,7); for(i=0;i《cnt;i++) { HT1632C_Write(p,8); } digitalWrite(cs1, HIGH);}
實(shí)現(xiàn)顯示效果的配置程序?yàn)椋?/p>
void setup() { unsigned char temp=0xAA; pinMode(LED_BUILTIN, OUTPUT); pinMode(cs1, OUTPUT); pinMode(rd, OUTPUT); pinMode(wr, OUTPUT); pinMode(dat,OUTPUT); HT1632C_Init(); HT1632C_clr(); HT1632C_Write_DATA(0x00,temp,48);}
經(jīng)程序的編譯與上傳,其界面如圖11所示。
圖11 完成程序上傳
實(shí)現(xiàn)圖12所示三角形繪制的程序如下:
{ unsigned char i,b; digitalWrite(cs1, LOW); HT1632C_Write(0xa0,3); HT1632C_Write(0x00,7); b=1; for(i=0;i《24;i++) { if(i%8==0) b=1; else b=(b《《1)+1; HT1632C_Write(b,8); HT1632C_Write(b,8); } digitalWrite(cs1, HIGH);}
圖12繪制三角形
實(shí)現(xiàn)圖13所示數(shù)值顯示的程序如下:
voidsetup() { unsigned char temp=0xFF; pinMode(LED_BUILTIN, OUTPUT); pinMode(cs1, OUTPUT); pinMode(rd, OUTPUT); pinMode(wr, OUTPUT); pinMode(dat,OUTPUT); HT1632C_Init(); HT1632C_clr(); HT1632C_Write_C(58,8); HT1632C_Write_C(26,6); HT1632C_Write_C(26,4);}
對(duì)于的字符顯示函數(shù)為:
voidHT1632C_Write_C(unsigned char Addr,unsigned char p){ unsigned char i; digitalWrite(cs1, LOW); HT1632C_Write(0xa0,3); //ID:101 HT1632C_Write(Addr《《1,7); for(i=0;i《8;i++) { HT1632C_Write(dot[p*8-i],8); HT1632C_Write(dot[p*8-i],8); } digitalWrite(cs1, HIGH);}
圖13 數(shù)值顯示
所使用的字模由工具軟件PCtoLCD2002來(lái)提取,其提取的格式定義如圖15所示。
圖14字模提取
圖15字模格式定義
相應(yīng)的字庫(kù)格式為:
unsignedchar dot[]= {0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,/*“0”,0*/0x00,0x48,0x48,0x7C,0x40,0x40,0x00,0x00,/*“1”,1*/0x00,0x48,0x64,0x64,0x64,0x54,0x6C,0x00,/*“2”,2*/0x00,0x28,0x44,0x4C,0x4C,0x54,0x34,0x00,/*“3”,3*/0x00,0x10,0x28,0x24,0x64,0x7E,0x00,0x00,/*“4”,4*/0x00,0x3C,0x54,0x54,0x54,0x54,0x24,0x00,/*“5”,5*/0x00,0x38,0x54,0x54,0x54,0x54,0x20,0x00,/*“6”,6*/0x00,0x0C,0x04,0x74,0x14,0x0C,0x04,0x00,/*“7”,7*/0x00,0x2C,0x54,0x54,0x54,0x54,0x2C,0x00,/*“8”,8*/0x00,0x08,0x54,0x54,0x54,0x74,0x38,0x00,/*“9”,9*/};
這樣我們要驅(qū)動(dòng)FireBeetle 24×8 LED點(diǎn)陣屏的顯示,就有了2種方法。
本文系21ic論壇藍(lán)V作者jinglixixi原創(chuàng)撰寫(xiě)
編輯:jq
-
led
+關(guān)注
關(guān)注
242文章
23140瀏覽量
658516
原文標(biāo)題:直接以LED組建點(diǎn)陣屏不多見(jiàn)吧?驅(qū)動(dòng)就一種方法?看看在Arduino下怎樣實(shí)現(xiàn)
文章出處:【微信號(hào):pcbgood,微信公眾號(hào):奈因PCB電路板設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論