打印
[单片机类]

【一个小小的个人经验分享】【六】PCF8591+AT24C02的使用

[复制链接]
16150|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
enderman1|  楼主 | 2019-3-2 12:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
>写在前面的话:对于蓝桥杯的题目,涉及到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通讯协议了,没什么好说的;还是那句话,蓝桥杯最重要的是综合,把所有模块综合到一块就很难了,所以近期我会尽快把所有单独模块的例程讲完,然后就开始综合例程的讲解了,希望大家能够支持!

评论
aa260 2019-3-16 14:44 回复TA
嗯哼,不错 

相关帖子

沙发
enderman1|  楼主 | 2019-3-2 12:10 | 只看该作者
代码还是个人编写风格比较严重的了,希望能够理解~

使用特权

评论回复
板凳
123tyj123| | 2019-3-14 19:13 | 只看该作者
学习。。。。。

使用特权

评论回复
地板
aa260| | 2019-3-16 15:54 | 只看该作者
学到了,借鉴

使用特权

评论回复
5
aa260| | 2019-3-18 18:27 | 只看该作者
很不错哦,感谢分享

使用特权

评论回复
6
王博wangbo| | 2020-2-17 20:43 | 只看该作者
void main()
{
        init_buzz();
        init_timer();
       
        while(1)
        {
                unsigned char n=50;
                AD_value=AD_read(0x03);
                while(n--)
                {
                        display_ad(AD_value*19.8+0.5);
                }
        }
}

楼主的这段代码display_ad(AD_value*19.8+0.5);看不懂,求高手解释一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

71

帖子

12

粉丝