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++;
}
}