|
void SMG_TASK(void)
{
static uint32_t count=0;
static uint8_t step=0;
switch(step)
{
case 0:
{
HAL_GPIO_WritePin(A1_GPIO_Port,A1_Pin,GPIO_PIN_SET);//打开位码
HC595_WriteData(numTab[index]);//写入数据段
step=1;
}
break;
case 1:
{
count++;
if(count>=500000)//延时
{
count=0;
step=0;
}
}
break;
}
}
void HC595_WriteData(uint8_t data)
{
HAL_GPIO_WritePin(RCK_GPIO_Port,RCK_Pin,GPIO_PIN_RESET);//关闭锁存器接口
for(uint8_t i=0;i<8;i++)
{
HAL_GPIO_WritePin(SCK_GPIO_Port,SCK_Pin,GPIO_PIN_RESET);//关闭串型时钟接口
if(data&0x80)//1000 0000 先存低位后存高位
{
HAL_GPIO_WritePin(DS_GPIO_Port,DS_Pin,GPIO_PIN_SET);//打开串型数据输入
}
else
{
HAL_GPIO_WritePin(DS_GPIO_Port,DS_Pin,GPIO_PIN_RESET);//关闭串型数据输入
}
HAL_GPIO_WritePin(SCK_GPIO_Port,SCK_Pin,GPIO_PIN_SET);//打开串型时钟接口
data=data<<1;
}
HAL_GPIO_WritePin(RCK_GPIO_Port,RCK_Pin,GPIO_PIN_SET);//打开锁存器接口
}
static void TIME_TASK(void)
{
static uint32_t count=0;
count++;
if(count>=100000)
{
count=0;
index++;
index=index%10;
}
}
void KEY_UP_TASK(void)
{
static uint32_t count=0;
static uint8_t step=0;
switch(step)
{
case 0:
{
if(HAL_GPIO_ReadPin( KEY_UP_GPIO_Port,KEY_UP_Pin)==GPIO_PIN_RESET)//判断是否按下按键
{
count++;
if(count>=8000)
{
count=0;
step=1;
}
}
else
{
count=0;
}
}
break;
case 1:
{
if(HAL_GPIO_ReadPin( KEY_UP_GPIO_Port,KEY_UP_Pin)==GPIO_PIN_SET)//判断是否松开按键
{
if(index<9)
{
index++;
}
else
{
index=9;
}
step=0;
}
}
break;
}
}
void KEY_DOW_TASK(void)
{
static uint32_t count=0;
static uint8_t step=0;
switch(step)
{
case 0:
{
if(HAL_GPIO_ReadPin( KEY_DOW_GPIO_Port,KEY_DOW_Pin)==GPIO_PIN_RESET)//判断是否按下按键
{
count++;
if(count>=8000)
{
count=0;
step=1;
}
}
else
{
count=0;
}
}
break;
case 1:
{
if(HAL_GPIO_ReadPin( KEY_DOW_GPIO_Port,KEY_DOW_Pin)==GPIO_PIN_SET)//判断是否松开按键
{
if(index>0)
{
index--;
}
else
{
index=0;
}
step=0;
}
}
break;
}
}
1, 自己动手焊接能加深对电路的理解
2, 一开始对hc595的运行方式不了解一头雾水,查了点资料弄清楚工作模式后就很容易了
|
|