#include "hc165.h" //初始化74hc165 void _74hc165_init(void) { HC165_LD(1); //LD拉高,不读取按键状态 HC165_CLK(1); //时钟拉高,便于产生上升沿 } //读取74HC165 uint16_t _74hc165_read_byte(void) { unsigned char i; unsigned int temp = 0; HC165_LD(0); //LD拉低,读取按键状态 delay_us(1); HC165_LD(1); //LD拉高,停止按键读取 delay_us(1); if(HC165_DAT == 1) //等于1即并行输入D7引脚的按键被按下 { temp |= 0x01; //最低位置1表示按键被按下,反之则没按键被按下 } for(i = 0; i < 15; i ++) //因为最高位不用移位即可读取,故循环(8-1)次,依次把次高位移到最高位,第一级74HC165优先读取 { temp = temp << 1; HC165_CLK(0); //HC165_CLK = 0 ——> HC165_CLK = 1 产生上升沿,次高位D(n-1)移到高位D(n) delay_us(1); HC165_CLK(1); // delay_us(1); if(HC165_DAT == 1) { temp |= 0x01; } // delay_us(1); } return temp; }