本帖最后由 jinglixixi 于 2023-9-26 17:04 编辑
对于CW32L031这款开发板,由于自身没有配置相应的显示器件,为此在占用引脚资源不多的情况下,为其配置了一个供测试用的点阵显示模块。 该点阵模块的核心是采用MAX7219来实现串并转换,并具有数据锁存和显示刷新功能。 点阵模块与开发板的连接关系为: DIN---PA3 CLK--- PA4 CS --- PA5 使用GPIO口输出高低电平的引脚定义为: #define DIN_SetHigh() GPIO_WritePin(CW_GPIOA, GPIO_PIN_3, GPIO_Pin_SET) //CLK #define DIN_SetLow() GPIO_WritePin(CW_GPIOA, GPIO_PIN_3, GPIO_Pin_RESET) #define CLK_SetHigh() GPIO_WritePin(CW_GPIOA, GPIO_PIN_4, GPIO_Pin_SET) //DIN #define CLK_SetLow() GPIO_WritePin(CW_GPIOA, GPIO_PIN_4, GPIO_Pin_RESET) #define CS_SetHigh() GPIO_WritePin(CW_GPIOA, GPIO_PIN_5, GPIO_Pin_SET) //CS #define CS_SetLow() GPIO_WritePin(CW_GPIOA, GPIO_PIN_5, GPIO_Pin_RESET) 所用引脚的工作模式配置函数为: void MAX7219_gpio(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.IT = GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pins = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
GPIO_Init(CW_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,char dat)
{
CS_SetLow();
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
CS_SetHigh();
}
对MAX7219进行初始化的函数为: void Init_MAX7219 (void)
{
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}
为进行显示输出,所使用的字模被放置在数组中,其存储结构为: unsigned char disp[38][8]={ {0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0 {0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1 {0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E},//2 … } 实现点阵模块显示测试的主程序为: int32_t main(void)
{
char i,j;
unsigned int k;
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
__RCC_GPIOC_CLK_ENABLE();
MAX7219_gpio();
Init_MAX7219 ();
while(1)
{
for(j=0;j<38;j++)
{
for(i=1;i<9;i++)
{
Write_Max7219(i,disp[j][i-1]);
}
Delay(0xFFFF);
Delay(0xFFFF);
Delay(0xFFFF);
Delay(0xFFFF);
}
}
}
经程序的编译与下载,其测试效果如图1至图3所示。
图1 显示数字
图2 显示字符
图3 显示汉字
由此可见,CW32L031开发板还是非常便于功能扩展的,其引脚资源也大多数通过扩展接口提供给了使用者。 |