STM32ZET6学习记录之数码管部分

↘锁芯ラ 提交于 2019-12-26 12:35:10
  1.      开发板原理图

 

  上图可以看到数码管是共阳连接,说明给一个低电平的时候数码管的相应段会被点亮。

  相关的准备工作和LED总体类似(因为数码管和LED用的线路是相同的都是GPIOC的前八个引脚)

区别只在定义宏的时候将LED_PORT_RCC\LED_PORT\LED_PIN改为SMG_PORT_RCC\SMG_PORT\SMG_PIN即可,其余均完全类似,挂接总线和初始化的管脚操作均类似。

当然为了方便管理和提高程序的可移植性我们还是创建了一个名为SMG的文件夹。(在魔术棒中配置相应的编译路径)。

之后将初始化函数调用到主函数中即可。

以上都是和LED实验的相似点。

之后不同的是,我们用数码管显示一般通过

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

函数。该函数可以对指定的GPIOx进行值写入,也就是批量。通常我们会使用好几段数码管来显示我们的目标。再使用ResetBits和SetBits函数会很繁琐。

此时我们可以将我们要显示的目标转换成数码管中对应的二进制,换算成16进制的数,保存在一个数组当中,之后我们再对数组进行调用即可。

因为数码管分共阳和共阴连接。但是我们不必写两组数组。

我们可只写共阴的数组,若是共阳解法我们就取反,共阴就直接调用即可。

 

/******************************************************************/
/*******************************主函数部分***********************/
/******************************************************************/
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "smg.h"
unsigned int  Number[]=
{   
	0x3f,//0 --- 0011 1111  
	0x06,//1 --- 0000 0110 
	0x5b,//2 --- 0101 1011
	0x4f,//3 --- 0100 1111
	0x66,//4 --- 0110 0110
	0x6d,//5 --- 0110 1101
	0x7d,//6 --- 0111 1101
	0x07,//7 --- 0000 0111
	0x7f,//8 --- 0111 1111
	0x6f,//9 --- 0110 1111
	0x77,//a --- 0111 0111
	0x7c,//b --- 0111 1100
	0x39,//c --- 0011 1001
	0x5e,//d --- 0101 1110
	0x79,//e --- 0111 1001
	0x71 //f --- 0111 0001
};
int main()
{
	u16 i=0;
	SysTick_Init(72);
	LED_Init();
	SMG_init();
	while(1)
	{
		if(i > 15)
			i=0;
		GPIO_Write(SMG_PORT,~Number[i]);
		delay_ms(1000);
		i++;
	}
}
/*****************************************/
/*******************smg头文件*************/
/****************************************/
#ifndef _SMG_H
#define _SMG_H

#include "stm32f10x.h"

#define SMG_PORT_RCC 	RCC_APB2Periph_GPIOC
#define SMG_PORT 			GPIOC
#define SMG_PIN				GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
void SMG_init(void);


#endif

/********************************************/
/******************数码管.c文件***************/
/********************************************/
#include "smg.h"

void SMG_init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(SMG_PORT_RCC,ENABLE);
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
	GPIO_Init(SMG_PORT,&GPIO_InitStructure);
}

上面的LED函数在上一篇文章中,此处不再重复。

我用了Systick头文件只是引用了里面的delay_ms(times)函数,也可以自己编写,从而可少加一个头文件。

以上就是数码管显示0-f的过程

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!