對(duì)應(yīng)德飛萊的16x16 LED點(diǎn)陣, 這個(gè)點(diǎn)陣有兩種型號(hào), 一種是單色, 一種是雙色, 雙色多一個(gè)IO口
背面元件圖, 這個(gè)是單色的, 有幾個(gè)焊盤是空的, 另外8x8LED的引腳也有部分是空的. 雙色的焊盤和LED點(diǎn)陣引腳都是滿焊的
用89C51去驅(qū)動(dòng), 主要是通過74HC595和74HC138這兩個(gè)邏輯芯片
* 74HC138負(fù)責(zé)行掃描, 每次時(shí)鐘中斷會(huì)掃描其中一行, 這行的位置是由ABCD這4個(gè)腳控制的, 對(duì)應(yīng)了兩片74HC138, 每片控制8個(gè)行, 通過P0.0-P0.1, 可以讓指定的行顯示
* 74HC595負(fù)責(zé)準(zhǔn)備當(dāng)前行上的數(shù)據(jù), 這個(gè)數(shù)據(jù)有16bit所以是兩個(gè)字節(jié), 對(duì)應(yīng)每個(gè)漢字, 有16x16個(gè)點(diǎn), 就是16個(gè)2字節(jié), 每次時(shí)鐘中斷就將這2個(gè)字節(jié)的內(nèi)容送到74HC595上去, 同樣是兩片74HC595, 每片負(fù)責(zé)8個(gè)bit, 走的是SPI類型的串行輸入-鎖存-并行輸出的方式
接線方式
- R1 => P2.4 紅色數(shù)據(jù)信號(hào)
- D => P0.3
- C => P0.2
- B => P0.1
- A => P0.0 A-D用于控制16行,通過2路 HC138 控制
- LATCH => P2.6 鎖存
- SCK => P2.5 時(shí)鐘
- G1 => P0.4 綠色數(shù)據(jù)信號(hào), 如果使用單紅色屏此信號(hào)無需連接
- OE => P2.1 可以用IO引腳PWM控制亮度, 或者使用此引腳控制拖尾現(xiàn)象
- +5V => 5V
- GND => GND
復(fù)制代碼
上位機(jī)代碼(STC89C52RC), 只要是12T的STC單片機(jī)都可以
- #include<reg52.h>
- sbit G1 = P0^4; //數(shù)據(jù)引腳,屏上標(biāo)識(shí)G1
- sbit OE = P2^1; //使能引腳,屏上標(biāo)識(shí)EN/OE
- sbit R1 = P2^4; //數(shù)據(jù)引腳,屏上標(biāo)識(shí)R1
- sbit T_CLK = P2^5; //時(shí)鐘引腳,屏上標(biāo)識(shí)CLK
- sbit T_STR = P2^6; //鎖存引腳,屏上標(biāo)識(shí)LATCH
- unsigned char pos=0;
- unsigned char tab[8];
- unsigned char DIS[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//行數(shù)據(jù)
- /*-----------------------------------------------
- 16x16漢字取模數(shù)據(jù)
- ------------------------------------------------*/
- unsigned char code hztest[][32]= //二維數(shù)組, 每個(gè)漢字32個(gè)字節(jié)
- {
- /*-- 文字: 電 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x01,0x00,0x01,0x00,0x01,0xF8,0x3F,0x08,0x21,0x08,0x21,0x08,0x21,0xF8,0x3F,
- 0x08,0x21,0x08,0x21,0x08,0x21,0xF8,0x3F,0x0A,0x21,0x02,0x01,0x02,0x01,0xFE,0x00,
- /*-- 文字: 子 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0xF8,0x7F,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x01,0xFE,0xFF,
- 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,
- /*-- 文字: 工 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x00,0x00,0x00,0xFC,0x7F,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
- 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFE,0xFF,0x00,0x00,0x00,0x00,
- /*-- 文字: 程 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x08,0xFC,0x1D,0x04,0xF1,0x04,0x11,0x04,0x11,0xFC,0xFD,0x00,0x10,0x00,0x30,
- 0xFE,0x39,0x20,0x54,0x20,0x54,0xFC,0x91,0x20,0x10,0x20,0x10,0xFE,0x13,0x00,0x10,
- /*-- 文字: 信 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x40,0x08,0x20,0x08,0xFE,0x0B,0x00,0x10,0x00,0x10,0xFC,0x31,0x00,0x30,0x00,0x50,
- 0xFC,0x91,0x00,0x10,0x00,0x10,0xFC,0x11,0x04,0x11,0x04,0x11,0xFC,0x11,0x04,0x11,
- /*-- 文字: 息 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x00,0x01,0x00,0x02,0xF0,0x1F,0x10,0x10,0xF0,0x1F,0x10,0x10,0xF0,0x1F,0x10,0x10,
- 0xF0,0x1F,0x10,0x10,0x00,0x01,0x84,0x08,0x92,0x48,0x12,0x48,0xF0,0x87,0x00,0x00,
- /*-- 文字: 科 --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x10,0x08,0x10,0x1D,0x90,0xF0,0x90,0x10,0x10,0x10,0x10,0xFD,0x90,0x10,0x90,0x38,
- 0x10,0x34,0x1E,0x50,0xF0,0x53,0x10,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
- /*-- 文字: 學(xué) --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
- 0x08,0x22,0x08,0x11,0x10,0x11,0x20,0x00,0xFE,0x7F,0x02,0x40,0x04,0x80,0xE0,0x1F,
- 0x40,0x00,0x80,0x01,0xFE,0xFF,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,
- };
- /*-----------------------------------------------
- 向595寫入一個(gè)字節(jié), 紅色
- ------------------------------------------------*/
- void InputByte(unsigned char dat)
- {
- unsigned char i;
- for(i = 8; i > 0; i--)
- {
- R1 = !(dat & 0x01);
- T_CLK = 0;
- T_CLK = 1;
- dat = dat >> 1;
- }
- }
- /*-----------------------------------------------
- 向595寫入一個(gè)字節(jié), 綠色
- ------------------------------------------------*/
- void InputByteG(unsigned char dat)
- {
- unsigned char i;
- for(i = 8; i > 0; i--)
- {
- G1 = !(dat & 0x01);
- T_CLK = 0;
- T_CLK = 1;
- dat = dat >> 1;
- }
- }
- /*-----------------------------------------------
- 向595寫入兩個(gè)字節(jié) 雙色
- ------------------------------------------------*/
- void Input2Byte(unsigned char DataR1, unsigned char DataG1) //寫一個(gè)字節(jié)
- {
- unsigned char i;
- for(i=8; i>0; i--)
- {
- R1 = !(DataR1&0x01);
- G1 = !(DataG1&0x01);
- T_CLK = 0;
- T_CLK = 1;
- DataR1 = DataR1 >> 1;
- DataG1 = DataG1 >> 1;
- }
- }
- /*-----------------------------------------------
- 初始化定時(shí)器,做為動(dòng)態(tài)掃描
- ------------------------------------------------*/
- void Init_Timer1(void)
- {
- TMOD |= 0x10;
- EA=1; //總中斷使能
- ET1=1; //定時(shí)中斷使能
- TR1=1; //打開定時(shí)器開關(guān)
- }
- /*-----------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- unsigned int i;
- unsigned char a;
- Init_Timer1(); //初始化定時(shí)器
-
- while(1)
- {
- for(i = 0; i < 1000; i++); // 延時(shí)
- a++;
- if(a == 8) a = 0; // 漢字循環(huán)
- pos = a;
- }
- }
- /*-----------------------------------------------
- 定時(shí)器執(zhí)行動(dòng)態(tài)掃描
- ------------------------------------------------*/
- void Timer1_isr(void) interrupt 3
- {
- static unsigned char count, j;
- unsigned char i;
- TH1=0xff; // 重裝初值
- TL1=0;
- T_STR=0; // 鎖存釋放
- for(j = 0; j < 1; j++) //取當(dāng)前漢字在i位置的2個(gè)字節(jié),數(shù)據(jù)傳輸完成后鎖存輸出
- {
- InputByte(hztest[j+pos][i]);
- InputByte(hztest[j+pos][i+1]);
- }
- OE = 1; // 關(guān)閉屏幕, 如果沒有使用該引腳控制則會(huì)出現(xiàn)拖影現(xiàn)象
- T_STR=1; // 鎖存有效, 此時(shí)一行的數(shù)據(jù)顯示到屏上
- P0 = DIS[count] | 0xF0; //低4位對(duì)應(yīng)P0.0-P0.3, 通過HC138 4-16譯碼器, 循環(huán)掃描其他15行
- OE = 0; // 打開屏幕
- count++;
- i += 2; // 當(dāng)前漢字下一位置
- if(count == 16) count = 0;
- if(i == 32) i = 0;
- }
復(fù)制代碼
|