北京中科白癜风医院诈骗曝光 http://baidianfeng.39.net/a_bdfys/161223/5153151.html

一、说明

前面已经多次学习到点亮LED的操作。我使用的这个开发板,数码管与LED是连接在一起的,本文对数码管的操作是对LED操作的函数的进一步封装。

LED数码管由发光二极管作为显示字段,7只发光二极管构成,加上一个小数点,称为八段码。数据管可能采用共阳或共阴接法,使用方法与发光二极管相同,不同材料的压降有所不同,一般为1.5~2V,额定电流为10mA, 电流为40mA,静态显示时10mA为宜。

LED与STM32相连,一般按某一顺序连接到某一个并行I/O口的D0~D7,当该I/O口输出某一特定数据时,可以让LED显示出某个字符。我使用的开发板采用共阴接法,接线图如下:

二、数码管显示方式

数码管显示有静态显示和动态显示两种方式。

静态显示时,每一位显示器的字段需要一个8位I/O口控制,I/O口支持锁存功能。静态显示编程实现容易,硬件成本较高。动态显示时,是将多个数码管的相同字段线连在一起,由一个8位I/O口控制多个数码管。而每一位的公共端由另一个I/O口控制。动态显示需要采取轮流显示的方式显示信息,占用I/O端口线少,编程较为复杂。

三、静态显示的实现

1.封装数码管操作函数

smg.h

#ifndef_smg_H#define_smg_H#include"system.h"/*数码管时钟端口、引脚定义*/#defineSMG_PORT      GPIOC#defineSMG_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)#defineSMG_PORT_RCC    RCC_APB2Periph_GPIOCvoidSMG_Init(void);//数码管初始化#endif

smg.c

#include"smg.h"/********************************************************************************函数名:SMG_Init*函数功能    :数码管初始化*输入:无*输出:无*******************************************************************************/voidSMG_Init(){  GPIO_InitTypeDefGPIO_InitStructu;//声明一个结构体变量,用来初始化GPIO  /*开启GPIO时钟*/  RCC_APB2PeriphClockCmd(SMG_PORT_RCC,ENABLE);    /*配置GPIO的模式和IO口*/  GPIO_InitStructu.GPIO_Pin=SMG_PIN;  //选择你要设置的IO口  GPIO_InitStructu.GPIO_Mode=GPIO_Mode_Out_PP;  GPIO_InitStructu.GPIO_Speed=GPIO_Speed_50MHz;  GPIO_Init(SMG_PORT,GPIO_InitStructu);    /*初始化GPIO*/}

2.主函数

#include"system.h"#include"SysTick.h"#include"smg.h"//0~F数码管段选数据u8smgduan[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};intmain(){  u8i=0;  SysTick_Init(72);  SMG_Init();    while(1)  {    for(i=0;i16;i++)    {      GPIO_Write(SMG_PORT,(u16)(~smgduan[i]));      delay_ms();      }    }}调用smgduan的不同数组下标,即可实现显示不同数字的功能。



转载请注明地址:http://www.abmjc.com/zcmbjc/1593.html