欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: DS1302與1602顯示時間正常,程序上電第一次初始化能寫進數據,但用按鍵無法重復調... [打印本頁]

作者: wis98    時間: 2017-6-24 15:51
標題: DS1302與1602顯示時間正常,程序上電第一次初始化能寫進數據,但用按鍵無法重復調...
DS1302與1602顯示時間正常,程序上電第一次初始化能寫進數據,但用按鍵無法重復調整時間,好像是數據沒有存入,找不到問題請教大家了下面代碼是DS1302的驅動代碼;補充說明一下,單片機用的是stc12c5a60s2,程序用仿真軟件運行都很正常,硬件部分DS1302的三個腳上都加上了1K的上拉電阻,上電后無法重復修改,程度邏輯在仿真軟件上運行都正常,仿真時重復寫入數據也正常,也對寫保護進行了重點的注意,        write_ds1302(0x8e,0x00);//去除寫保護 write_ds1302(0x8e,0x80);//加入寫保護,針對stc12c5a60s2單片機,對DS1302的讀寫程序也分別加入了延時,程序如下:
/**********************ds1302寫一個字節數據*****************************/
void write_ds1302_byte(u8 temp){
        //ds1302寫一個字節數據
        u8 i;
        for(i=0;i<8;i++)
                {
                scl=0;//scl為低時準備數據
                io=temp&0x01;//將數據放到IO口上
                temp=temp>>1;
                scl=1;//上升沿寫入
                }
}
/**********************向地址add寫入數據datds1302*****************************/
void write_ds1302(u8 add,u8 dat){
        //向地址add寫入數據dat
        rst=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        scl=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        rst=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        write_ds1302_byte(add);
        write_ds1302_byte(dat);
        rst=0;
        io=1;
        scl=1;

}
/**********************ds1302讀一個字節數據*****************************/
u8 read_ds1302(u8 add)
        {
        //ds1302讀數據
        u8 i,dat;
        rst=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        scl=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        rst=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        write_ds1302_byte(add);//首先寫入要讀的數據處的地址
        for(i=0;i<8;i++)
                {
                        dat=dat>>1;
                        scl=0;
                        if(io)dat=dat|0x80;
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_(); _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_(); _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                  scl=1;
                }

        rst=0;
        _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
_nop_();
_nop_();
_nop_(); //以下為DS1302復位的穩定時間
_nop_();
        scl=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
        scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
        io=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
io=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
        return dat;
}
下面是時間調整程序,

/**********************ds1302設定時間*****************************/
void set_time(u8 *pSecDa){
        //設定時間
        u8 i;
        u8 ucAddr = 0x80;
        write_ds1302(0x8e,0x00);//去除寫保護       
        for(i =7;i>0;i--){
                write_ds1302(ucAddr,*pSecDa); //秒 分 時 日 月 星期 年
                pSecDa++;
                ucAddr+=2;
        }
        write_ds1302(0x8e,0x80);//加寫保護       
}
時間調整程序在主循環中,根據按鈕狀態調用



作者: cjjcjj1    時間: 2017-6-24 20:45
提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1