缘由51单片机变量进阶与点阵LED-嵌入式-CSDN问答 大佬们 求解单片机点亮点阵程序 被困3天了一直想不明白 - 24小时必答区
#include<reg52.h>//头文件
sbit shcp=P1^2;//数据输入时钟线 595的11脚
sbit stcp=P1^1;//输出存储器锁存时钟线 595的12脚
sbit ds=P1^0;//数据线 595的14脚
sbit mr=P1^3;//数据清零
sbit oe=P1^4;//锁存使能
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code shuju[]={
0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00,0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00,0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,
0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00,0x18,0x24,0x12,0x12,0x12,0x24,0x18,0x00,
0x00,0x7C,0x02,0x02,0x02,0x7C,0x00,0x00
};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位,用移位函数,移位运算符,数字
void QuDong595(unsigned char sj)
{
unsigned char aa=8;
while(aa--)
{
ds=sj>>7;sj<<=1;//十六进制数据发送
// ds=QY(sj,2);sj/=2;//十进制数据发送
shcp=1;//上升沿发生移位 上升沿时数据寄存器的数据锁存。
shcp=0;
}
stcp=0;
stcp=1;//上升沿将数据送到输出锁存器
stcp=0;
}
void main() //主函数
{
unsigned char b=0, j=0, xd=0, h=0, aa=0, sj=0, ls=1;
unsigned int ys=0;
oe=0;//锁存使能
while(1)
{
P3=~smgduan[j/10];P2=~smgduan[j%10];P0=ls;
// QuDong595(shuju[b+j]);
aa=8;sj=shuju[b+j];
while(aa--)
{
ds=sj>>7;sj<<=1;//十六进制数据发送
shcp=1;//上升沿发生移位 上升沿时数据寄存器的数据锁存。
shcp=0;
}
stcp=0;
stcp=1;//上升沿将数据送到输出锁存器
stcp=0;
QuDong595(sjwei[b]);
while(++xd);//显示延时
mr=0;mr=1;
if(++b>7)b=0;
if(++h==0){ls*=2;if(!ls)++ls;//切换数据延时+显示延时
if((++j)>=8*6)j=0;}
}
}