#include <reg52.h>
#include <intrins.h>
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的段选
{0x00,0x49,0x49,0x7f,0x49,0x49,0x00,0x00},
{0x08,0x10,0x3f,0x49,0x2d,0x7f,0x2d,0x09}};
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<3;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(1000);//这里是扫描延时1000ms
}
}
}
8*8点阵循环显示
最新推荐文章于 2024-04-01 17:05:09 发布