| >写在前面的话:对于蓝桥杯的题目,涉及到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, 下载次数: 28) 
 【二】PCF8591
 
 这个就没什么好说的了,就是选好通道,读取数据啊读取数据。。。
 
 两年前写的程序了,所以可能会有点乱哈~
 
 
  AD.zip
(41.3 KB, 下载次数: 61) 
 
 
 
 总而言之,都是IIC通讯协议了,没什么好说的;还是那句话,蓝桥杯最重要的是综合,把所有模块综合到一块就很难了,所以近期我会尽快把所有单独模块的例程讲完,然后就开始综合例程的讲解了,希望大家能够支持!
 
 
 |