找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 1602加ds1302的實時時鐘.zip

        1602加ds1302的實時時鐘.zip

         

        基于ds1302的1602液晶問題:
        我寫了一個ds1302的程序,用的是proteus仿真,1602顯示。
        當我顯示字符串的時候,仿真是正常的。可是當我要讀回1302的時間的時候,全部都是7?,而且一直都是這個符號,不會改變的。
        奇怪的是當我把程序燒到單片機實驗板測試的時候,運行又是正常的。
        不知道有沒有人遇到過同樣的問題呢?請各位大俠幫個忙呀

        附上程序及仿真文件
        #include<reg52.h>
        #include<stdio.h>
        #include<intrins.h>
        #define uchar unsigned char
        sbit SCK=P3^6;
        sbit SDA=P3^4;
        sbit RST = P3^5;
        uchar l_tmpdateg[7] ,l_tmpdates[7] ;
        unsigned char l_tmpdate[7]={0,20,12,7,3,9,11};//秒分時日月周年08-05-15 12:00:00
        unsigned char l_tmpdisplay[8];
        code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時日月周年 最低位讀寫位
        code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
        void Write_Ds1302_byte(unsigned char temp);
        void Write_Ds1302( unsigned char address,unsigned char dat );
        unsigned char Read_Ds1302 ( unsigned char address );
        void Read_RTC( );//read RTC
        void Set_RTC( ); //set RTC
        void display();

        sbit RS = P2^4;//Pin4
        sbit RW = P2^5; //Pin5
        sbit E = P2^6;//Pi
        void delay(int i)
        {
        int j,k;
        for(k=0;k<1;k++)
        for(j=0;j<i;j++);
        }
        void write_com(uchar com)
        {
        RS=0;
        RW=0;
        delay(10);
        P0=com;
        delay(10);
        E=1;
        delay(10);
        E=0;
        delay(10);
        }
        void write_dat(uchar dat)
        {
        RS=1;
        RW=0;
        delay(10);
        P0=dat;
        delay(10);
        E=1;
        delay(10);
        E=0;
        delay(10);
        }
        void init()
        { E=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////


        void main()
        {

        init();

        Read_RTC( );
        write_com(0x80+4);
        write_dat(0x30+2);
        write_dat(0x30);
        display();

        while(1)
        {
        Read_RTC( );
        display();
        }
        }



        //////////////////////////////////////////////////////////////////////////////////////////////////
        void Write_Ds1302_Byte(unsigned char temp)
        {
        unsigned char i;
        for (i=0;i<8;i++) //循環8次 寫入數據
        {
        SCK=0;
        SDA=temp&0x01; //每次傳輸低字節
        temp>>=1; //右移一位
        SCK=1;
        }
        }
        /****************************************************************************/
        void Write_Ds1302( unsigned char address,unsigned char dat )
        {
        RST=0;
        _nop_();
        SCK=0;
        _nop_();
        RST=1;
        _nop_(); //啟動
        Write_Ds1302_Byte(address); //發送地址
        Write_Ds1302_Byte(dat); //發送數據
        RST=0; //恢復
        }
        /****************************************************************************/
        unsigned char Read_Ds1302 ( unsigned char address )
        {
        unsigned char i,temp=0x00;
        RST=0;
        _nop_();
        SCK=0;
        _nop_();
        RST=1;
        _nop_();
        Write_Ds1302_Byte(address);
        for (i=0;i<8;i++) //循環8次 讀取數據
        {
        if(SDA)
        temp|=0x80; //每次傳輸低字節
        SCK=0;
        temp>>=1; //右移一位
        SCK=1;
        }
        RST=0;
        _nop_(); //以下為DS1302復位的穩定時間
        RST=0;
        SCK=0;
        _nop_();
        SCK=1;
        _nop_();
        SDA=0;
        _nop_();
        SDA=1;
        _nop_();
        return (temp); //返回
        }
        /****************************************************************************/
        void Read_RTC( ) //讀取 日歷
        {
        unsigned char i,*p;
        p=read_rtc_address; //地址傳遞
        for(i=0;i<7;i++) //分7次讀取 秒分時日月周年
        {
        l_tmpdate=Read_Ds1302(*p);
        p++;
        }
        }
        /***********************************************************************/
        void Set_RTC( ) //設定 日歷
        {
        unsigned char i,*p,tmp;
        for(i=0;i<7;i++){ //BCD處理
        tmp=l_tmpdate/10;
        l_tmpdate=l_tmpdate%10;
        l_tmpdate=l_tmpdate+tmp*16;
        }
        Write_Ds1302(0x8E,0X00);

        p=write_rtc_address; //傳地址
        for(i=0;i<7;i++) //7次寫入 秒分時日月周年
        {
        Write_Ds1302(*p,l_tmpdate);
        p++;
        }
        Write_Ds1302(0x8E,0x80);
        }
        void display()
        {
        uchar i;
        for(i=0;i<7;i++)
        {
        l_tmpdates=l_tmpdate/16;
        l_tmpdateg=l_tmpdate%16;
        }
        write_com(0x80+6);
        write_dat(0x30+l_tmpdates[6]);
        write_dat(0x30+l_tmpdateg[6]);
        write_dat(0xb0);
        write_dat(0x30+l_tmpdates[4]);
        write_dat(0x30+l_tmpdateg[4]);
        write_dat(0xb0);
        write_dat(0x30+l_tmpdates[3]);
        write_dat(0x30+l_tmpdateg[3]);
        write_com(0x80+0x40+6);
        write_dat(0x30+l_tmpdates[2]);
        write_dat(0x30+l_tmpdateg[2]);
        write_dat(0x3a);
        write_dat(0x30+l_tmpdates[1]);
        write_dat(0x30+l_tmpdateg[1]);
        write_dat(0x3a);
        write_dat(0x30+l_tmpdates[0]);
        write_dat(0x30+l_tmpdateg[0]);


        }


        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網站地圖

        GMT+8, 2025-5-4 15:28 , Processed in 0.041144 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        国产精品午睡沙发系列| 精品99久久aaa一级毛片| 久久se这里只有精品| 久久五月精品中文字幕| 黄+色+性+人免费| 国产成人精品视频一区二区不卡| 国产欧美国产精品第一区| 国产精品麻豆欧美日韩ww| 尤物在线免费视频| 91老司机深夜福利精品视频在线观看 | 国产欧美日本精品| 亚洲国产天堂久久九九九| 国产精品VA在线观看无码不卡 | 亚洲午夜精品久久久久久浪潮| 亚洲精品无码不卡在线播HE| 国产91大片精品一区在线观看| 国产精品综合久成人| 亚洲精品无码久久久影院相关影片 | 99热国内精品| 久久久久国产精品三级网| 少妇人妻无码精品视频app| 亚洲精品国产成人99久久| 一区二区国产精品 | 亚洲AⅤ永久无码精品AA| 精品久久久久中文字幕日本| 国产三级精品三级在线观看| 无码欧精品亚洲日韩一区| 99久久免费国产精品| 亚洲欧洲精品无码AV| 99riav国产精品| 亚洲国产精品VA在线观看麻豆 | 亚洲精品制服丝袜四区| AAA级久久久精品无码区| 亚洲日韩精品A∨片无码| 国产精品美女WWW爽爽爽视频| 亚洲精品少妇30p| 国产三级精品三级| 99在线精品视频观看免费| 下载天堂国产AV成人无码精品网站| 91原创国产精品| 午夜男人女人爽爽爽视频|