74HC595具有8位移位寄存器和一個(gè)存儲(chǔ)器,三態(tài)輸出功能。移位寄存器和存儲(chǔ)器有相互獨(dú)立的時(shí)鐘。數(shù)據(jù)在SH_cp(移位寄存器時(shí)鐘輸入)的上升沿輸入到移位寄存器中,在ST_cp(存儲(chǔ)器時(shí)鐘輸入)的上升沿輸入到存儲(chǔ)寄存器中去。如果兩個(gè)時(shí)鐘連在一起,則移位寄存器總是比存儲(chǔ)寄存器早一個(gè)脈沖。
74hc595級(jí)聯(lián)程序:
/****************************************************************************** * *
遠(yuǎn)程116
* 2012.sunmer
* 雙74HC595級(jí)聯(lián),驅(qū)動(dòng)8位動(dòng)態(tài)數(shù)碼管, *
******************************************************************************/
#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}; //共陽(yáng)段碼 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;
/****************************************************************************** *
*
延時(shí)函數(shù)
*
******************************************************************************/
/* 延時(shí)t毫秒 */
void delay_ms(unsigned int delaytime)
{
unsigned int i,j;
for(i=0;i《delaytime;i++)
for(j=0;j《125;j++); /* 對(duì)于11.0592M時(shí)鐘,約延時(shí)1ms */ }
/******************************************************************************
*
* 聯(lián)級(jí)595數(shù)據(jù)傳送函數(shù)
* 傳送格式(位碼,段碼)
*
******************************************************************************
/ 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)) //加小數(shù)點(diǎn)
{
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;
//產(chǎn)生上升沿,數(shù)據(jù)移位并行輸出 sck=0; }
/******************************************************************************
*
* 主函數(shù)
*
******************************************************************************
/ 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;
}
}
評(píng)論