本节主要是假如GPIO的数量太少,达不到我们希望的要求,那么我们可以使用74hc595芯片,通过这个芯片可以使得我们使用少数gpio就能扩展出大量的gpio,完成我们的功能,本节我们使用这个芯片来完成一列led点阵的流水灯的效果。
1 硬件
由硬件原理图我们也能大概分析出来我们通过配置P3^4,P3^5,P3^6这三个引脚来控制右边的8个引脚,74HC596内部含有1个8位的移位寄存器和一个存储器,数据在SRCLK的上升沿输入,输入到移位寄存器里面,然后在RCLK的上升沿由移位寄存器输出到存储器中,然后由存储器一次直接输出到右边的8个引脚。
我们可以通过和P0的接口一起配合使用来使得LED点阵按照我们希望的输出。
2软件
我们先写出74hc595配置的代码:
#include "reg52.h"
#include "intrins.h"
sbit RCK = P3^5;
sbit SCK = P3^6;
sbit SER = P3^4;
sbit led = P0^7;
void delay(int n){
while(n--);
}
void hc595_write(unsigned char dat){
int i;
led = 0;
RCK = 1;
SCK = 1;
_nop_();
for(i = 0;i < 8;i++){
SER = dat >> 7;
dat <<= 1;
SCK = 0;
_nop_();
_nop_();
SCK = 1;
}
RCK = 0;
_nop_();
_nop_();
RCK = 1;
}
然后我们写出调用这个代码的内容:
#include "74hc595.h"
void main(){
unsigned char lednum;
lednum = 0x01;
while(1){
if(lednum == 0){
lednum = 0x1;
}
lednum <<= 1;
hc595_write(lednum);
delay(5);
}
}