自律即自由,提高自控力
省赛结束快两个星期了吧,忙着准备二级考试,一直没来得及为省赛做个总结,怎么说,用一句话来总结的话,应该是努力但并未尽力吧。省赛结果不尽如人意,NE555没有学到,功能并未完全实现,无缘决赛,也是自己准备的不够充分吧,有遗憾,也郁闷了一阵子,但是想想自己还是有学到东西,大概也就够了吧,反省下来感觉自己不是很自律,接下来的日子里,希望自己能提高自控力,要更加加油哇!!!!!!
代码参考:<我的GitHub>第十届蓝桥杯省赛
emmm,本来我想详细写一下代码的,,,然后,我写完之后发现要写的好像就只有之前那两篇博客的东西,,,这届省赛试题跟第八届、第九届相比真的要简单太多,逻辑不是很复杂,底层,,,也只是一个i2c加一个pcf8591,为什么失败了呢?下面是我的总结:
void FrTest()//频率提示
{
if(flagLED == 0)
{
if(cnt < 1000)
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xFD;
P2 |= 0x1F;
}
else if(cnt < 5000)
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xF5;
P2 |= 0x1F;
}
else if(cnt < 5000)
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xFD;
P2 |= 0x1F;
}
else
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xF5;
P2 |= 0x1F;
}
}
else
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xFF;
P2 &= 0x1F;
}
}
电压显示界面只显示一个内容:RB2 的输出电压!!!!!! 比赛的时候自己并没有理解这个点,也是读题不认真的原因,电压显示界面设置了两个,一个是2v电压显示的界面,另一个是RB2输出电压显示界面,其实2v的电压是不需要显示出来的,只是用来初始化DAC输出的!!!!!
看一下DAC输出部分的代码:
u8 flagDAC = 0;//0-初始状态,1-RB2
u16 val = 0;//定义一个全局变量,储存读到的ADC通道3的电压值,也就是RB2的输出电压
void SetDAC()
{
u16 InitDAC = 200;//初始化DAC输出电压2v
if(flagDAC == 0)//DAC输出是初始状态
{
SetDACValue(InitDAC);
}
else//DAC输出随RB2改变
{
SetDACValue(val);
}
}
说明一点,通道3的电压值是在刷新显示电压时读的,因为val是一个全局变量,所以只在显示电压处读就可以了
void RefreshVal()
{
u8 i;
val = GetADCValue(3);
for(i = 6; i>2; i--)
{
LedBuff[i] = 0xFF;
}
LedBuff[7] &= 0xC1;
LedBuff[0] = LedChar[val % 10];
LedBuff[1] = LedChar[(val / 10) % 10];
LedBuff[2] = LedChar[(val / 100) % 10];
LedBuff[2] &= 0x7F;
}
写在最后:
宝宝说:“自律的艰辛总甜过懊悔的苦果”
比赛结果虽然不理想,赛后包括成绩出来以后,我的心情都挺抑郁的,觉得不应该是这个样子的,但是现在想想,有什么不应该的,没有什么是不应该的,我好像总是拿自以为是的感动来说服自己“你已经努力了”,是的,努力了,,,但是尽力了嘛??本来接触单片机的时间就不长,之前只是学了一点皮毛,真正有一点理解也只是在备赛的这一个月,每天敲几个小时代码就觉得自己努力了???这真的不算什么,自己真的有沉下心来学吗?有做到一心一意吗?没有,所以凭什么希望有好的结果???
这次比赛的失败有客观因素也有主观因素,但是占主要的还是主观因素,自己本来可以有时间去学习新的模块的,但是被自己浪费了,付出总是与结果成正比的,接下来的日子里,我会拿出百分百的努力去换取我想要的结果,因为失望的滋味真的真的太不好受了o(╥﹏╥)o,,,,也希望我失败的教训能够警醒你,请拿出真实并且足够的努力去换取你想要的结果!!!!!
愿我们都能成为更加优秀的自己!!!加油!!!
加更~~~~
这次省赛学到的知识呀:
1. 用好缓冲区!!!!!!!真的贼好使!!!!一定要理解这种思想!!!!这种思想在哪里体现的呢?看题:
就是在实现根据频率改变L4的状态这一功能时体现到的,先看一下我写的显示频率的代码,我是利用到了定时/计数器0的计数功能,P34口是定时器0的脉冲输入端口,只要P34口输入一个高电平的脉冲,计数器模式下就会自动加一,这也是频率显示的原理:
u32 cnt = 0;//记录脉冲个数
void ConfigTimer0()
{
TH0 = 0xFF;
TL0 = 0xFF;
TMOD &= 0xF0;
TMOD |= 0x04;
ET0 = 1;
TR0 = 1;
}
void InterruptTimer0()interrupt 1
{
cnt++;
}
利用cnt来记录脉冲个数,然后再一秒清0,得到的就是频率了
if(flag1s)
{
flag1s = 0;
cntBuf = cnt;//定义一个缓冲变量存储某一秒的频率
ShowNumber(cntBuf);
LedBuff[7] &= LedChar[15];
cnt = 0;
}
这里为什么要定义一个缓冲变量呢?我们知道cnt的值是不断变化的,我们可以用一个不断变化的量去和一个固定值比较吗???显然不可以!!!!如果用cnt直接去比较呢?那么L4 的状态就会是不稳定的,我的现象就是L4会是一闪一灭的状态
void FrTest()//频率提示
{
if(flagLED == 0)
{
if(cntBuf < 1000)
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xFD;
P2 &= 0x1F;
}
else if(cntBuf < 5000)
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xF5;
P2 &= 0x1F;
}
else if(cntBuf < 10000)
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xFD;
P2 &= 0x1F;
}
else
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xF5;
P2 &= 0x1F;
}
}
else
{
P2 = (P2 & 0x1F) | 0x80;
P0 = 0xFF;
P2 &= 0x1F;
}
}