第十二届蓝桥杯大赛记录
请记得检查串口驱动是否安装正常!!!
我就在这点上浪费了半个多小时,结果最后也没做完题
本届赛题的主要考点在串口数据的处理,其余模块都不算太难
PWM输出波形和持续输出低电平的切换,算一点难度,但并不新鲜,第十一届已经出现过,主要是GPIO口的重新配置和定时器的开关
串口数据处理的重点是停车时间的计算(考场上并没有写出来)
纯C写的代码如下,在Keil中可将int替换为u16, char替换为u8,long int 替换为u32
#include <stdio.h>
/*
时间格式:YYMMDDhhmmss
200201120000表示:2020年2月1日12点0分0秒
*/
int Compute_Time(char* t1, char* t2)
{
long int YY, MM, DD, hh, mm, ss, TT;
// 假设停车不超过1个月,快速写出计算代码
YY = ((t2[0] - '0')*10+(t2[1] - '0')) - ((t1[0] - '0')*10+(t1[1] - '0'));
MM = ((t2[2] - '0')*10+(t2[3] - '0')) - ((t1[2] - '0')*10+(t1[3] - '0'));
DD = ((t2[4] - '0')*10+(t2[5] - '0')) - ((t1[4] - '0')*10+(t1[5] - '0'));
hh = ((t2[6] - '0')*10+(t2[7] - '0')) - ((t1[6] - '0')*10+(t1[7] - '0'));
mm = ((t2[8] - '0')*10+(t2[9] - '0')) - ((t1[8] - '0')*10+(t1[9] - '0'));
ss = ((t2[10] - '0')*10+(t2[11] - '0')) - ((t1[10] - '0')*10+(t1[11] - '0'));
TT = (DD*24*3600+hh*3600+mm*60+ss);
if(TT%3600 == 0)
{
return (TT / 3600);
}
else
{
return ((TT / 3600) + 1);
}
}
int main(void)
{
int time;
char t1[] = "200201120000";
char t2[] = "200201142105";
time = Compute_Time(t1, t2);
printf("停车%d小时\n", time);
return 0;
}