自己做的设计, 使用通用定时器产生0.01秒时间单位进行倒计时,在LCD上显示剩余时间(分钟、秒、秒小数各2位)和双方分数,用4个按钮控制时间启动/暂停、双方加减分数。
单片机源程序如下:
- #include "stm32f10x.h"
- #include "bsp_led.h"
- #include "bsp_exti.h"
- #include "./usart/bsp_usart.h"
- #include "./lcd/bsp_ili9341_lcd.h"
- #include "./flash/bsp_spi_flash.h"
- #include "./SysTick/bsp_SysTick.h"
- #include "./beep/bsp_beep.h"
- //变量说明:start_stop;比赛开始/暂停 fen_up;加分 fen_down;减分 red_team;红队 blue_team:蓝队
- int start_stop=0,fen_up=0,fen_down=0,red_team=0,blue_team=0;
- int red_team_fen=0,blue_team_fen=0; //red_team_fen,红队比分 ; blue_team_fen蓝队比分
- int a=0; //判断红蓝对的标志
- uint8_t s[5],t[5];
- //int time[0];
- uint8_t s1=0,s2=0,s3=0,s4=0; //时间变量 毫秒s1; 秒s2; 分s3; 时s4;
- void time_runing(void); /* 比赛时间计算函数 */
- void time_runing_test(void); /* 比赛时间显示函数 */
- void time_inti(void); /* 比赛时间初始化 */
- void fen_test(void); /* 红蓝队得分显示函数 */
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
- int main(void)
- {
- /* LED 端口初始化 */
- LED_GPIO_Config();
- EXTI_Key_Config();
- ILI9341_Init ();
- SysTick_Init();
- USART_Config();
- BEEP_GPIO_Config();
- ILI9341_GramScan ( 6 );
- LCD_SetColors(RED,BLACK);
- ILI9341_DisplayStringEx(48,20,24,24,"篮球比赛计分",0);
- LCD_SetColors(GREEN,BLACK);
- ILI9341_DisplayStringEx(20,60,20,20,"比赛时间:",0);
- time_runing_test();
- LCD_SetColors(GREEN,BLACK);
- ILI9341_DisplayStringEx(70,90,20,20,"红蓝队比分",0);
- ILI9341_DispString_EN_CH(20,120,"红队:");
- ILI9341_DispString_EN_CH(120,120,"蓝队:");
- fen_test();
- while(1)
- {
- if(start_stop)
- {
- time_runing();
- time_runing_test();
- if(s3==10)
- {
- start_stop=0;
- time_inti();
- BEEP( ON_ ); // 响
- Delay_s(5);
- // BEEP( OFF_ ); // 不响
- // Delay_s(0x0FFFFF);
- }
- }
- fen_test();
- }
- }
- /*红蓝队得分显示函数*/
- void fen_test(void)
- {
- LCD_SetColors(BLUE,BLACK);
- sprintf(t,"%d",red_team_fen);
- if(red_team_fen<10)
- {
- ILI9341_DispString_EN_CH(68,120,"0");
- ILI9341_DispString_EN_CH(76,120,t);
- }
- else
- ILI9341_DispString_EN_CH(68,120,t);
-
- sprintf(t,"%d",blue_team_fen);
- if(blue_team_fen<10)
- {
- ILI9341_DispString_EN_CH(168,120,"0");
- ILI9341_DispString_EN_CH(176,120,t);
- }
- else
- ILI9341_DispString_EN_CH(168,120,t);
- //ILI9341_DispString_EN_CH(120,120,blue_team_fen);
- }
- /* 比赛时间初始化 */
- void time_inti(void)
- {
- s2=0;s1=0;s3=0;s4=0;
- }
- /* 比赛时间显示函数 */
- void time_runing_test(void)
- {
- LCD_SetColors(BLUE,BLACK);
- sprintf(s,"%d",s3);
- if(s3<10)
- {
- ILI9341_DisplayStringEx(120,60,20,20,"0",0);
- ILI9341_DisplayStringEx(130,60,20,20,s,0);
- }
- else
- {
- ILI9341_DisplayStringEx(120,60,20,20,s,0);
- }
- ILI9341_DisplayStringEx(140,60,20,20,":",0);
-
- sprintf(s,"%d",s2);
- if(s2<10)
- {
- ILI9341_DisplayStringEx(150,60,20,20,"0",0);
- ILI9341_DisplayStringEx(160,60,20,20,s,0);
- }
- else
- {
- ILI9341_DisplayStringEx(150,60,20,20,s,0);
- }
- ILI9341_DisplayStringEx(170,60,20,20,":",0);
-
- sprintf(s,"%d",s1);
- if(s1<10)
- {
- ILI9341_DisplayStringEx(180,60,20,20,"0",0);
- ILI9341_DisplayStringEx(190,60,20,20,s,0);
- }
- else
- {
- ILI9341_DisplayStringEx(180,60,20,20,s,0);
- }
- }
- /* 比赛时间计算函数 */
- void time_runing(void)
- {
- Delay_ms(1);
- s1++;
- if(s1==100)
- {
- s2++;
- s1=0;
- }
- if(s2==60)
- {
- s3++;
- s2=0;
- }
- if(s3==60)
- {
- s4++;
- s3=0;
- }
- }
复制代码
所有资料51hei提供下载:
基于STM32篮球比赛计分.7z
(217.96 KB, 下载次数: 120)
|