简述74HC595功能

本文介绍了74HC595串行输入、并行输出的锁存器,详细说明了其端口功能,包括数据输入、输出、时钟输入等。提供了一个简单的单片机程序示例,解释了如何控制74HC595的输出,并讨论了多芯片级联的两种方法。最后,通过比喻解释了串行输入和并行输出的概念。
摘要由CSDN通过智能技术生成

74HC595是串行输入,并行输出的锁存器(可以不用理解)

 

从Q0~Q7是输出端

VCC电源端;GND接地端

14端口DS是数据输入端

Q7‘是串行数据输出端,(与14端口的输入数据相同,不过要晚一步)可用于级联74HC595(一般不用)

11,12,是时钟输入端口

/MR低电平数据清零,一般接高电平

/OE是高电平高阻态,禁止输出,(有的也说是锁存,具体没试过),一般接低电平。

连接好的电路图如下(大家根据端口号自己对,VCC和GND省略了

 

 

端口介绍完毕,接下来贴程序

sbit SRCLK1=P2^0;          //595的SH_CP端口要接的单片机上的端口P2^0(P2^0可以更改为任意端口)
sbit RCLK1=P2^1;             //595的ST_CP端口要接的单片机上的端口P2^1(P2^1可以更改为任意端口)
sbit SER1=P2^2;               //595的DS端 连接,可以更改为任意端口

void Hc595S

设计思路: 1.将矩阵键盘的4行4列分别连接到单片机的P1口上,通过轮询的方式扫描按键状态。 2.将数码管的段码线和位选线分别连接到两个74HC573锁存器的输出端,通过控制锁存器的锁存与否来控制数码管的显示。 3.通过P2.6和P2.7控制74HC573锁存器的锁存与否,实现数据的输入和输出。 4.根据按键状态和功能键状态,进行加减乘除运算,并将结果显示在数码管上。 5.增加按键音提示功能,通过蜂鸣器控制器发出提示音。 C语言代码: ``` #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; uchar keyscan() { uchar flag = 0; uchar temp = 0; P1 = 0x0F; if(P1 != 0x0F) { delay(1000); if(P1 != 0x0F) { temp = P1; P1 = 0xF0; temp |= P1; flag = 1; } } return flag ? temp : 0; } void delay(uint i) { while(i--); } void display(uchar num, uchar pos) { P2 &= 0x3F; P0 = table[num]; P2 |= (pos << 6); } void main() { uchar keyvalue = 0; uchar keyflag = 0; uchar num1 = 0; uchar num2 = 0; uchar oper = 0; bit soundflag = 0; while(1) { keyvalue = keyscan(); if(keyvalue) { keyflag = 1; delay(1000); if(keyvalue == 0x0E) { oper = '+'; } else if(keyvalue == 0x0D) { oper = '-'; } else if(keyvalue == 0x0B) { oper = '*'; } else if(keyvalue == 0x07) { oper = '/'; } else if(keyvalue == 0x0F) { num1 = 0; num2 = 0; oper = 0; soundflag = 0; } else if(keyvalue == 0x0A) { soundflag = ~soundflag; } else { if(oper == 0) { num1 = keyvalue; } else { num2 = keyvalue; } } } if(!keyvalue && keyflag) { keyflag = 0; switch(oper) { case '+': display(num1 + num2, 0); break; case '-': display(num1 - num2, 0); break; case '*': display(num1 * num2, 0); break; case '/': display(num1 / num2, 0); break; default: display(num1, 0); break; } if(soundflag) { P3 = 0x01; delay(500); P3 = 0x00; } } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值