4位共阴数码管显示(595*2方式)

显示方式:两片595级联,一片作为段选,一片作为位选。
数据执行方式:先灌入位选数据再灌入段选数据,锁存器动作一次性输出至数码管进行显示。
总结:对于显示位数较小的数码管,显示比较方便,数据一次性输出。但对于位数较多的数码管显示,程序较为复杂可能会增大延迟,结构繁杂(适合2~8位显示,高于8位用595-138方式利于实现,138可替换更多位数的译码器)



附件:“主程序代码附注”
*********************************************************************************************************
#include"STCXXXX.H"
sbit SCK = P6^0; //IO口设定
sbit RCK = P6^2;
sbit DIO = P6^4;
u16 a,b,c,d,e,f; //参数
u num,ge,shi,bai,qian,js;
//{0x3f(0),0x06(1),0x5b(2),0x4f(3),0x66(4),0x6d(5),0x7d(6),0x07(7),0x7f(8),0x6f(9),0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x00}
code Data1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段选数组
code Data2[]={0xfe,0xfd,0xfb,0xf7}; //位选数组
void Gun(u16 e,u16 f); //显示函数
void delay(); //延时
void main()
{
js = 0;
while(1)//死循环
{
Gun(0,qian);
Gun(1,bai);
Gun(2,shi);
Gun(3,ge);
js++; //每次循环,js+1
if(js == 200) //==等于 >大于 < 小于 >= 大于等于 <= 小于等于;一个延时
{
js=0; //js清零复位
num++;
qian=num%10000/1000;
bai=num%1000/100;
shi=num%100/10;
ge=num%10;
}
}
}
void Gun(u16 e,u16 f)
{
a = Data2[e];
for(b=0;b<8;b++)
{
DIO = a&0x80;
SCK = 0;
SCK = 1;
a=a << 1;
}
a = Data1[f];
for(b=0;b<8;b++)
{
DIO = a&0x80;
SCK = 0;
SCK = 1;
a=a << 1;
}
RCK=0;
RCK=1;
}