在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AT89C2051+LCD1602+DS1302實時時鐘設計(c51)

            AT89C2051+LCD1602+DS1302實時時鐘設計(c51)

            作者: 時間:2016-11-10 來源:網(wǎng)絡 收藏
            #include

            #include
            #define uchar unsigned char
            sbit rs=P3^0;//LCD1602控制腳
            sbit rw=P3^1;
            sbit e=P3^2;

            本文引用地址:http://www.biyoush.com/article/201611/317454.htm

            sbit io=P3^4;//DS1302 PCI總線引腳
            sbit rst=P3^5;
            sbit sclk=P3^3;

            uchar hour,minute,second,year,months,date,day;//顯示時間寄存器
            uchar whour,wminute,wsecond,wyear,wmonths,wdate,wday;//設制初始時間寄存器
            uchar code table1[]="0123456789-:w";
            uchar code table2[]="Date:20";
            uchar code table3[]="Time:";

            void delayms(uchar k)//1ms延時
            {
            uchar j,i;
            for(i=0;ifor(j=0;j<120;j++);
            }

            void delay2us() //2us延時
            {
            _nop_();
            _nop_();
            }

            void write1602_data(uchar dat)//1602寫數(shù)據(jù)子程序
            {
            rs=1;
            rw=0;
            P1=dat;
            delayms(2);
            e=0;
            e=1;
            e=0;
            }

            void write1602_com(uchar com)//1602寫命令子程序
            //
            {
            rs=0;
            rw=0;
            P1=com;
            delayms(5);
            e=0;
            e=1;
            e=0;
            }

            void init1602()//1602初始化子程序
            {
            write1602_com(0x38);//lcd1602 16*2顯示,5*7點陣,8bit數(shù)據(jù)接口
            write1602_com(0x0f);//開顯示,顯示光標,光標閃爍
            write1602_com(0x06);//當寫一字符后地址指針加一,光標加一
            write1602_com(0x01);//清屏
            }

            void disptop() //1602第一行顯示子程序
            {
            uchar i;
            write1602_com(0x80);
            for(i=0;i<0x07;i++)
            {
            write1602_data(table2[i]);
            delayms(1);
            }
            }

            void dispbot() //1602第二行顯示子程序
            {
            uchar i;
            write1602_com(0xc0);
            for(i=0;i<0x05;i++)
            {
            write1602_data(table3[i]);
            delayms(1);
            }
            }

            /*******************************************************/

            void write1302byte(uchar dat)//1302寫入一個字節(jié)子程序
            {
            uchar i;
            sclk=0;
            for(i=0;i<8;i++)
            {
            io=(bit)(dat&0x01);
            delay2us();
            sclk=1;
            delay2us();
            sclk=0;
            dat=dat>>1;
            }
            }

            uchar read1302byte() //1302讀一個字節(jié)子程序
            {
            uchar i,dat;
            for(i=0;i<8;i++)
            {
            dat>>=1;
            if(io)
            dat|=0x80;
            delay2us();
            sclk=1;
            delay2us();
            sclk=0;
            delay2us();
            }
            return dat;
            }

            void writeset1302(uchar add,uchar dat)//1302讀子女程序
            {
            rst=0;
            delay2us();
            rst=1;
            write1302byte(add);
            write1302byte(dat);
            rst=0;
            }

            uchar readset1302(uchar add)//1302寫子程序
            {
            uchar dat;
            rst=0;
            delay2us();
            rst=1;
            write1302byte(add);
            dat=read1302byte();
            rst=0;
            return dat;
            }

            void init1302()//1302初始化子程序
            {
            uchar flag;
            flag=readset1302(0x81);//判斷1302是否有備用電池,若有則FLAG為0
            if(flag&0x80)
            {
            writeset1302(0x8e,0x00);
            writeset1302(0x80,((wsecond/10)<<4|(wsecond%10)));
            writeset1302(0x82,((wminute/10)<<4|(wminute%10)));
            writeset1302(0x84,((whour/10)<<4|(whour%10)));
            writeset1302(0x86,((wday/10)<<4|(wday%10)));
            writeset1302(0x88,((wmonths/10)<<4|(wmonths%10)));
            writeset1302(0x8a,((wdate/10)<<4|(wdate%10)));
            writeset1302(0x8c,((wyear/10)<<4|(wyear%10)));
            writeset1302(0x90,0xa5);
            writeset1302(0x8e,0x80);
            }
            }

            uchar readvalue(uchar value) //數(shù)據(jù)轉(zhuǎn)換
            {
            uchar a;
            a=((value&0x70)>>4)*10+(value&0x0f);
            return a;
            }

            void read1302() //讀取時間
            {
            uchar value;
            value=readset1302(0x81);
            second=readvalue(value);

            value=readset1302(0x83);
            minute=readvalue(value);

            value=readset1302(0x85);
            hour=readvalue(value);

            value=readset1302(0x87);
            day=readvalue(value);

            value=readset1302(0x89);
            months=readvalue(value);

            value=readset1302(0x8b);
            date=readvalue(value);

            value=readset1302(0x8d);
            year=((value&0xf0)>>4)*10+(value&0x0f);

            }

            void disptime() //時間顯示
            {
            write1602_com(0x87);
            write1602_data(table1[year/10]);
            write1602_data(table1[year%10]);
            write1602_data(table1[10]);
            write1602_data(table1[months/10]);
            write1602_data(table1[months%10]);
            write1602_data(table1[10]);
            write1602_data(table1[day/10]);
            write1602_data(table1[day%10]);
            write1602_com(0xc5);
            write1602_data(table1[hour/10]);
            write1602_data(table1[hour%10]);
            write1602_data(table1[11]);
            write1602_data(table1[minute/10]);
            write1602_data(table1[minute%10]);
            write1602_data(table1[11]);
            write1602_data(table1[second/10]);
            write1602_data(table1[second%10]);
            write1602_com(0xce);
            write1602_data(table1[12]);
            write1602_data(table1[date]);
            }

            void inittime() //初始時間設置
            {
            whour=23;
            wminute=59;
            wsecond=20;
            wyear=10;
            wmonths=12;
            wdate=3;
            wday=1;
            }

            void main()
            {
            inittime();
            init1602();
            disptop();
            dispbot();
            init1302();
            while(1)
            {
            read1302();
            disptime();
            }
            }



            評論


            技術專區(qū)

            關閉