今天小编要和大家分享的是74ls164,数码管相关信息,接下来我将从74ls164驱动数码管电路_74ls164驱动4位数码管,用74hc164串转并如何控制数码管的显示顺序这几个方面来介绍。

用74hc164串转并如何控制数码管的显示顺序

用74hc164串转并如何控制数码管的显示顺序

74LS164是一个串行输入并行输出的移位寄存器,可用于扩展并行输出口。74LS165是8位并行输入串行输出移位寄存器,可以扩展一个或多个8位并行I/O口。

74ls164驱动数码管电路

74ls164驱动4位数码管_74ls164驱动数码管电路

74ls164驱动4位数码管_74ls164驱动数码管电路

74LS164静态显示接口

74ls164驱动4位数码管_74ls164驱动数码管电路

74ls164驱动4位数码管_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--);

}

74LS164驱动数码管动态显示仿真图:

74ls164驱动4位数码管

关于74ls164,数码管就介绍完了,您有什么想法可以联系小编。