STM32 数码管显示

STM32 数码管显示,第1张

一 认识二级管

常用的二级管分为两种

1,(b)图共阴极结构:是把所有 LED 的阴极作为公共端(COM) 连起来,接低电平,通常接地。


通过控制每一个 LED 的阳极电平使其发光或熄灭,阳极为高电平时LED 发光,为低电平时 LED熄灭。


如显示数字0时,a、b、ad.e、t端为高电平,其他各端为低电平。


2,(c)图共阳极结构:是把所有 LED 的阳极作为公共端(COM) 连起来,接高电平,通常接电源(如+5V )。


通过控制每一 个LED 的阴极电平使其发光或熄灭,阴极为低电平时LED 发光,为高电平时 LED熄灭。


如下图

我们以共阴极结构举例,进行计算,其过程就是二进制转化为16进制,做法如下

 

 以此列表可以看出,对于同一个字符,共阴极和共阳极的字形码是相反的

二 程序的实现

数码管静态显示电路图

 代码实现数码管也有两种方式

一如上电路图,亮两个数码管

#include "stm32f10x.h"
//定义0~9十个数字的字形码表
uint16_t table[]={0x3f,0x06,0x5b,0x4f,0x66,0x7d,0x07,0x7f,0x6f};
uint16_t disp[2];
uint16_t temp,i;

void Delay(unsigned int count)               //延时函数
{
    unsigned int i;
    for(;count!=0;count--)
    {
        i=5000;
        while(i--);
    }
}
void main(void)
{
		GPIO_InitTypeDef GPIO_InitStructure;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 		//使能GPIOB时钟
		GPIO_InitStructure.GPIO_Pin = 0xffff;                       //PC0-PC15引脚配置
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;            //配置引脚为推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //GPIOB速度为50MHz
		GPIO_Init(GPIOB, &GPIO_InitStructure);                      //初始化PC0-PC15
        while(1)                
        {
            for(i=0;i<=20;i++)
            {
              disp[1] = table[i/10];              //数码管显示十位数字的字形码
              disp[0] = table[i%10];              //数码管显示个位数字的字形码
              //十位数的字形码左移8位,然后与各位数的字形码合并
              temp = (disp[1]<<8)|(disp[0]&0x0ff);
              GPIO_Write(GPIOC,temp);
              Delay(100);
            }                                 
        }

}

代码说明:

(1)语句"GPIO_InitStructure.GP1O_ Pin = Oxfff:” 用来配置 PCO~PC15 引1脚。


为什么使用Oxfit)参数就可以配置 PCO-PC15引1脚呢?可以参考stm32110x_gpio.h 头对 GPIO Pin_x的定义。



(2)disp1数组存放数码管将显示十位和个位数字的字形码,是经常用到的显示缓冲区。


(3)语句"temp = (disp[1]<<8)|(disp[0]&0x0ff);” 的作用:disp[1]<<8是把显示十位数字的字形码左移8 位(移到高 8位),disp[0]&0x0ff 是保留低8位,其他位清零(高8 位清零),然后把高8位(十位)和低8 位(个位)合并,完成循环显示 0-20字形码的显示效果。


二 第二种代码实现的方法

//头文件
#include "stm32f10x.h"
#include "GPIOLIKE51.h"        


#define CLK  PBout(8)
#define DAT  PBout(9)
#define W1   PBout(4)
#define W2   PBout(5)
#define W3   PBout(6)
#define W4   PBout(7)


//函数声明
void GPIO_Configuration(void);

void delay(int m)   
{
   int i,j;
   for(i=0;i

代码说明:

(1)这个程序是电亮4个数码管。


(2)头文件第二行“#include "GPIOLIKE51.h" ”这个是一个点h文件,具体作用我会写到下一个博客里(STM3中的“GPIOLIKE51.h”_奋发图强的小rui的博客-CSDN博客)。


(3)“nCount”这是一个没有返回值的带形式参数的函数函数名称是Delay,同时函数的参数部分中的_IO是类型修饰符;u32是数据类型,同等于uint_32_t同等于unsigned int型。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)