74hc595驱动4位数码管程序解析
//MCU:AT89S52
//晶振:11.0592M.
//采用4位共阳极数码管
#include 《regx51.h》
//#include 《INTRINS.H》
#define uint unsigned int
#define uchar unsigned char
#define nop() _nop_();_nop_();
sbit CLK=P2^0;
sbit DAT=P2^1;
sbit RCLK=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
sbit CS3=P2^5;
sbit CS4=P2^6;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0};//0-9,-,全灭,全亮——共阳极数码管
void write595(unsigned char word)
{
uchar num,c;
num=tab[word];
for(c=0;c《8;c++)
{
CLK=0;
DAT=num&0x80;
num=num《《1;
CLK=1;
}
RCLK=0;
// nop();
// nop();
RCLK=1;
}
void select1(void)
{
CS1=0;
CS2=1;
CS3=1;
CS4=1;
}
void select2(void)
{
CS1=1;
CS2=0;
CS3=1;
CS4=1;
}
void select3(void)
{
CS1=1;
CS2=1;
CS3=0;
CS4=1;
}
void select4(void)
{
CS1=1;
CS2=1;
CS3=1;
CS4=0;
}
int main(void)
{
//unsigned char i;
while(1)
{
write595(12);
select1();
//for(i=0;i《10;i++) _nop_();
write595(2);
select2();
//for(i=0;i《10;i++) _nop_();
write595(3);
select3();
//for(i=0;i《10;i++) _nop_();
write595(4);
select4();
//for(i=0;i《10;i++) _nop_();
}
}