2025-12-14 13:16:53

嵌入式作业--游泳竞赛冲线检测系统2 STM32F1定时器的应用 Proteus仿真

目录

前言

一.作业内容

二.效果仿真

三.电路原理图设计及说明

按键

LCD

初始化

四.软件流程图

五.主要程序代码

最后

前言

本文章记录了博主嵌入式课的作业,基于上一个作业,这篇没提到的可以看上一篇的内容。 其也可以参考到其它项目中去,比如一些多个按键中断、定时器的使用中。

一.作业内容

设计游泳竞赛冲线检测系统,要求:设计8个泳道,编号为1——8。每个泳道设置一个冲线触摸传感器(可以用开关模拟),非触摸状态时输出低电平,触摸状态输出高电平。

设置2个OLED显示屏,用来显示排名:其第一行第一位显示排列顺序为1-8名冲刺泳道,第三位开始分别显示1位泳道号(1—8)、2位分钟(00—59)、2位秒(00—59)、3位毫秒(000—999。

同时设置一个LCD1602显示器,显示当前比赛时间:2位分钟(00—59)、2位秒(00—59)。

当比赛发令时启动定时器计时,运动员选手冲线时,读取定时器当前时间,按其冲线触摸传感器的顺序在对应的LED显示其泳道编号和冲线时间。

二.效果仿真

定时器应用

三.电路原理图设计及说明

按键

选用8个按键模拟冲线触摸传感器,8个LED指示灯对应8个泳道,当运动员选手冲线时(开关按下高电平)对应泳道的LED指示灯亮。 再加一个按键当作比赛发令,按下计时器开始计时比赛开始。 设置PA口为下拉输入模式,默认状态为低电平0,按下按键时PA0-PA7口与VCC相连,其状态由低电平0变为高电平1,触发中断,中断里先延时消抖再读取按键的IO(PA)电平状态判断按键是否按下,从而控制PA8-PA15口输出低电平实现控制LED灯亮和OLED显示排名、泳道号和时间。

LCD

LCD ( Liquid Crystal Display 的简称)液晶显示器。能够同时显示16x2,32个字符,是一种专门用来显示字母、数字、符号等的点阵型液晶模块。 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。该显示屏的优点是耗电量低、体积小、辐射低。 LCD1602主要用来显示数字、字母、图形以及少量自定义字符。可以显示2行16个字符,拥有16个引脚,其中8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节V0和背光源AK。 接线方式用连线标号模式,可以让电路仿真图更加清晰明了。

其中8个按键连接PA0-PA7;

LED连接PA8-PA15;

一个比赛发令按键连接PC8;

LCD1602的RS、R/W、EN分别接PB0、PB1和PB2,数据端D0-D7连接PC0-PC7;

OLED的SCL、SDA分别接PB10和PB11,OLED的SCL、SDA分别接PB6和PB7;

初始化

四.软件流程图

五.主要程序代码

中断初始化与上一篇相同,不再赘述 中断服务函数有所改变,在中断服务函数里显示OLED和定时器计时

uint16_t a=0;//变量a就是个排序的作用

void ShowInOled(int number){

a++;

OLED_ShowNum(a, 3, number, 1);

OLED_ShowNum(a, 5, min, 2);

OLED_ShowNum(a, 8, second, 2);

OLED_ShowNum(a,11,TIM_GetCounter(TIM2),3);

}

void ShowInOled_1(int number){

a++;

OLED1_ShowNum(a-4, 3, number, 1);

OLED1_ShowNum(a-4, 5, min, 2);

OLED1_ShowNum(a-4, 8, second, 2);

OLED1_ShowNum(a-4,11,TIM_GetCounter