ananbo 发表于 2020-2-27 11:43:34

STM32F410RB HAL SPI驱动2位数码管,显示问题

原理图和程序,都是参考了论坛里各位老师的帖子拼凑而来。SPI驱动2片74hc595静态显示数码管。预想是2位数码管分别显示1和b,现在分别显示不对。不知道是什么原因。

/*****定义部分******/uint8_t TX_data={ };uint8_t data[]={            0xFC,/*0*/                        0x60,/*1*/      0xDA,/*2*/      0xF2,/*3*/      0x66,/*4*/      0xB6,/*5*/      0xBE,/*6*/      0xE0,/*7*/      0xFE,/*8*/      0xF6,/*9*/      0xEE,/*A*/                     0x3E,/*b*/      0x9C,/*C*/      0x7A,/*d*/      0x9E,/*E*/      0x8E,/*F*/      0x6E,/*H*/      0xBC,/*G*/      0x2E,/*h*/      0x1A,/*c*/      0x70,/*J*/      0x1C,/*L*/      0x2A,/*n*/      0xEC,/*N*/      0x3A,/*c*/      0xCE,/*P*/      0xE6,/*q*/      0x0A,/*r*/      0x1E,/*t*/      0x7C,/*U*/      0x02,/*-*/      0x10,/*_*/      0x00,/*空*/};
uint16_t num = 0;/****************/
/******主程序*********/int main(void){TX_data=data;//显示1TX_data=data;显示bHAL_Init();SystemClock_Config();MX_GPIO_Init();MX_SPI1_Init();while (1){   hc74959_display(num);}}/****************/
/*****595控制部分*****/void hc74959_display(uint16_t num){   {   HAL_SPI_MspInit(&hspi1);//使能SPI1    HAL_SPI_Transmit(&hspi1,TX_Data,2,100);            }   /* 让锁存输出一个高电平脉冲 */    HAL_GPIO_WritePin(LAT_GPIO_Port, LAT_Pin ,GPIO_PIN_SET);   HAL_Delay(100);   HAL_GPIO_WritePin(LAT_GPIO_Port, LAT_Pin , GPIO_PIN_RESET);    HAL_Delay(100);    HAL_GPIO_WritePin(LAT_GPIO_Port,LAT_Pin , GPIO_PIN_SET);                     }/****************/   

流水源 发表于 2020-2-27 14:05:39

数码管取模不对,或者spi发送高低位不对。

流水源 发表于 2020-2-27 14:06:49

‘1’ =0x06
‘b' = 0xEC
试下

ananbo 发表于 2020-3-2 10:34:19

流水源 发表于 2020-2-27 14:05
数码管取模不对,或者spi发送高低位不对。

万分感谢,已解决,原因是数码管取模不对。特此记录,以防止下次遗忘。
//共阴数码管段选表,有小数点:(8位共阴)
unsigned char code distab = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
页: [1]
查看完整版本: STM32F410RB HAL SPI驱动2位数码管,显示问题