74HC595具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器有相互独立的时钟。数据在SH_cp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在ST_cp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。
74hc595级联程序:
/****************************************************************************** * *
远程116
* 2012.sunmer
* 双74HC595级联,驱动8位动态数码管, *
******************************************************************************/
#include 《reg52.h》
sbit ser=P1^0;
sbit rck=P1^2;
sbit sck=P1^1;
unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳段码 unsigned char no[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码 unsigned char num[8]={2,0,1,2,0,7,1,3}; //显示2012.07.13 unsigned char al; unsigned int add;
/****************************************************************************** *
*
延时函数
*
******************************************************************************/
/* 延时t毫秒 */
void delay_ms(unsigned int delaytime)
{
unsigned int i,j;
for(i=0;i《delaytime;i++)
for(j=0;j《125;j++); /* 对于11.0592M时钟,约延时1ms */ }
/******************************************************************************
*
* 联级595数据传送函数
* 传送格式(位码,段码)
*
******************************************************************************
/ void send_595_data(unsigned char send_address,unsigned char send_data) {
unsigned char i,j,temp0,temp1;
temp0=send_address;
temp1=send_data;
if((al==3)||(al==5)) //加小数点
{
if(add《300) temp1&=0x7f; }
for(i=0;i《8;i++) //传送位码 {
if(temp0&0x80)
ser=1;
else
ser=0;
temp0《《=1;
rck=0;
rck=1; }
for(j=0;j《8;j++) //传送段码
{
if(temp1&0x80)
ser=1; else ser=0;
temp1《《=1; rck=0; rck=1;
}
sck=0; sck=1;
//产生上升沿,数据移位并行输出 sck=0; }
/******************************************************************************
*
* 主函数
*
******************************************************************************
/ void main(void)
{
for(;;)
{
for(al=0;al《8;al++)
{
send_595_data(~no[7-al],seg[num[al]]); //显示2012.07.13 } add++;
if(add==600)
add=0;
}
}
评论
查看更多