>写在前面的话:对于蓝桥杯的题目,涉及到AD转换(PCF8591),时钟(DS1302),温度读取(DS18B20),掉电存储(AT24C20)方面的东西都是要用到通讯协议的,但是实质上并不难,因为比赛官方会给参赛者提供相关的底层驱动程序,参赛者要做的,仅仅是实现其功能,或是利用时序发送指令,读写数据罢了。总的来说,这一部分并不是蓝桥杯单片机比赛的难点,仅仅要求熟练使用即可。
【一】掉电存储
这次我仍然使用一种老掉牙的方法来实现掉电存储的效果:数码管每过1S 加一 ,关闭电源之后再开机,数码管的计数会从之前掉电时数字的计数继续加一。
由于这款单片机其实不用AT24C02也可以实现掉电存储,所以本人就自作主张的把IAP功能也写入了,经过试验是可以使用的,使用的时候只需要把这个 #define USE_IAP 0 0 改成 1就行了 ,当然,具体用哪种方法就要看题目怎么说了。。。。
话不多说,直接呈上代码:
#include<stc15f2k60s2.h>
#include<CT107D.h>
#include<display.h>
#include<eeprom.h>
#include<IIC.h>
#define USE_IAP 0
unsigned char timer;
unsigned char time_counter;
bit swtichSmg;
void init_timer(){
TMOD=0x00;
TH0=0xdc;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
}
void main(){
init_buzz();
#if USE_IAP
timer=read_byte(0x2333);
#else
timer=IIC_readbyte(0x01);
#endif
init_timer();
while(1){
if(time_counter==100){
time_counter=0;
timer++;
#if USE_IAP
del_byte(0x2333); if(IAP_CONTR&0x10==0x10)IAP_CONTR&=0xef;
write_byte(0x2333,timer);
#else
IIC_writebyte(0x01,timer);
#endif
if(timer>=60){
timer=0;
}
}
}
}
void timer_ser() interrupt 1{
time_counter++;
swtichSmg=~swtichSmg;
display_sec(timer,swtichSmg);
}
另外还有一个小问题,就是上电的时候数码管会闪烁(乱闪)个 0.5 s左右,不影响正常使用,如果有可以解决的大神来解决一下~
掉电存储.zip
(49.48 KB)
【二】PCF8591
这个就没什么好说的了,就是选好通道,读取数据啊读取数据。。。
两年前写的程序了,所以可能会有点乱哈~
AD.zip
(41.3 KB)
总而言之,都是IIC通讯协议了,没什么好说的;还是那句话,蓝桥杯最重要的是综合,把所有模块综合到一块就很难了,所以近期我会尽快把所有单独模块的例程讲完,然后就开始综合例程的讲解了,希望大家能够支持!
|
嗯哼,不错