56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
|
||
#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的数据
|
||
}
|