这次的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 灯 */
12345678910111213141516171819202122232425262728293031323334我们先明确一下思路,就是通过按键去切换不同的模式,那我们就要写一个按键扫描函数
按键扫描函数
这个是可以通过写进去不同的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; }
1234567891011121314151617181920212223242526272829303132温度处理函数
然后是温度模块,用的是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
123456789101112131415161718