大家好,欢迎来到IT知识分享网。
一、说明
前面已经多次学习到点亮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" /* 数码管时钟端口、引脚定义 */ #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) #define SMG_PORT_RCC RCC_APB2Periph_GPIOC void SMG_Init(void);//数码管初始化 #endif
smg.c
#include "smg.h" /******************************************************************************* * 函 数 名 : SMG_Init * 函数功能 : 数码管初始化 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void SMG_Init() { GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO /* 开启GPIO时钟 */ RCC_APB2PeriphClockCmd(SMG_PORT_RCC,ENABLE); /* 配置GPIO的模式和IO口 */ GPIO_InitStructure.GPIO_Pin=SMG_PIN; //选择你要设置的IO口 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(SMG_PORT,&GPIO_InitStructure); /* 初始化GPIO */ }
2. 主函数
#include "system.h" #include "SysTick.h" #include "smg.h" //0~F 数码管段选数据 u8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; int main() { u8 i=0; SysTick_Init(72); SMG_Init(); while(1) { for(i=0;i<16;i++) { GPIO_Write(SMG_PORT,(u16)(~smgduan[i])); delay_ms(1000); } } } 调用 smgduan的不同数组下标,即可实现显示不同数字的功能。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/80888.html