单片机:外部芯片学习(一)

1、38译码器—D74HC138

D74HC138D是一种三通道输入、八通道输出的译码器。

特点:

  • 采用COMS工艺
  • 低功耗
  • 工作电压:3.0V - 5.0V
  • 封装形式:SOP16

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

了解了上面的内容,接下来看懂电路图:

在这里插入图片描述

1、A0、A1、A2 三引脚作为3输入
2、非(Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7)8引脚作为8输出
3、还有三个引脚(E1非、E2非、E3),为三与门,当其值为(0、0、1)时才会使输出为1,图中G1接VCC为1,G2A非、G2B非接GND,所以三与门输出为1,此时38译码器输出才有效
4、再看真值表进行编程

编程

此程序编写:动态数码管依次从左到右显示0~7,引入138译码器减少单片机I/O口的使用

#include <reg51.h>
typedef unsigned char u8;
typedef unsigned int  u16;

#define led P1		//显示段选值
sbit A38=P3^0;		//74HC138译码器
sbit B38=P3^1;
sbit C38=P3^2;

u8 segment[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//0-5
0x82,0xf8,0x80,0x90,0x88,//6-A
0x83,0xc6,0xa1,0x86,0x8e};//B-F

void delay(u16 i)
{
	while(i--);
}

void change()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)
		{
			case 0:A38=0;B38=0;C38=0;break;
			case 1:A38=1;B38=0;C38=0;break;	
			case 2:A38=0;B38=1;C38=0;break;	
			case 3:A38=1;B38=1;C38=0;break;
			case 4:A38=0;B38=0;C38=1;break;
			case 5:A38=1;B38=0;C38=1;break;	
			case 6:A38=0;B38=1;C38=1;break;	
			case 7:A38=1;B38=1;C38=1;break;
		}
		led=~segment[i];
		delay(100);
	}
}


void main()
{
	while(1)
	{
		change();
	}
}

2、双P沟道增强型MOS管—D74HC245

D74HC245是一种三态输出、八路信号收发器,主要应用于大屏显示,来增强驱动。

主要特点:

  • 采用CMOS工艺
  • 宽电压工作范围:3.0V - 5.0V
  • 双向三态输出
  • 八线双向收发器
  • 封装形式:SOP20、SOP20-2、TSSOP20、DIP20

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、一共20个引脚,(A0 - A8 )(B0 - B8)为两组8位输入输出
2、VCC、GND引脚:电流
3、OE非:芯片使能(工作启动条件)
4、DIR:输入输出方向
在这里插入图片描述
图中OE非接GND线,所以该引脚触发,根据真值表可以控制两组8位引脚的输入输出方向
该芯片的作用就是增加电路的驱动能力

3、74HC165(并转串)

8位移位寄存器(并行输入、互补串行输出)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、CLK、CLK INH :(时钟输入端,上升沿有效)
2、A - H :(并行数据输入端)
3、SER:(串行数据输入端)
4、Qh:(输出端)、Qh非:(互补输出端)
5、SH/LD非:(移位控制/置入控制)

当移位/置入控制端(SH/LD非)为低电平时,并行数据(A-H)被入寄存器,而时钟(CLK,CLK INH)及串行数据(SER)均无关。当 SH/LD非为高电平时,并行置数功能被禁止。
CLK和CLK INK在功能上是等价的, 可以交换使用。 当CLK和CLKINK有一个为低电平并且SH/LD非为高电平时,另一个时钟可以输入。当CLK和CLK INK有一个为高电平时, 另一个时钟被禁止。只有在CLK为高电平时CLK INK才可变为高电平。

编程序

程序功能:按键控制LED灯的亮灭,通过74HC165芯片将按键的并行数据转换为串行数据输入到单片机内部,再通过该数据控制LED灯

#include <reg51.h>
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int  u16;

sbit IN_PL = P1^6;  	//移位、置位控制
sbit IN_DATA = P1^7;	//数据输出端
sbit SCK = P3^6;			//时钟
#define led P0

void delay(u16 i)
{
	while(i--);
}

u8 HC165INIT()
{
	u8 indata,i;
	//SH_LD引脚置为0,置位功能
	IN_PL = 0;
	_nop_();
	IN_PL = 1;
	_nop_();
	
	//取数据
	indata = 0;
	for(i=0;i<8;i++)
	{
		indata=indata<<1;
		SCK = 0;
		_nop_();
		indata|=IN_DATA;
		SCK = 1;
	}
	return indata;
}

void main()
{
	u8 key;
	led=0x00;
	while(1)
	{
		key = HC165INIT();
		if(key!=0xff)
		{
			led=~key;
		}
	}
}

4、74HC595(串转并)

基本描述

1、8位串行输入,8位串行或并行输出移位寄存器
2、硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准
3、具有一个8位移位寄存器和一个存储器,三态输出功能
4、移位寄存器和存储器是分别的时钟

在这里插入图片描述
在这里插入图片描述

管脚说明:

数据端:
QA – QH :并行输出端
QH’ :串行输出端
SER:串行数据输入端

控制端:
/SCLR:低电平时将移位寄存器的数据清零,通常接VCC(复位)
SCK:上升沿时数据寄存器的数据移位(QA–>QH),下降沿移位寄存器数据不变
RCK:上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变
/G:高电平时禁止输出(高阻态)

在这里插入图片描述

当/SCLR为高电平,/G为低电平时,数据在SCK上升沿进入移位寄存器,在 RCK上升沿输出到并行端口。

程序代码

程序功能:串行输出8位数据,在595转化下,并行输出8位数据用以控制LED流水灯

#include <reg51.h>
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int  u16;

sbit SRCLK = P3^6;
sbit RCLK = P3^5;
sbit SER = P3^4;


void delay(u16 i)
{
	while(i--);
}

void HC595(u8 dat)
{
	u8 i;
	SRCLK = 1;
	RCLK  = 1;
	for(i=0;i<8;i++)
	{
		SER=dat>>7;
		dat=dat<<1;
		
		SRCLK = 0;
		_nop_();
		_nop_();
		SRCLK = 1;
		
	}
	RCLK = 0;
	_nop_();
	_nop_();
	RCLK = 1;
	
}

void main()
{
	u8 i=0;
	u8 led_data = 0x01;
	while(1)
	{
		if(i==8)
		{
				i=0;
				led_data = 0x01;
		}
		HC595(led_data);
		led_data=led_data<<1;
		delay(50000);
		i++;
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42856154/article/details/90738416