标题: 如何画这段单片机代码的流程框图 [打印本页]

作者: 15200yoxi    时间: 2022-12-15 16:41
标题: 如何画这段单片机代码的流程框图
    #include<reg51.h>
    #include<intrins.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit sda=P1^1;
    sbit scl=P1^0;
    void delay();
    void delay1();
    void start();
    void stop();
    uchar read(uchar address0,uchar wordaddress,uchar address1);
    uchar year=0,month=0,date=0,hour=0,minute=0,second=0;
    void main()
    {
            while(1)
            {        second=read(0xd0,0x00,0xd1);
                    minute=read(0xd0,0x01,0xd1);
                    hour=read(0xd0,0x02,0xd1);
                    date=read(0xd0,0x04,0xd1);
                    month=read(0xd0,0x05,0xd1);
                    year=read(0xd0,0x06,0xd1);
                            P0=hour;
                            P2=minute;
                            P3=second;
                delay1();
                            P0=year;
                            P2=month;
                            P3=date;
                delay1();
    }
    }
    void delay1()
    {
            uint i,j;
            for(i=0;i<1000;i++)
            for(j=0;j<125;j++);
            }
    void start()
    {
            scl=1;
            delay();
            sda=1;
            delay();
            sda=0;
            delay();
    }
    void delay()
    {        uchar i=125;
            while(i>0)
            i--;
    }
    void stop()
    {
            scl=1;
            delay();
            sda=0;
            delay();
            sda=1;
            delay();
    }
    uchar read(uchar address0,uchar wordaddress,uchar address1)
    {
            uchar a,a0,i,n,data1;
            start();
            for(n=0;n<3;n++)
            {
                    if(n==0)a0=address0;
            else if(n==1)a0=wordaddress;
            else if(n==2)
                    {
                    start();
                    a0=address1;
                    }
            for(i=0;i<8;i++)
                    {
                    scl=0;
                    delay();
                    a=a0;
                    a=a&0x80;
                    if(a==0x80)
                            sda=1;
                    else
                            sda=0;
                    delay();
                    scl=1;
                    delay();
                    scl=0;
                    delay();
                    a0=a0<<1;
                    }
            sda=1;
            delay();
            scl=1;
            delay();
            scl=0;
            }
            for(i=0;i<8;i++)
            {
                    data1=data1<<1;
                    sda=1;
                    delay();
                    scl=0;
                    delay();
                    scl=1;
                    delay();
                    if(sda==1)
                            data1|=0x01;
            }
            scl=0;
            delay();
            sda=1;
            delay();
            stop();
            return data1;
    }





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1