|
本帖最后由 diiiiiii 于 2021-3-5 10:35 编辑
void led88_refresh(uint8_t *mar)
{
uint8_t *ma, i;
uint16_t dr, dc;
const TickType_t xDelay = 10 / portTICK_PERIOD_MS;
ma = mar;
dr = 0xFFFF;
dc = 0x0000;
for(i = 0; i < 8; i++)
{
dr = ~(0x01 << i) & 0xFF;
dc = *ma;
ma++;
dc = (dc << 8) | (uint16_t)*ma;
led88_c_send_data(dc);//将数据送到74hc595
led88_r_send_data(dr);
ma++;
vTaskDelay(xDelay);
}
}
static TaskHandle_t xLed88DisplayTask = NULL;
void led88_create_display_task(void)
{
xTaskCreate(led88_display_task, "led88_display_task", 2048, NULL, \
10, &xLed88DisplayTask);
}
static void led88_display_task(void* arg)
{
const TickType_t xDelay = 1 / portTICK_PERIOD_MS;
init_led88_pin();
while(1)
{
led88_refresh(data);//显示点阵
// vTaskDelayUntil( &xLastWakeTime, xFrequency );
vTaskDelay( xDelay );
}
}
电路是没问题的,裸机正常驱动74hc595。 led88_refresh()是每隔10ms换一行刷新,在led88_display_task中,1ms刷新点阵一次。但是显示仍然非常晃动,刷新感很强烈。 理论上来说,8*8点阵的刷新频率根本不需要这么快就能稳定显示。 这个现象和freertos有关系吗?
|
|