数码管控制代码:
u8 arrayDigital[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 arrayBit[] = {0x1e,0x1d,0x1b,0x17,0x0f};
void hardDelay(int n)
{
int i;
for(i=0;i<n;i++)
{
__NOP();
__NOP();
}
}
void shiftbit(u8 data)
{
HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_RESET);
if(data ==0)
HAL_GPIO_WritePin(SER_GPIO_Port,SER_Pin,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(SER_GPIO_Port,SER_Pin,GPIO_PIN_SET)
hardDelay(1);
HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_SET);
hardDelay(1);
}
void showDigital(u8 data, u8 bit)
{
u16 datashow;
if(data<16 && bit<5)
datashow = arrayBit[bit]<<8 | arrayDigital[data];
datashow = datashow<<3;
u8 sdata;
HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(RCLK_GPIO_Port,RCLK_Pin,GPIO_PIN_RESET);
for(u8 i = 0;i<13;i++)
{
sdata =( (datashow &0x8000)==0 ) ? 0 :1;
shiftbit(sdata);
datashow=datashow<<1;
}
hardDelay(1);
HAL_GPIO_WritePin(RCLK_GPIO_Port,RCLK_Pin,GPIO_PIN_SET);
}
void showTotal(u8 *pbuf)
{
for(u8 i=0;i<5;i++)
{
showDigital(pbuf[i],i);
osDelay(2);
}
}
5位数码管控制
最新推荐文章于 2024-05-17 10:17:55 发布