打印
[活动专区]

【AT-START-F407测评】+数码管的驱动显示

[复制链接]
548|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
通常的数码管显示是靠刷新来维持显示的,而有一种数码管显示模块是以Max7219为驱动芯片的,以串并转换的方式工作的。该显示模块能同时显示8位数字,相较于常规的数码管显示具有无需刷新维持的优势,且占用的I/O资源比较少,其显示效果如下图所示。
                              
数码管显示效果
数码管与MCU的连接关系如下:
CLK---PB9
DIN ---PB8
CS ---PB10
为便于输出高低电平的需要,所做的语句定义如下:
#define SMG_CLK_Set()   GPIOB->BSRE = GPIO_Pins_9
#define SMG_CLK_Clr()   GPIOB->BRE = GPIO_Pins_9
#define SMG_DIN_Set()   GPIOB->BSRE = GPIO_Pins_8
#define SMG_DIN_Clr()   GPIOB->BRE = GPIO_Pins_8
#define SMG_CS_Set()    GPIOB->BSRE = GPIO_Pins_10
#define SMG_CS_Clr()    GPIOB->BRE = GPIO_Pins_10
配置引脚为输出功能的函数为:
void  AT_eval_smg_init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins = GPIO_Pins_10|GPIO_Pins_8|GPIO_Pins_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
SMG_CLK_Set();
SMG_DIN_Set();
SMG_CS_Set();
}

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);
}

向MAX7219写入字节数据的函数为:
void Write_Max7219_byte(uchar DATA)
{
uchar i;   
SMG_CS_Clr();
for(i=8;i>=1;i--)
{
SMG_CLK_Clr();
if(DATA&0x80)
{
SMG_DIN_Set();
}
else
{
SMG_DIN_Clr();
}
DATA=DATA<<1;
SMG_CLK_Set();
}
}

实现显示效果的主程序为:
int main(void)
{
AT32_Board_Init();
AT_eval_smg_init();
Init_MAX7219();
Delay_ms(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);   
for(;;)
{
AT32_LEDn_Toggle(LED2);
Delay_ms(200);
AT32_LEDn_Toggle(LED3);
Delay_ms(200);
AT32_LEDn_Toggle(LED4);
Delay_ms(200);
}
}

经初步检测,该数码管显示模块的显示效果还是很不错的,适于替代常规的数码管显示模式。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

2756

帖子

38

粉丝