本帖最后由 jinglixixi 于 2022-6-9 18:27 编辑
对任何一款开发板来说,人机交互功能都是十分必要的。对LKS32MC081开发板也不例外,那为它配置怎样一个显示器件呢? 由于该开发板是一款面向电机控制的板子,在直接使用扩展引脚的情况下,可控自由使用的引脚并不太多。为此,为它配置一个以串行模式工作的数码管模块是比较适于在工控环境下使用的。 为测试所用引脚的正确性,特以LED模块进行了测试,其线路连接如图1所示,使用的引脚为P1.10。 经测试,其效果如图2所示,说明用法是正确的,这样就可以进行串行数码管的驱动了。 图1 器件连接 图2 测试效果 该串行数码管模块的外观如图3所示,可显示8位数字。它设有输入接口和输出接口,可供级联使用以显示更多的数位,每个接口均有5个引脚。 这5个引脚的作用如下: VCC---5V电源 GND---电源地 DIN---数据引脚 CS ---片选引脚 CLK---时钟引脚 图3 串行数码管模块 该串行数码管模块的核心芯片为MAX7219,是通过它将串行信号转变为控制数码管显示的并行信号,从而达到节省引脚资源的作用。 由于该芯片具有数据锁存、编解码及驱动功能,故在使用时十分方便。 该显示模块与开发板的连接情况为: DIN---P1.11 CS ---P0.4 CLK--- P1.10 开发板的扩展接口如图4所示,可见能自由使用的资源较为有限。 图4 扩展接口 为此,对引脚的配置函数为: - void smg_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_StructInit(&GPIO_InitStruct);
- GPIO_StructInit(&GPIO_InitStruct);
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(GPIO1, &GPIO_InitStruct);
- GPIO_StructInit(&GPIO_InitStruct);
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(GPIO1, &GPIO_InitStruct);
- GPIO_StructInit(&GPIO_InitStruct);
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(GPIO0, &GPIO_InitStruct);
- }
在信号输出时,为保证信号的可靠稳定,特配置了一个延时函数,其内容如下: - void Delay_xs(u16 x)
- {
- u16 i,j;
- for(i=0;i<x;i++)
- for(j=0;j<112;j++);
- }
MAX7219的初始化函数为: - void Init_MAX7219(void)
- {
- Write_Max7219(0x09, 0xff);
- Write_Max7219(0x0a, 0x03);
- Write_Max7219(0x0b, 0x07);
- Write_Max7219(0x0c, 0x01);
- Write_Max7219(0x0f, 0x01);
- }
以模拟方式,发送字节数据的函数为: - void Write_Max7219_byte(u8 DATA)
- {
- u8 i;
- GPIO_ResetBits(GPIO0, GPIO_Pin_4);
- for(i=8;i>=1;i--)
- {
- GPIO_ResetBits(GPIO1, GPIO_Pin_10);
- if(DATA&0x80)
- {
- GPIO_SetBits(GPIO1, GPIO_Pin_11);
- }
- else
- {
- GPIO_ResetBits(GPIO1, GPIO_Pin_11);
- }
- Delay_xs(2);
- DATA=DATA<<1;
- GPIO_SetBits(GPIO1, GPIO_Pin_10);
- Delay_xs(2);
- }
- }
将数据写入寄存器的函数为: - void Write_Max7219(u8 address,u8 dat)
- {
- GPIO_ResetBits(GPIO0, GPIO_Pin_4);
- Write_Max7219_byte(address);
- Write_Max7219_byte(dat);
- GPIO_SetBits(GPIO0, GPIO_Pin_4);
- }
实现数值显示的主程序为: - int main(void)
- {
- u8 key = 0;
- u16 i;
- Hardware_init();
- smg_init();
- Init_MAX7219();
- delay(2000);
- Write_Max7219(0x0f, 0x00);
- Write_Max7219(1,8);
- Write_Max7219(2,7);
- Write_Max7219(3,6);
- Write_Max7219(4,5);
- Write_Max7219(5,4);
- Write_Max7219(6,3);
- Write_Max7219(7,2);
- Write_Max7219(8,1);
- while (1);
- }
经编译和下载,其显示效果如图5所示。 图5 显示效果
|