久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2704|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

lcd1602顯示DS1302的時(shí)間,咋在47秒和57秒的時(shí)候就顯示3.14的符號(hào)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:250781 發(fā)表于 2017-11-21 19:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
要是再加個(gè)18B20的話,溫度只顯示4個(gè)0,單獨(dú)顯示溫度又沒問題,不知哪位能指點(diǎn)我這棵小白菜

#include <reg52.H>
#include <lcd1602.H>
#include <ds1302.H>                                                         
/*******************************************************************************
* 函數(shù)名         :LCDWriteData()
* 函數(shù)功能                 :1602顯示與時(shí)間溫度函數(shù)
* 輸入           : 無(wú)
* 輸出                  : 無(wú)
*******************************************************************************/
void LCDWriteData()
{         LCD1602WriteCom(0x80);
         LCD1602WriteData('2');                                  //2
         LCD1602WriteData('0');                                  //0
         LCD1602WriteData('0'+TIME[6]/16);          //1
         LCD1602WriteData('0'+(TIME[6]&0x0f));//7年
         LCD1602WriteData('-');                                  //-
         LCD1602WriteData('0'+TIME[4]/16);          //0
         LCD1602WriteData('0'+(TIME[4]&0x0f));//5月
         LCD1602WriteData('-');                                  //-
         LCD1602WriteData('0'+TIME[3]/16);          //0
         LCD1602WriteData('0'+(TIME[3]&0x0f));//7號(hào)

         LCD1602WriteCom(0x8b);
         LCD1602WriteData('0'+(TIME[5]&0x0f));//星期6

         LCD1602WriteCom(0xc0);
         LCD1602WriteData('0'+TIME[2]/16);           //時(shí)
         LCD1602WriteData('0'+(TIME[2]&0x0f));
         LCD1602WriteData(':');
         LCD1602WriteData('0'+TIME[1]/16);           //分
         LCD1602WriteData('0'+(TIME[1]&0x0f));
         LCD1602WriteData(':');
         LCD1602WriteData('0'+TIME[0]/16);           //秒
         LCD1602WriteData('0'+(TIME[0]&0x0f));         
                                                                                          
       

}

void main()
{
          Ds1302Init();           //1302初始化
          LCD1602Init();   //1602初始化
         while(1)
         {          Ds1302ReadTime();        //讀取時(shí)鐘信息
          LCDWriteData();        //1602顯示與時(shí)間溫度函數(shù)

         }
}
#include <ds1302.H>

//---DS1302寫入和讀取時(shí)分秒的地址命令---//
//---秒分時(shí)日月周年 最低位讀寫位;-------//
uchar code READ[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

//---DS1302時(shí)鐘初始化2016年5月7日星期六12點(diǎn)00分00秒。---//
//---存儲(chǔ)順序是秒分時(shí)日月周年,存儲(chǔ)格式是用BCD碼---//
uchar TIME[7] = {0, 0, 0x12, 0x25, 0x11, 0x06, 0x16};                         
                                                                                                                       
/*******************************************************************************
* 函 數(shù) 名         : Ds1302Write
* 函數(shù)功能                   : 向DS1302命令(地址+數(shù)據(jù))
* 輸    入         : addr,dat
* 輸    出         : 無(wú)
*******************************************************************************/
                                                                                                               
void Ds1302Write(uchar addr, uchar dat)
{
                uchar i;
                DS1302_RST=0;
                _nop_();

                DS1302_LCDK=0;
                _nop_();

                DS1302_RST=1;
                _nop_();

                for(i=0;i<8;i++)
                {
                  DS1302_IO=addr&0x01;
                  addr>>=1;
                  DS1302_LCDK=1;
                  _nop_();
                  DS1302_LCDK=0;
                  _nop_();
               
                }

                for(i=0;i<8;i++)
                {
                  DS1302_IO=dat&0x01;
                  dat>>=1;
                  DS1302_LCDK=1;
                  _nop_();
                  DS1302_LCDK=0;
                  _nop_();
               
                }
          DS1302_RST=0;
                  _nop_();

}                                                                                                                  

/*******************************************************************************
* 函 數(shù) 名         : Ds1302Read
* 函數(shù)功能        : 讀取一個(gè)地址的數(shù)據(jù)
* 輸    入         : addr
* 輸    出         : dat
*******************************************************************************/
                                                                                                                  
uchar Ds1302Read(uchar addr)
{
                uchar i,dat ,dat1;
                DS1302_RST=0;
                _nop_();

                DS1302_LCDK=0;
                _nop_();

                DS1302_RST=1;
                _nop_();

                for(i=0;i<8;i++)
                {
                  DS1302_IO=addr&0x01;
                  addr>>=1;
                  DS1302_LCDK=1;
                  _nop_();
                  DS1302_LCDK=0;
                  _nop_();
               
                }
                  _nop_();

                for(i=0;i<8;i++)
                {
                   dat1=DS1302_IO;
                   dat=(dat>>1)|(dat1<<7);
                   DS1302_LCDK=1;
                   _nop_();
                   DS1302_LCDK=0;
                   _nop_();

                }
                DS1302_RST=0;
                _nop_();
                DS1302_LCDK=1;
                _nop_();
                DS1302_IO=0;
                _nop_();
                DS1302_IO=1;
                _nop_();

                return dat;
}
                                                                                                                  
/*******************************************************************************
* 函 數(shù) 名         : Ds1302Init
* 函數(shù)功能                   : 初始化DS1302.
* 輸    入         : 無(wú)
* 輸    出         : 無(wú)
*******************************************************************************/
                                                                                                                 
void Ds1302Init()
{
           uchar i;
           Ds1302Write(0x8e, 0x00);
           for(i=0;i<7;i++)
           {
                   Ds1302Write(WRITE[i], TIME[i]);
           }
           Ds1302Write(0x8e, 0x80);
}
                                                                                                                  
/*******************************************************************************
* 函 數(shù) 名         : Ds1302ReadTime
* 函數(shù)功能                   : 讀取時(shí)鐘信息
* 輸    入         : 無(wú)
* 輸    出         : 無(wú)
*******************************************************************************/
                                                                                                               
void Ds1302ReadTime()
{
           uchar i;
           for(i=0;i<7;i++)
           {
                   TIME[i]=Ds1302Read(READ[i]);
           }
}                                                                                                                         

                                                                                                       










分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:96682 發(fā)表于 2017-11-22 00:19 | 只看該作者
就粘貼出來(lái)的源代碼根本與 DS18B20 溫度探頭沒有半毛錢關(guān)系。
回復(fù)

使用道具 舉報(bào)

板凳
ID:164602 發(fā)表于 2017-11-22 08:28 | 只看該作者
很老的問題了。
1602同時(shí)顯示1302和18B20的數(shù)據(jù),如果僅僅是兩個(gè)程序合并,那是不行的。
看這個(gè):
問題終于解決了,雖然不知道為什么,現(xiàn)在總算實(shí)現(xiàn)了同時(shí)顯示溫度和時(shí)間了。
關(guān)鍵點(diǎn)是寫地址讀數(shù)據(jù)函數(shù),多添加幾條指令,加粗紅色字體代碼,如下:

uint8 read_1302(uint8 addr)//先向1302寫地址,再讀數(shù)據(jù)
{
uint8  dat;
RST=0;
_nop_();
CLCK=0;
_nop_();
RST=1;
_nop_();
DS1302WriteByte(addr);//寫地址
dat=DS1302RradByte();//讀數(shù)據(jù)
CLCK=1;
_nop_();
CLCK=0;
_nop_();

RST=0;
_nop_();
RST=1;
_nop_();
  _nop_();
IO = 0;
_nop_();
IO = 1;
_nop_();

return dat;

}
這是別人費(fèi)了功夫找出來(lái)的方法。

這是我做的:

同學(xué)們,我只需要修改一個(gè)地方就可以了。。!
首先,要感謝你,試驗(yàn)出了正確的結(jié)果!
在你的結(jié)果基礎(chǔ)之上,我反復(fù)閱讀程序,注意到,你的紅色部分程序,其實(shí)就是1302的使能為高電平。
所以,最終的結(jié)果是:
在1302讀數(shù)據(jù)之后,將原程序中的使能為低電平去掉,就可以了。
即:
原程序:
unsigned char Ds1302Read(unsigned char addr)//從DS1302讀單字節(jié)數(shù)據(jù)
{
        unsigned char n,dat,dat1;//n為8位計(jì)數(shù),dat為最終返回的數(shù)據(jù)
                                                        //dat1為接收的一位數(shù)據(jù)
        CE = 0;
        _nop_();

        SCLK = 0;//先將SCLK置低電平。
        _nop_();
        CE = 1;//然后將CE置高電平。
        _nop_();

        for(n=0; n<8; n++)//開始傳送八位地址命令
        {
                DSIO = addr & 0x01;//數(shù)據(jù)從低位開始傳送
                addr >>= 1;
                SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
                _nop_();
                SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//讀取8位數(shù)據(jù)
        {
                dat1 = DSIO;//從最低位開始接收
                dat = (dat>>1) | (dat1<<7);//此處可以用595的方法判斷是0或是1
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)
                _nop_();
        }

//        CE = 0;
        _nop_();//以下為DS1302復(fù)位的穩(wěn)定時(shí)間,必須的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();

        return dat;        
}

紅色那一條語(yǔ)句,原來(lái)有,現(xiàn)在我將它去掉,就好了。其它的什么都不用改。

究其原因,可能是兩器件使能沖突。
解決此問題是今年3月的事兒。我在此論壇至少發(fā)了兩次了。

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
dpjwang + 5 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:250781 發(fā)表于 2017-11-22 18:06 來(lái)自觸屏版 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2017-11-22 08:28
很老的問題了。
1602同時(shí)顯示1302和18B20的數(shù)據(jù),如果僅僅是兩個(gè)程序合并,那是不行的。
看這個(gè):

非常感謝,你能在百忙之中幫我從中找到不足之處,按照上面的方法除掉了哪條語(yǔ)句,現(xiàn)在溫度能顯示了,只是,現(xiàn)在溫度的度號(hào)和3.14的符號(hào)還未能解決,真的非常感謝!我的1602是4位總線型
回復(fù)

使用道具 舉報(bào)

5#
ID:252387 發(fā)表于 2017-11-22 19:28 | 只看該作者
可能是兩器件使能沖突。
解決此問題是今年3月的事兒。我在此論壇至少發(fā)了兩次了。
評(píng)分
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 狠狠干在线| 久草免费在线视频 | 在线观看国产网站 | 久久久久成人精品亚洲国产 | 婷婷久久综合 | 国产日韩一区二区 | 亚洲精品免费视频 | 精品一区二区久久 | 中文字幕在线视频免费观看 | 视频一区中文字幕 | 天堂一区二区三区 | 欧美日韩成人在线 | 91porn在线| 五月婷婷在线播放 | 欧美日韩成人在线 | 国产精品久久久久久久久久久久午夜片 | 国产精品视频二区三区 | 日本成人综合 | 久久久www成人免费无遮挡大片 | aaa大片免费观看 | 国产农村妇女毛片精品久久麻豆 | 免费精品久久久久久中文字幕 | 久久伦理电影 | 香蕉大人久久国产成人av | 欧美区在线| 久久一| 精品国产一区二区三区久久 | 国产一区二区a | 麻豆一区二区三区精品视频 | 国产区视频在线观看 | 午夜免费观看网站 | 色婷婷综合久久久中文字幕 | 亚洲成人国产 | 伊人中文字幕 | 欧美日韩国产高清 | 久久剧场| 99在线免费观看视频 | 亚洲一区二区av | 成人视屏在线观看 | 一区二区精品视频 | 亚洲成色777777在线观看影院 |