这次的A题不是很难,直接开始吧
初始化函数就不写上去了,没什么价值。我把所有代码打包了,想下载的点这里:
电赛2020A题心电信号测量比赛代码
具体芯片的详解可以留言,有人看就再详细写一下具体的芯片细节
——————————————————————————
先把引脚标注好,好的代码风格会让你事半功倍
/*心电图
/RESET—PB10
START—PB11
/DRDY—PA8
/CS------PB12
MOSI---PB15
MISO---PB14
SCK-----PB13
*/
/*串口通信1
PA9
PA10
*/
/*
温度模块
PA0
*/
/*
蓝牙模块
PA2
PA3
*/
/*
按键模块
PB8 按键
PB9 按键
PA1 灯
*/
我们先明确一下思路,就是通过按键去切换不同的模式,那我们就要写一个按键扫描函数
按键扫描函数
这个是可以通过写进去不同的mode来控制模式。mode=1就是摁一下执行一次,mode=0就是摁一下执行完了,key就等于0了,再摁一次,key就又等于1,这次不干活,相当于保证安全。key=1的时候才干活。
u8 KEY_Scan(u8 mode)
{
static u8 key=1;
if(key==1&&(KEY1==0||KEY2==0)) //任意一个按键按下
{
delay_ms(10); //消抖
key=0;
if(KEY1==0)
{
return KEY1_VALUE;
}
else if(KEY2==0)
{
return KEY2_VALUE;
}
}
else if(KEY1==1&&KEY2==1) //无按键按下
{
key=1;
}
if(mode==1) //连续按键按下
{
key=1;
}
return 0;
}
温度处理函数
然后是温度模块,用的是lmt70,室温下它输出的是900多毫伏的电压,我们直接用stm32自带的adc去转换即可。
temp=(float)adcx*(3300.000/4096);这句,因为供电是3.3v,而且分辨率是4096,所以相当于把3.3分成4096份,adc读出来多少份,乘以对应每份多少mv,就是结果。输出结果乘个电压和温度关系的二次函数,就得到了温度。
lmt70详解点这里:(挖坑,还没写)
void tempGET(void)
{
u16 adcx;
float temp;
float tem;
while(1)
{
key=KEY_Scan(0);
if(key==2){
return; }
adcx=Get_Adc(ADC_Channel_0);
temp=(float)adcx*(3300.000/4096);
// printf("adcx:%d\t",adcx);
// printf("V:%f ",temp);
adcx=(unsigned long)(temp*1000