目录
前言
一.作业内容
二.效果仿真
三.电路原理图设计及说明
按键
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