配置完成后生成代码
定义全局变量,和函数,在main函数的while中循环调用,按键处理函数和数码管函数通过一个全局变量 index联系起来
CubeMX生成的代码有“/* USER CODE BEGIN WHILE / ” “ / USER CODE END WHILE */”在BEGIN,END之间加入的代码不会在重新配置时被覆盖掉
找到 USER CODE BEGIN 0 ,在后面写上四个函数的具体定义
代码如下:
uint8_t index=0;
const uint8_t numTab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9阴码
static void SMG_Task(void);
static void HC595_WriteData(uint8_t data);
static void KEY_Up_Task(void);
static void KEY_Down_Task(void);
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>=10000)
{
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)
{
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);
}
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>=10000)
{
count=0;
step=1;
}
}
else
{
count=0;
}
}
break;
case 1:
{
if(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin)==GPIO_PIN_SET)
{
最后
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
就答题情况而言,第一问100%都可以回答正确,第二问大概只有50%正确率,第三问能回答正确的就不多了,第四问再正确就非常非常少了。其实此题并没有太多刁钻匪夷所思的用法,都是一些可能会遇到的场景,而大多数人但凡有1年到2年的工作经验都应该完全正确才对。
只能说有一些人太急躁太轻视了,希望大家通过此文了解js一些特性。
并祝愿大家在新的一年找工作面试中胆大心细,发挥出最好的水平,找到一份理想的工作。