32*32點(diǎn)陣LED顯示漢字-STC單片機(jī)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
圖上擺放的是上面一排引腳是行,下面一排引腳是列。行是LED陽極。
行列各由四個(gè)74HC573控制,每個(gè)控制8個(gè)腳。同時(shí)注意單片機(jī)P0口上拉保持供電充足。
還有注意每行的掃描時(shí)間要合理設(shè)置。否則會有顯示殘缺。根據(jù)實(shí)際設(shè)置吧!!!
橫向顯示4個(gè)字:少占魚制作
其實(shí)可以把這個(gè)程序和我另外的一個(gè)單片機(jī)串口與電腦通信的程序結(jié)合起來,加上我用VC做的上位機(jī)界面??梢宰杂奢斎腼@示內(nèi)容,還可以反向控制電腦的一些操作。不過我還是熱衷不用電腦輸入顯示內(nèi)容,而用一只感應(yīng)筆掃描一個(gè)32*32LED模板,實(shí)現(xiàn)自己點(diǎn)哪就讓哪個(gè)LED亮的效果。簡單有省事。等我做出實(shí)物來再發(fā)吧!!!其實(shí)就是加個(gè)光敏三極管,LED模板上各個(gè)LED點(diǎn)亮?xí)r間不同。通過測頻達(dá)到取某點(diǎn)坐標(biāo)的目的。
//32*32點(diǎn)陣LED顯示,由8*8點(diǎn)陣組成。列高行低點(diǎn)亮
/*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/
#include
#define uchar unsigned char
#define uint unsigned int
//少占魚制作 河北正定歡迎您 長沙航空職業(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ò),后來改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/
//少占魚 河北正定歡迎您 長沙航院 QQ:411656434
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來才完整,否則會有殘缺不亮
{
/*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來改延時(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)閉陽極正電的
L2=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài)
P2=0xff;//這句才是關(guān)閉陰極正電的語句
CS1=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài)
i++;
}
}
/*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/
for(i=8;i<16;i++)
{
for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來才完整,否則會有殘缺不亮
{
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)閉陽極正電的
L2=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài)
P2=0xff;//這句才是關(guān)閉陰極正電的語句
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ò),后來改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/
for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來才完整,否則會有殘缺不亮
{
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)閉陽極正電的
L4=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài)
P2=0xff;//這句才是關(guān)閉陰極正電的語句
CS1=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài)
i++;
}
}
for(i=24;i<32;i++)
{
/*****我在修改的時(shí)候,總是字顯示不完整,一開始還以為是哪里有錯(cuò),后來改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/
for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來才完整,否則會有殘缺不亮
{
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)閉陽極正電的
L4=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài)
P2=0xff;//這句才是關(guān)閉陰極正電的語句
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ò),后來改延時(shí)程序也不行,最后每行連續(xù)掃描幾次,可以了******/
for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來才完整,否則會有殘缺不亮
{
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)閉陽極正電的
L2=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài)
P2=0xff;//這句才是關(guān)閉陰極正電的語句
CS3=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài)
i++;
}
}
for(i=40;i<48;i++)
{
for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來才完整,否則會有殘缺不亮
{
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)閉陽極正電的
L2=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài)
P2=0xff;//這句才是關(guān)閉陰極正電的語句
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遍,人眼看起來才完整,否則會有殘缺不亮
{
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)閉陽極正電的
L4=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài)
P2=0xff;//這句才是關(guān)閉陰極正電的語句
CS3=0; //關(guān)閉行低,使以后的操作部影響本行狀態(tài)
i++;
}
}
for(i=56;i<64;i++)
{
for(j=0;j<8;j++)//特別注意這里每組點(diǎn)陣的每行掃描8遍,人眼看起來才完整,否則會有殘缺不亮
{
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)閉陽極正電的
L4=0; //關(guān)閉列,這句是使以后的操作不再影響本列狀態(tài)
P2=0xff;//這句才是關(guān)閉陰極正電的語句
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
{
for(j=0;j<155;j++)
{;}
}
}