目录
- 0x01 74HC165芯片介绍
- 0x02 编程实现
0x01 74HC165芯片介绍
74HC165的引脚定义如下,长这个样子
ABCDEFGH是它的八个输入引脚,例如你可以将它连接按键,让它来读取8个按键值。也可以将他级联其它的74165,无需增加单片机GPIO引脚
使用方法:
-
- 在准备读取它的数据时,先将PL拉低,让Q0-Q7的数据加载至存储器,随后将PL拉高,这会达到锁存的效果,然后可以开始读取数据。
-
- 随后读取Q7引脚的数据
-
- 读完Q7的数据,操作第二个引脚(CLK)让它产生一个上升沿来使数据移位。注意在移位后,Q0的数据被移动到Q1,Q1的数据被移动到Q2,以此类推。
0x02 编程实现
当读取第一个74HC165的时候,应该使用ReadOn165(1),读取后方的74165应该传入参数0。
如果你要读第三个74HC165,那么你需要调用三次函数,建议使用数组来存数据,这样可以收集到所有的采样数据。
代码验证过了没有问题,在下面贴出来
/*传入参数1:读取第一个74165
传入参数2:读取非第一个74165*/
uint8_t ReadOn165(uint32_t num) { uint8_t data = 0; //用于存储读取到的8位数据 //循环读取8次数据if((num){ // 读取Q7引脚的状态 if(gpio_input_bit_get(GPIO_PORT_165QH, GPIO_PIN_165QH) == SET)//等于1即并行输入D7引脚的按键被按下data |= 0x01;elsedata |= 0x00;for (int i = 0; i < 7; i++) {data = data << 1;//CP产生一个上升沿(低 -> 高),数据移位gpio_bit_reset(GPIO_PORT_165CP,GPIO_PIN_165CP); // SHCP设置为低电平 delay_1us(20); gpio_bit_set(GPIO_PORT_165CP,GPIO_PIN_165CP); // SHCP设置为高电平delay_1us(20); if(gpio_input_bit_get(GPIO_PORT_165QH, GPIO_PIN_165QH) == SET)data |= 0x01;elsedata |= 0x00;} }else{for (int i = 0; i < 8; i++) {data = data << 1;//CP产生一个上升沿(低 -> 高),数据移位gpio_bit_reset(GPIO_PORT_165CP,GPIO_PIN_165CP); // SHCP设置为低电平 delay_1us(20); gpio_bit_set(GPIO_PORT_165CP,GPIO_PIN_165CP); // SHCP设置为高电平delay_1us(20); if(gpio_input_bit_get(GPIO_PORT_165QH, GPIO_PIN_165QH) == SET)data |= 0x01;elsedata |= 0x00;} }return data;
}