[STM32学习]定时器实现码表(数码管显示)

实验:要求完成码表,具体要求如下:

要求:显示格式XX.YY。 按键1 可控制计数暂停还是启动 按键2 清零(必需在暂停后才可以操作) 按键3 存储当前码表的时间,存储成功后显示y(必需在暂停后才可以操作) 按键4 显示存储的码表时间(必需在暂停后才可以操作) 按键5 记录的码表时间向下翻页(必需在暂停后才可以操作)

简单分析:

码表,其实就是显示秒的下一个单位,电子手表上一般都有码表的功能,秒到分钟一般是59秒进行,而码表的下一个单位,则要计到99上才能进位到1秒,所以需要修改定时器,将定时器修改成10ms溢出中断一次,这样记录100次后就达到了1秒。

Tim4Init(719, 999);		//	定时10ms 720*1000/72000000 = 1/100

我们在完成实验之前一定要搞清楚它的硬件电路,分析好引脚所对应的IO口,下图为数码管硬件设计图,完全可以按照电路图设计。

由上图可以知道,该数码管为四位八段数码管,引脚分析如下:

数码管电路 STM32的IO口 A1 PB2 A2 PB3 A3 PB4 A4 PB5 a PE0 b PE1 c PE2 d PE3 e PE4 f PE5 g PE6 dp PC13

通过上述电路图可知,数码管为共阳极数码管,PB2-PB5低电平选中数码管,其中,注意:PB3和PB3引脚默认状态下不是普通的IO口,所以需要用到其复用功能:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);		//	开启服用引脚时钟,保证引脚第二功能正常使用
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //关闭JTAG,使能SWD

数码管为共阳极数码管,其编码为:

//	共阳极编码 0-9 a- f
unsigned char seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

接下来是按键的截下图,如下:

引脚对应关系:

按键 STM32 的IO引脚 KEY1 PC0 KEY2 PC1 KEY3 PC2 KEY4 PC3 KEY5 PC4

接下来依据任务要求完成代码:

按键初始化:

数码管初始化:

定时器中断服务函数:

按键功能实现:

数码管功能实现:

实现效果:

源码下载地址:

经验分享 程序员 微信小程序 职场和发展