基于Proteus无实物STM32入门自学教程(三)--静态数码管

本自学教程三开始教大家点亮 数码管,本教程为静态点亮方式。
利用STM32与数码管的接口技术,完成STM32的数码管静态显示电路设计和程序的设计、运行及调试。任务要求使用STM32F103R6芯片的PC0~PC15引脚分别接2个共阴极LED数码管。个位数码管接PC0~PC7;十位数码管接PC8~PC15。采用静态显示方式,编写程序使2位数码管上循环显示 0~20。
嵌入式电子产品常用的显示器有LED和LCD两种方式

LED数码显示器价格低廉、体积小、功耗低、而且可靠性好,因此得到广泛使用。

数码管的结构和工作原理
数码管内部是由八个LED(简称位段)组成,其中有七个条形LED和一个小圆点LED。
LED导通时,相应的线段或点发光,将这些LED排成一定图形,常用来显示数字0~9、字符A~G,还可以显示H、L、P、R、U、Y、符号“—”及小数点“.”等。
LED数码管可以分为共阴极和共阳极两种结构。

共阴极就是吧二极管的阴极全部连在一起,共阳极就是把二极管的阳极全部连在一起。

 千言万语汇成一句话,LED数码管本质就是多个led灯摆成了数码的形状而已。

那么写程序的时候还是跟上一讲一样吗?当然不是,否则就不需要再讲了。我们有另外一种简便的写法。就是事先把这些abcdefg的状态集体做成数组,方便我们来下一步使用。

数码管的字型编码,要使数码管上显示某个字符,必须使它的8个位段上加上相应的电平组合,即一个8位数据,这个数据就叫该字符的字型编码。
通常用的位段的编码规则如下图所示。


共阴极和共阳极数码管的字型编码是不同的,对于同一个字符,共阴极和共阳极的字型编码是反相的。下图给出来led数码管共阳极的数据00-08,09请同学们自行补充。

一、Proteus仿真图

仿真数码管会在00和99之间循环显示。其中74LS245为LED数码管驱动芯片,可以理解为信号放大,其过程不会改变任何电平逻辑。即单片机输出高电平,到数码管端仍为高电平。

二、MDK代码

int main(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 	//使能GPIOB时钟
	GPIO_InitStructure.GPIO_Pin = 0xffff;//PC0-PC15引脚配置
	//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;//PB8- 
     PB11引脚配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   	//配置PB8为推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //GPIOB速度为50MHz
    GPIO_Init(GPIOC, &GPIO_InitStructure);				//初始化PB8
	//GPIO_SetBits(GPIOB,GPIO_Pin_8); 					//PB8输出高电平,LED熄灭
	//GPIO_Write(GPIOC, 0x0FFFF);		//先熄灭所有数码管
	//while(1);
		
	while(1)
	{
		//GPIO_ResetBits(GPIOC, 0x0FFFF);		//先熄灭所有LED
//		temp = 0x0001;
		
		
		for(i=0;i<=99;i++)
		{
			disp[1]=table[i/10];      	//十位数码管显示0
            disp[0]=table[i%10];       	//个位数码管显示0
			temp=~((disp[1]<<8)|(disp[0]&0x0ff));
			GPIO_Write(GPIOC,temp);  
			//GPIO_SetBits(GPIOC, temp);	//向GPIOB口写控制码
			Delay(100);
			//temp =( temp<<1)+1;			// temp左移一位加1获得下一个控制码
		}
	}
}

现在公布数码管数组答案。共阳极数码管显示“0~9”十个字符的字型编码与共阴极数码管的字型编码是反相的,字型编码如下: 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
在程序中,若继续使用共阴极数码管的字型编码,可以通过对共阴极字型编码取反来获得共阳极数码管的字型编码。对共阴极字形编码取反有硬件和软件两种方法:硬件取反是通过反相器实现的;软件取反是通过取反运算符“~”实现的。

三、仿真效果和源代码资源

基于Proteus无实物STM32入门自学教程(三)--数码管-单片机文档类资源-CSDN下载


 

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
STM32F103是意法半导体(STMicroelectronics)推出的一款32位单片机,它具有丰富的外设和强大的性能,广泛应用于嵌入式系统中。 数码管显示是一种常见的输出方式,它通过控制数码管的每一位,实现对数字、字母等数据的显示。在STM32F103中,数码管显示可以借助GPIO外设实现。 首先,需要将数码管的各个引脚与STM32F103的GPIO口相连。通常数码管有多个引脚,包括共阳极与共阴极两种类型,根据数码管类型选择与之匹配的GPIO模式。 接下来,在程序中配置相应GPIO口为输出模式,并设置输出的电平状态,以控制数码管的亮暗。具体代码示例如下: ```c #include "stm32f10x.h" #define GPIO_PORT GPIOA #define GPIO_PIN_0 GPIO_Pin_0 #define GPIO_PIN_1 GPIO_Pin_1 #define GPIO_PIN_2 GPIO_Pin_2 #define GPIO_PIN_3 GPIO_Pin_3 void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; GPIO_Init(GPIO_PORT, &GPIO_InitStruct); } void displayNumber(uint8_t number) { GPIO_PORT->BRR = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; // Clear all digits GPIO_PORT->BSRR = number; // Set the desired digit } int main(void) { GPIO_Config(); while(1) { for(uint8_t i = 0; i < 10; i++) { displayNumber(i); Delay(500); // Delay for 500 milliseconds } } } ``` 上述代码通过GPIO口控制数码管的不同引脚,实现数字0-9的依次显示,通过延时函数控制显示的速度。 总结一下,STM32F103可以通过配置GPIO外设以及控制引脚的电平状态,实现对数码管的显示。开发者可以根据实际需求,编写相应的代码来控制数码管的显示内容和显示效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远都是新手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值