本帖最后由 jinglixixi 于 2023-7-11 12:38 编辑
#申请原创#
本打算先以I2C接口的OLED屏掌握第一个测试目标,无奈的是几经能力也没能成功,只好更换目的那点阵模块来测试一番。还别说,尽管它比OLED屏要多占用一个GPIO口,且它的能耗也比OLED屏要高,但它还是不负期待地被点亮了!
为了便于连接,所使用的引脚均由Arduino接口连接,点阵模块与开发板的具体连接关系为: sda---pb4 cs ---pb3 scl---pa15
图1 使用接口
为使所用引脚输出高低电平其定义语句为; #define DIN_SetHigh() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4,GPIO_PIN_SET) #define DIN_SetLow() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET)
#define CS_SetHigh() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3,GPIO_PIN_SET) #define CS_SetLow() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3,GPIO_PIN_RESET)
#define CLK_SetHigh() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15,GPIO_PIN_SET)
#define CLK_SetLow() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15,GPIO_PIN_RESET)
该点阵模块所采用的芯片为Max7219,其所用引脚的配置函数为: - void max7219_GPIO_Init(void)
- {
- __HAL_RCC_GPIOB_CLK_ENABLE();
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.Pin = GPIO_PIN_4;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = GPIO_PIN_3;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- __HAL_RCC_GPIOA_CLK_ENABLE();
- GPIO_InitStruct.Pin = GPIO_PIN_15;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
Max7219发送字节数据的函数为: - void Write_Max7219_byte(char DATA)
- {
- char i;
- CS_SetLow();
- for(i=8;i>=1;i--)
- {
- CLK_SetLow();
- if(DATA&0x80)
- DIN_SetHigh();
- else
- DIN_SetLow();
- DATA=DATA<<1;
- CLK_SetHigh();
- }
- }
Max7219向指定寄存器发送数据的函数为: - void Write_Max7219(char address,chardat)
- {
- CS_SetLow();
- Write_Max7219_byte(address);
- Write_Max7219_byte(dat);
- CS_SetHigh();
- }
Max7219的初始化函数为: - void Init_MAX7219_D(void)
- {
- Write_Max7219(0x0b, 0x07);
- Write_Max7219(0x0c, 0x01);
- Write_Max7219(0x0f, 0x00);
- }
为进行测试,其主程序为: - int main(void)
- {
- unsigned int i,k,j=0;
- HAL_Init();
- SystemClock_Config();
- MX_GPIO_Init();
- MX_ICACHE_Init();
- max7219_GPIO_Init();
- Init_MAX7219();
- while(1)
- {
- for(j=0;j<38;j++)
- {
- for(i=1;i<9;i++)
- {
- Write_Max7219(i,disp[j][i-1]);
- HAL_Delay(40);
- }
- HAL_Delay(200);
- }
- }
- }
经程序的编译和下载,其显示效果如图2至图4所示。 图2 显示数字
图3 显示字符
图4 显示中文
视频演示:
|