打印
[应用方案]

基于单片机的秒表程序上读写数据至24c02芯片

[复制链接]
766|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ideafor|  楼主 | 2016-6-15 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        #include<reg51.h>
                #define uchar unsigned char
                #define uint unsigned int

                bit write=0;
                sbit sda=P2^0;
                sbit scl=P2^1;
                sbit wei0=P1^0;
                sbit wei1=P1^1;
                uchar sec,tcnt;
                uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                void delay()
                { ; ; }
                void delayms(uint z)
                {
                        uint x,y;
                        for(x=z;x>0;x--)
                        for(y=110;y>0;y--);

                }
                void start()
                {
                        sda=1;
                        delay();
                        scl=1;
                        delay();
                        sda=0;
                        delay();
                }
                void stop()
                {
                        sda=0;
                        delay();
                        scl=1;
                        delay();
                        sda=1;
                        delay();
                }
                void respons()
                {
                        uchar i;
                        scl=1;
                        delay();
                        while((sda==1)&&(i<250))i++;
                        scl=0;
                        delay();
                }
                void init()
                {
                        sda=1;
                        delay();
                        scl=1;
                        delay();
                }
                void write_byte(uchar date)
                {
                        uchar i,temp;
                        temp=date;
                        for(i=0;i<8;i++)
                        {
                                temp=temp<<1;
                                scl=0;
                                delay();
                                sda=CY;
                                delay();
                                scl=1;
                                delay();
                        }
                        scl=0;
                        delay();
                        sda=1;
                        delay();
                }
                uchar read_byte()
                {
                        uchar i,k;
                        scl=0;
                        delay();
                        sda=1;
                        delay();
                        for(i=0;i<8;i++)
                        {
                                scl=1;
                                delay();
                                k=(k<<1)|sda;
                                scl=0;
                                delay();
                        }
                    return k;
                }
                void write_add(uchar address,uchar date)
                {
                        start();
                        write_byte(0xa0);
                        respons();
                        write_byte(address);
                        respons();
                        write_byte(date);
                        respons();
                        stop();
                }
                uchar read_add(uchar address)
                {
                        uchar date;
                        start();
                        write_byte(0xa0);
                        respons();
                        write_byte(address);
                        respons();
                        start();
                        write_byte(0xa1);
                        respons();
                        date=read_byte();
                        stop();
                        return date;

                }
                void display(uchar shi,uchar ge)
                {
                        
                        wei0=1;
                        wei1=1;
                        P0=table[shi];
                        wei0=0;
                        delayms(10);
                        wei0=1;
                        wei1=0;
                        P0=table[ge];
                        delayms(10);
                        wei1=1;
                }
                void main()
                {
                        init();
                        sec=read_add(2);
                        if(sec>100)sec=0;
                        TMOD=0x01;
                        ET0=1;
                        EA=1;
                        TH0=(65536-50000)/256;
                        TL0=(65536-50000)%256;
                        TR0=1;
                        while(1)
                        {
                                display(sec/10,sec%10);
                                if(write==1)
                                {
                                        write=0;
                                        write_add(2,sec);
                                }
                        }
                }
                void t0() interrupt 1
                {
                         TH0=(65536-50000)/256;
                        TL0=(65536-50000)%256;
                        tcnt++;
                        if(tcnt==20)
                        {
                                tcnt=0;
                                sec++;
                                write=1;
                                if(sec==100)
                                sec=0;
                        }
                }
沙发
gaoyang9992006| | 2016-6-16 18:06 | 只看该作者
不要贴个程序就跑了,要说下这个芯片咋回事,然后说清楚了,再来段例程。

使用特权

评论回复
板凳
Bermanrep| | 2016-6-18 09:39 | 只看该作者
楼主你这个程序是51单片机的吗,看着貌似是模拟的

使用特权

评论回复
地板
yiyigirl2014| | 2016-6-19 12:57 | 只看该作者
没看懂是什么意思

使用特权

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

本版积分规则

30

主题

149

帖子

1

粉丝