74hc164應(yīng)用電路(二)
74HC164驅(qū)動的LED顯示電路(共陰)電路圖
74hc164應(yīng)用電路(三)
R為clear端, C1/-》為clock端,&為A端(1腳)和B端(二角),3~13腳分表為QA~QH,
源程序:
/***74hc164是上升沿有效***/
#include《regx51.h》
#include《intrins.h》
#define uchar unsigned char
#define uint unsigned int
uchar ch;
sbit DAT=P2^7;//A,B端接一塊后接入DAT
sbit CLK=P2^6;
char code seg[16]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};
/*0~9和全滅狀態(tài)*/
/*數(shù)經(jīng)過移位寄存器后低位數(shù)為高位數(shù),高位數(shù)為低位數(shù)
如:0000 0011移位以后為1100 0000*/
/*延時一毫秒函數(shù)*/
void delay(uint ms)
{
uchar i;
for(;ms!=0;ms--)
for(i=0;i《250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
/***把代碼發(fā)送到移位寄存器***/
void sendchar(ch)
{
uchar i;
for(i=0;i《8;i++)//8位數(shù)據(jù)傳輸完畢后才給數(shù)碼管顯示
{
DAT=ch&0x01;//P2_7=0000000x
/*DAT一直保持該狀態(tài),等時鐘脈沖觸發(fā)傳遞數(shù)值*/
CLK=0;//下面兩句制造一個上升沿
CLK=1;
/*一個seg[]剛好八位,164是串行輸入的,分成八位輸入*/
ch》》=1;
/*DAT=ch&0x01和ch》》=1的功能是一次取出八位二進制ch的每一位賦值給74hc164*/
}
}
void main(void)
{
uint m=0;
while(1)
{
sendchar(seg[m]);
if(++m==11) m=0;
delay(200);
}