說(shuō)明:我圖上擺放的是上面一排引腳是行,下面一排引腳是列。行是LED陽(yáng)極。
行列各由四個(gè)74HC573控制,每個(gè)控制8個(gè)腳。同時(shí)注意單片機(jī)P0口上拉保持供電充足。
還有注意每行的掃描時(shí)間要合理設(shè)置。否則會(huì)有顯示殘缺。根據(jù)實(shí)際設(shè)置吧!!!
橫向顯示4個(gè)字:少 占 魚 制 作
其實(shí)可以把這個(gè)程序和我另外的一個(gè)單片機(jī)串口與電腦通信的程序結(jié)合起來(lái),加上我用VC做的上位機(jī)界面。可以自由輸入顯示內(nèi)容,還可以反向控制電腦的一些操作。不過(guò)我還是熱衷不用電腦輸入顯示內(nèi)容,而用一只感應(yīng)筆掃描一個(gè)32*32LED模板,實(shí)現(xiàn)自己點(diǎn)哪就讓哪個(gè)LED亮的效果。簡(jiǎn)單有省事。等我做出實(shí)物來(lái)再發(fā)吧!!!其實(shí)就是加個(gè)光敏三極管,LED模板上各個(gè)LED點(diǎn)亮?xí)r間不同。通過(guò)測(cè)頻達(dá)到取某點(diǎn)坐標(biāo)的目的。
//32*32點(diǎn)陣LED顯示,由8*8點(diǎn)陣組成。列高行低點(diǎn)亮
/*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來(lái)改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/
//少占魚 河北正定歡迎您 長(zhǎng)沙航院 QQ:411656434
#include <stc89c52.h> #define uchar unsigned char #define uint unsigned int //少占魚制作 河北正定歡迎您 長(zhǎng)沙航空職業(yè)技術(shù)學(xué)院 2010 年QQ:411656434 //郵箱:ssou_1985@163.com sbit CS1=P1^0; sbit CS2=P1^1; sbit CS3=P1^6; sbit CS4=P1^7; sbit L1=P1^2; sbit L2=P1^3; sbit L3=P1^4; sbit L4=P1^5; uchar hang[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar code tab[]={ 0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x20, 0x09,0x10,0x11,0x0C,0x11,0x04,0x21,0x10, 0x41,0x10,0x01,0x20,0x01,0x40,0x00,0x80, 0x01,0x00,0x02,0x00,0x0C,0x00,0x70,0x00, //少 0x02,0x00,0x02,0x00,0x02,0x08,0x03,0xFC, 0x02,0x00,0x02,0x00,0x02,0x10,0x3F,0xF8, 0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10, 0x20,0x10,0x20,0x10,0x3F,0xF0,0x20,0x10, //占 0x04,0x00,0x04,0x00,0x0F,0xE0,0x10,0x40, 0x20,0x88,0x7F,0xFC,0xA1,0x08,0x21,0x08, 0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8, 0x20,0x08,0x00,0x04,0xFF,0xFE,0x00,0x00, //魚 0x04,0x04,0x24,0x04,0x25,0x04,0x3F,0xA4, 0x24,0x24,0x44,0xA4,0xFF,0xE4,0x04,0x24, 0x3F,0xA4,0x24,0xA4,0x24,0xA4,0x24,0x84, 0x26,0x84,0x25,0x04,0x04,0x14,0x04,0x08 //制 }; void delay(uint); void delayus(); void xianshi(); void dis1(); void dis2(); void dis3(); void dis4(); /****************************************************************/ //主函數(shù)入口 main() { delayus(); delay(20); P0=0x00; P2=0xff; L1=0; L2=0; L3=0; L4=0; CS1=0; CS2=0; CS3=0; CS4=0; while(1) { xianshi(); } } void xianshi() { dis1(); dis1(); dis2(); dis2(); dis3(); dis3(); dis4(); dis4(); } /************第一個(gè)16*16點(diǎn)陣顯示***************/ // void dis1() { //第一個(gè)16*16點(diǎn)陣開始顯示 uchar i,j; /*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來(lái)改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/ //少占魚 河北正定歡迎您 長(zhǎng)沙航院 QQ:411656434 for(i=0;i<8;i++) { for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來(lái)才完整,否則會(huì)有殘缺不亮 { /*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來(lái)改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/ P2=hang[i]; CS1=1; P0=tab[i*2]; L1=1; delay(1); P0=0x00; L1=0; P0=tab[i*2+1]; L2=1; delay(1); P0=0x00;//這句才是真正關(guān)閉陽(yáng)極正電的 L2=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài) P2=0xff;//這句才是關(guān)閉陰極正電的語(yǔ)句 CS1=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài) i++; } } /*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來(lái)改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/ for(i=8;i<16;i++) { for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來(lái)才完整,否則會(huì)有殘缺不亮 { P2=hang[i%8]; CS2=1; P0=tab[i*2]; L1=1; delay(1); P0=0x00; L1=0; P0=tab[i*2+1]; L2=1; delay(1); P0=0x00;//這句才是真正關(guān)閉陽(yáng)極正電的 L2=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài) P2=0xff;//這句才是關(guān)閉陰極正電的語(yǔ)句 CS2=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài) i++; } } } /*************第2個(gè)16*16點(diǎn)陣顯示*********************/ // void dis2() { //第二個(gè)16*16點(diǎn)陣開始顯示 uchar i,j; for(i=16;i<24;i++) {/*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來(lái)改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/ for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來(lái)才完整,否則會(huì)有殘缺不亮 { P2=hang[i%16]; CS1=1; P0=tab[i*2]; L3=1; delay(1); P0=0x00; L3=0; P0=tab[i*2+1]; L4=1; delay(1); P0=0x00;//這句才是真正關(guān)閉陽(yáng)極正電的 L4=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài) P2=0xff;//這句才是關(guān)閉陰極正電的語(yǔ)句 CS1=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài) i++; } } for(i=24;i<32;i++) { /*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來(lái)改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/ for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來(lái)才完整,否則會(huì)有殘缺不亮 { P2=hang[i%24]; CS2=1; P0=tab[i*2]; L3=1; delay(1); P0=0x00; L3=0; P0=tab[i*2+1]; L4=1; delay(1); P0=0x00;//這句才是真正關(guān)閉陽(yáng)極正電的 L4=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài) P2=0xff;//這句才是關(guān)閉陰極正電的語(yǔ)句 CS2=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài) i++; } } //第二個(gè)16*16點(diǎn)陣顯示完畢 } /***********第3個(gè)16*16點(diǎn)陣顯示**************************/ // void dis3() { //第三個(gè)16*16點(diǎn)陣開始顯示 uchar i,j; for(i=32;i<40;i++) { /*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來(lái)改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/ for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來(lái)才完整,否則會(huì)有殘缺不亮 { P2=hang[i%32]; CS3=1; P0=tab[i*2]; L1=1; delay(1); P0=0x00; L1=0; P0=tab[i*2+1]; L2=1; delay(1); P0=0x00;//這句才是真正關(guān)閉陽(yáng)極正電的 L2=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài) P2=0xff;//這句才是關(guān)閉陰極正電的語(yǔ)句 CS3=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài) i++; } } for(i=40;i<48;i++) { for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來(lái)才完整,否則會(huì)有殘缺不亮 { P2=hang[i%40]; CS4=1; P0=tab[i*2]; L1=1; delay(1); P0=0x00; L1=0; P0=tab[i*2+1]; L2=1; delay(1); P0=0x00;//這句才是真正關(guān)閉陽(yáng)極正電的 L2=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài) P2=0xff;//這句才是關(guān)閉陰極正電的語(yǔ)句 CS4=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài) i++; } } //第三個(gè)16*16點(diǎn)陣顯示完畢 } /********第4個(gè)16*16點(diǎn)陣顯示*********************/ // void dis4() { /************第4個(gè)16*16點(diǎn)陣顯示***********************/ //第四個(gè)16*16點(diǎn)陣開始顯示 uchar i,j; for(i=48;i<56;i++) { for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來(lái)才完整,否則會(huì)有殘缺不亮 { P2=hang[i%48]; CS3=1; P0=tab[i*2]; L3=1; delay(1); P0=0x00; L3=0; P0=tab[i*2+1]; L4=1; delay(1); P0=0x00;//這句才是真正關(guān)閉陽(yáng)極正電的 L4=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài) P2=0xff;//這句才是關(guān)閉陰極正電的語(yǔ)句 CS3=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài) i++; } } for(i=56;i<64;i++) { for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來(lái)才完整,否則會(huì)有殘缺不亮 { P2=hang[i%56]; CS4=1; P0=tab[i*2]; L3=1; delay(1); P0=0x00; L3=0; P0=tab[i*2+1]; L4=1; delay(1); P0=0x00;//這句才是真正關(guān)閉陽(yáng)極正電的 L4=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài) P2=0xff;//這句才是關(guān)閉陰極正電的語(yǔ)句 CS4=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài) i++; } } //第四個(gè)16*16點(diǎn)陣顯示完畢 } // void delayus() { uchar i=3; while(i--); } void delay(uint k) { uint data i,j; for(i=0;i<k;i++) { for(j=0;j<155;j++) {;} } }