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--);
}
评论
查看更多