51单片机驱动能力太垃圾,所以驱动数码管,用专用芯片max7219 妥妥的,当然也可以用于点阵
程序也非常简单,一个高电平拉高就搞定,程序如下,
#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned int
sbit clk=P3^2;
sbit load=P3^1;
sbit din=P3^0;
void max7219send(u8 add,u8 dat)
{
u8 ads,i,j;
load=0;
i=0;
while(i<16)
{
if(i<8)
{
ads=add;
}
else
{
ads=dat;
}
for(j=8;j>=1;j--)
{
clk=0;
din=ads&0x80;
ads=ads<<1;
clk=1;
}
i=i+8;
}
load=1;
}
void max7219init()
{
max7219send(0x0c,0x01);
max7219send(0x0b,0x07);
max7219send(0x0a,0x0d);
max7219send(0x09,0xff);
}
void main()
{
u8 i;
max7219init();
for(i=1;i<9;i++)
{
max7219send(i,i);
}
while(1);
}
|