用的单片机是普中的开发板,8x8点阵用的是74hc595进行段选,P0口位选
74hc595资料点击打开链接
8x8点阵用的是共阴极(左边的)
这次我要实现的是让数字0从右到左依次显示
#include
#include
typedef unsigned int u16;
typedef unsigned char u8;
sbit SCLK=P3^6;
sbit RCK=P3^5;
sbit SER=P3^4;
u8 code duan0[8][8]={{0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00}, //数字0的段选
{0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,0x00},
{0x42,0x42,0x42,0x3C,0x00,0x00,0x00,0x3C},
{0x42,0x42,0x3C,0x00,0x00,0x00,0x3C,0x42},
{0x42,0x3C,0x00,0x00,0x00,0x3C,0x42,0x42},
{0x3C,0x00,0x00,0x00,0x3C,0x42,0x42,0x42},
{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C},
{0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00}};
u8 code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; // 位选
void delay(u16 c)//延时函数
{
u8 a,b;
for(;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void sandbyte(u8 dat)//给74hc595发送段选的数据
{
u8 i;
SCLK=0;
RCK=0;
for(i=0;i<8;i++)
{
SER=dat>>7;
dat<<=1;
SCLK=1;
_nop_();
_nop_();
SCLK=0;
}
RCK=1;
_nop_();
_nop_();
RCK=0;
}
void main()
{
u8 i,j;
u8 num;
while(1)
{
for(i=0;i<8;i++)
{
num=40;
while (num--) //让下面的for函数持续运行40次,让数字0 能停留一段时间
{
for(j=0;j<8;j++)
{
P0=wei[j];
sandbyte(duan0[i][j]);
delay(1);
sandbyte(0x00);
}
}
delay(100); //这里是扫描延时100ms
}
}
}