#include "hc165.h" //初始化74hc165 void _74hc165_init(void) { HC165_INH_L(); //初始化使能时钟,后面就不需再使能 HC165_LD_H(); //LD拉高,不读取按键状态 HC165_CLK_H(); //时钟拉高,便于产生上升沿 } unsigned int date_t = 0; //读取74HC165 uint16_t _74hc165_read_byte(void) { unsigned char i; unsigned int temp = 0; HC165_LD_L(); //LD拉低,读取按键状态 delay_tick(10); //delay_us(1); HC165_LD_H(); //LD拉高,停止按键读取 delay_tick(10); //delay_us(1); if(HC165_DAT_OUT == 1) //等于1即并行输入D7引脚的按键被按下 { temp |= 0x01; //最低位置1表示按键被按下,反之则没按键被按下 } for(i = 0; i < 15; i ++) //因为最高位不用移位即可读取,故循环(8-1)次,依次把次高位移到最高位,第一级74HC165优先读取 { temp = temp << 1; HC165_CLK_L(); //HC165_CLK = 0 ——> HC165_CLK = 1 产生上升沿,次高位D(n-1)移到高位D(n) delay_tick(10); //delay_us(1); HC165_CLK_H(); delay_tick(5); //delay_us(1); if(HC165_DAT_OUT == 1) { temp |= 0x01; } delay_tick(5); //delay_us(5); } return temp; // date = temp; // date_t = temp; // //将16位数据分离为两个8位数据 // date[0] = (unsigned char)(temp & 0x00ff); //第二级74HC165的数据 // date[1] = (unsigned char)((temp >> 8) & 0x00ff);//第一级74HC165的数据 }