找回密碼
         注冊會員
        搜索附件  
        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.

        亚洲欧美日韩精品久久亚洲区| 国产精品熟女一区二区| 精品国产一区二区三区免费| 久久久国产精品福利免费| 国产精品久久久久乳精品爆| 精品伦精品一区二区三区视频| 亚洲精品无码专区久久同性男| 亚洲中文字幕久久精品无码APP| japanese乱人伦精品| 91精品国产高清久久久久久国产嫩草| 久久精品一区二区影院| 国产精品不卡高清在线观看| 精品无人区麻豆乱码1区2区| 久久这里有精品视频| 亚洲精品tv久久久久久久久| 国产精品一级片| 欧美精品成人3d在线| 精品人妻大屁股白浆无码| 日本欧美韩国日本精品| 四虎精品免费永久免费视频| 国产精品视频第一区二区三区| 国产亚州精品女人久久久久久| 国内精品久久久久影院中国| 91精品一区国产高清在线| 精品国产高清在线拍| 亚洲码国产精品高潮在线| 欧美精品在线一区| 先锋资源中文字幕| 欧美精品一区二区精品久久| 国内精品久久久久影院中国| 影音先锋国产精品国语对白| 台湾妹子中文娱乐网| 杨幂国产精品福利在线观看| 国内精品久久久久影院薰衣草| 在线精品国产一区二区| 亚洲热线99精品视频| 国产成人精品一区二区三区| 亚洲高清国产AV拍精品青青草原 | 国产精品亚洲专区在线观看| 亚洲欧洲久久久精品| 无码精品一区二区三区免费视频|