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;
}
}
評論
查看更多