74LS164是一個串行輸入并行輸出的移位寄存器,可用于擴展并行輸出口。74LS165是8位并行輸入串行輸出移位寄存器,可以擴展一個或多個8位并行I/O口。
74ls164驅動數碼管電路
74LS164靜態顯示接口
用8051串行口外接74LS164擴展8位并行輸出口,如圖所示,8位并行口的各位都接一個發光二極管,要求發光管呈流水燈狀態。 串行口方式0的數據傳送可采用中斷方式,也可采用查詢方式,無論哪種方式,都要借助于TI或RI標志。串行發送時,可以靠TI置位(發完一幀數據后)引起中斷申請,在中斷服務程序中發送下一幀數據,或者通過查詢TI的狀態,只要TI為0就繼續查詢,TI為1就結束查詢,發送下一幀數據。在串行接收時,則由RI引起中斷或對RI查詢來確定何時接收下一幀數據。無論采用什么方式,在開始通訊之前,都要先對控制寄存器SCON進行初始化。在方式0中將,將00H送SCON就可以了。
ORG 2000H
START: MOV SCON,#00H ;置串行口工作方式0
MOV A,#80H ;最高位燈先亮
CLR P1.0 ;關閉并行輸出(避象傳輸過程中,各LED的“暗紅”現象)
OUT0: MOV SBUF,A ;開始串行輸出
OUT1: JNB TI,OUT1 ;輸出完否
CLR TI ;完了,清TI標志,以備下次發送
SETB P1.0 ;打開并行口輸出
ACALL DELAY ;延時一段時間
RR A ;循環右移
CLR P1.0 ;關閉并行輸出
JMP OUT0 ;循環
;****************延時間200MS***************
DELAY: MOV R7,#4
DEL1: MOV R6,#200
DEL2: MOV R5,#125
DEL3: DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
74LS164驅動4位共陽數碼管代碼
#include“reg52.h”
#defineu16unsignedint
#defineu8unsignedchar
sbitCLK=P2^0;
sbitDAT=P2^1;
u8codetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9全滅
//函數聲明
voidSend_Byte(u8byte);
voidDelay_ms(u16z);
voidDisplay(u16number);
//主函數
voidmain()
{
while(1)
{
Display(1111);
Delay_ms(3000);
//Display(2222);
//Delay_ms(3000);
}
}
//數碼管顯示函數
voidDisplay(u16number)
{
u8qian,bai,shi,ge;
qian=number/1000;
Send_Byte(qian);
Delay_ms(5);
bai=number%1000/100;
Send_Byte(bai);
Delay_ms(5);
shi=number%100/10;
Send_Byte(shi);
Delay_ms(5);
ge=number%1000;
Send_Byte(ge);
Delay_ms(5);
}
//發送數據函數
voidSend_Byte(u8byte)
{
u8num,d;
num=tab[byte];
for(d=0;d《8;d++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num》》=1;
}
}
//延時函數
voidDelay_ms(u16z)
{u16x,y;
for(x=z;x》0;x--)
for(y=110;y》0;y--);
}
評論
查看更多