编号:33
基于STM32的计时器
功能描述:
使用proteus 软件设计一个基于STM32的家用计时器,该系统包含多个按键、LED运行灯和时间显示(时间显示是LCD1602) 其功能如下:
1、利用按键实现设置计时时间功能,时间格式:AB:CD:E 例如01:59:8(计时时间1.设置为1分59秒8,8为0.8秒),使用长按按键功能实现时间的递增和递减设置(如按下按键不释放,时间会不断+1,直到按键释放为止),要求AB、CD、E能够独立设置计时时间
2、利用按键完成启动计时、终止计时、暂停计时功能
3、当按下某个按键启动后,运行灯LED执行1秒频率的闪烁,同时显示格式为AB:CD:E的剩余计时时间(计时器为倒计时器,从设定计时时间递减,直到00:00:0结束),时间显示0.1秒更新一次
4、计时结束时LED常亮,如设置新的计时时间,LED熄灭;当按下某个按键终止计时可提前终止计时,此时显示00:00:0,LED 熄灭
5、按下某个按键暂停计时后,LED常亮,显示格式为AB:CD:E的剩余计时时间可以通过启动按键接着计时
6、设计串口通信功能,使用PC机通过串口完成启动计时(命令A)、终止计时(命令B)、暂停计时(命令C)
AB:CD:E格式的时间中CD为00~59,E为0~9,AB为00~30
视频演示链接:
33、基于STM32的计时器
仿真图:
程序源码:
/***********************************************
***********************************************/
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "LCD1602.h"
#include "key.h"
#include "TIMER.h"
#include "usart.h"
#include "led.h"
#include "stdio.h"
#include "stdlib.h"
#include <string.h>
unsigned char Timer_star =0; //开始启动秒表标志位
unsigned char RRTimer_star =0; //开始启动秒表倒计时标志位
extern unsigned char RRhour ; //默认倒计时
extern unsigned char RRmin ;
extern unsigned char RRSec ;
extern unsigned long int RRtime;
int main(void)
{
unsigned char key_value = 0; //按键返回值
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
LED_Init();
USART1_Init(9600);
LED_Init();
KEY_Init(); //初始化端口
KEY_Init();
TIM2_Int_Init(999,719); //定时100ms
Lcd1602_Init(); //液晶1602初始化
while(1)
{
key_value = KEY_Scan(0); //按键单击
switch(key_value)
{
case 1:
KEY_Set_DSS(); //设置倒计时
break;
}
Lcd1602_String(0,0,"DTime:"); //显示时间
Lcd1602_Write_Data(RRtime/600/10+0x30);
Lcd1602_Write_Data(RRtime/600%10+0x30);
Lcd1602_Write_Data(':');
Lcd1602_Write_Data(RRtime%600/100+0x30);
Lcd1602_Write_Data(RRtime%600%100/10+0x30);
Lcd1602_Write_Data(':');
Lcd1602_Write_Data(RRtime%10+0x30);
if(KEY3==0) //开始计时
{
while(KEY3==0);
if(RRTimer_star==0||RRTimer_star==2)//如果没有开始计时 则打开计时
{
if(TimeSet>0)
{
RRTimer_star = 1; //开始计时
}
}
else if(RRTimer_star==1)
{
RRTimer_star = 2; //暂停计时
LED = 0;
}
}
if(KEY4==0) //复位计时
{
while(KEY4==0);
if(RRTimer_star==2) //如果暂停计时了 就复位清零
{
RRTimer_star = 0; //停止计时
RRhour = RRmin = RRSec = 0; //清零
RRtime = 0;
LED = 1;
}
}
}
}
软件免费下载地址:
1、Proteus仿真软件
文件内容:Proteus7.8安装包、Proteus8.6安装包、Proteus.8.10安装包、Proteus Professional 8.11 SP0安装包
链接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w
提取码:2756
3、KEIL5 MDK软件(STM32开发软件)
链接:https://pan.baidu.com/s/1t3eY-3yRdTa7jZMlijq_jg
提取码:ab58
文件下载:
https://pan.baidu.com/s/1kEMZvizC5xr7nDa5yCcPAA?pwd=5fxm