第十一届蓝桥杯单片机心得与分享
概述
这是本人第一次参加蓝桥杯,说实话就复习了两周,做了几套真题,当今天拿到题目要求的那一刻,感觉这一届的蓝桥杯的单片机组别比较前几年来说真的蛮简单的(偷笑,主要考察的无非那几个模块的应用。
代码已经放到了我的 Gitee上面了,需要的小伙伴可以自己去下载,欢迎交流。
题目
直接上图:
可以看出今年的题目只考察了:DS18b20,PCF8591,按键,led,数码管这几个外设。相比较去年的添加的ne555,eeprom简直不是少了很多。只要足够细心一点,5个小时的时间完全足够用了。
说一下大体的思路吧:
- 1.独立按键切换模式—-分别为:数据显示模式以及设置阈值模式。
- 2.在数据显示模式:第一位显示C,后两位数码管显示温度整数值。
- 3.在阈值调节模式中:第一位显示P,后几位显示最高设定阈值以及最低设定阈值。
- 4.在设置模式中:通过独立按键S5进行参数切换(这里注意是按下S5才可以进行切换,切换的顺序是先设置最高温度,再设置最低温度)。S6和S7分别为+1/-1温度数值,并显示到数码管上面。
- 5.在设置界面以及数据显示界面同时进行LED以及DAC的自检与输出。
- 6.细节把握一定要到位。
还需要注意的是,这两届PCF8591考查的方式从ADC变成了DAC(DAC是博主前天晚上看的)侥幸侥幸。DAC的使用其实也很简单这里我就不多赘述了,主要就是判定温度在不同范围内,使用8591进行相应的电压输出。
DAC的代码:
/**
* @brief DAC输出
* @param[in] dat - 输入进行数模转换的数据
*/
void dac_pcf8591(unsigned char dat)
{
i2c_start();
i2c_sendbyte(0x90);
i2c_waitack();
i2c_sendbyte(0x40); //DAC输出模式
i2c_waitack();
i2c_sendbyte(dat);
i2c_waitack();
i2c_stop();
}
//LED任务
void LED_TASK()
{
if(MIN > MAX) //非正常温度区间 L4亮
{
Init74HC138(4);
P0 = 0xF7;
Init74HC138(0);
}
else if(temperature > MAX) //非正常温度区间 L1亮
{
Init74HC138(4);
P0 = 0xFE;
Init74HC138(0);
}
else if(temperature < MIN) //非正常温度区间 L3亮
{
Init74HC138(4);
P0 = 0xFB;
Init74HC138(0);
}
else //正常温度区间 L2亮
{
Init74HC138(4);
P0 = 0xFD;
Init74HC138(0);
}
}
//DAC任务
void DAC_TASK()
{
if(temperature > MAX) //非正常温度区间 4v
{
dac_pcf8591(203);
Vaout = VREF/255*4;
}
else if(temperature < MIN) //非正常温度区间 2v
{
dac_pcf8591(103);
Vaout = VREF/255*2;
}
else //正常温度区间 3v
{
dac_pcf8591(153);
Vaout = VREF/255*3;
}
}
温度的范围也是容易忽略的哦,我差一点就忘了这个范围的判断。
大体上的需求就是这么些,客观题我就不说了,本人小白一个数电模电学忘得差不多了(笑哭我觉得我应该错了几道,题目和源码都放在git上面了,需要的可以自行下载。如果有错误的地方欢迎指正,共同进步!谢谢。