滾動(dòng)數(shù)碼管顯示:正在學(xué)習(xí)單片機(jī),前幾天看到一個(gè)用8255做的數(shù)碼管滾動(dòng)顯示,就想要是用MAX7219做怎么做,搞了好一陣子,實(shí)在想不出什么好的辦法了,就用了一個(gè)笨辦法,就是建立每一幀的顯示表,然后每一次顯示一列,這是一個(gè)不得己的辦法,占空間好大,但一時(shí)實(shí)在想不出什么好的辦法來(lái),下面是我的程序,各位路過(guò)的看看,熱烈歡迎大家提意見(jiàn),有什么辦法,希望不吝帖出來(lái) ,互相學(xué)習(xí)
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned
sbit DIN=P2^0;
sbit CS =P2^1;
sbit CLK=P2^2;
uchar code tab[9][8]={
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,1,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,1,2,
0x7f,0x7f,0x7f,0x7f,0x7f,1,2,3,
0x7f,0x7f,0x7f,0x7f,1,2,3,4,
0x7f,0x7f,0x7f,1,2,3,4,0x7f,
0x7f,0x7f,1,2,3,4,0x7f,0x7f,
0x7f,1,2,3,4,0x7f,0x7f,0x7f,
1,2,3,4,0x7f,0x7f,0x7f,0x7f,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
};//幀表
void delayms(uchar ms)
{
uchar i;
while(ms--)
{for(i=0;i<120;i++);}
}
void write(uchar command,uchar dat)
{
uchar i;
CS=0;
for(i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(command&0x80);
command<<=1;
_nop_();_nop_();
CLK=1;
_nop_();
CLK=0;
}
for(i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(dat&0x80);
dat<<=1;
_nop_();_nop_();
CLK=1;
_nop_();
CLK=0;
}
CS=1;
}
void initial_7219()
{
write(0x09,0xff);
write(0x0a,0xf5);
write(0x0c,0x01);
write(0x0b,0x07);
}
main()
{
uchar i,j;
initial_7219();
while(1)
{
for(j=0;j<9;j++)
{
for(i=0;i<8;i++)
{
write(i+1,tab[j]);delayms(10);
}
}
}
}