[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口,下图为数码管硬件设计图,完全可以按照电路图设计。
由上图可以知道,该数码管为四位八段数码管,引脚分析如下:
通过上述电路图可知,数码管为共阳极数码管,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};
接下来是按键的截下图,如下:
引脚对应关系:
接下来依据任务要求完成代码:
按键初始化:
数码管初始化:
定时器中断服务函数:
按键功能实现:
数码管功能实现:
实现效果:
源码下载地址:
