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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6372|回復: 3
打印 上一主題 下一主題
收起左側

單片機+LCD1602上怎么同時實時顯示溫度和時間問題求救

[復制鏈接]
跳轉到指定樓層
樓主
把兩個程序合在一起溫度就只顯示00.00了,按鍵是設置時間的,這是主函數,大家看看

void main()
{
        unsigned char i;
        Int0Configuration();
        LcdInit();
        Ds1302Init();
        while(1)
        {        
                if(SetState==0)
                {
                        Ds1302ReadTime();
                }
                else
                {
                        if(K1==0)
                        {
                                Delay10ms();  
                                if(K1==0)
                                {
                                        SetPlace++;
                                        if(SetPlace>=7)
                                                SetPlace=0;                                       
                                }

                                while((i<50)&&(K1==0))
                                {
                                        Delay10ms();
                                        i++;
                                }
                                i=0;
                        }
                        if(K2==0)
                        {
                                Delay10ms();   
                                if(K2==0)
                                {
                                        TIME[SetPlace]++;
                                        if((TIME[SetPlace]&0x0f)>9)
                                        {
                                                TIME[SetPlace]=TIME[SetPlace]+6;
                                        }
                                        if((TIME[SetPlace]>=0x60)&&(SetPlace<2))
                                        {
                                                TIME[SetPlace]=0;
                                        }
                                        if((TIME[SetPlace]>=0x24)&&(SetPlace==2))
                                        {
                                                TIME[SetPlace]=0;
                                        }
                                        if((TIME[SetPlace]>=0x32)&&(SetPlace==3))  
                                        {
                                                TIME[SetPlace]=0;        
                                        }
                                        if((TIME[SetPlace]>=0x13)&&(SetPlace==4))
                                        {
                                                TIME[SetPlace]=0;
                                        }        
                                        if((TIME[SetPlace]>=0x7)&&(SetPlace==5))  
                                        {
                                                TIME[SetPlace]=1;
                                        }               
//                                        if(SetPlace==5)   
//                                        {
//                                                TIME[SetPlace]=;
//                                        }        
                                }
                                
                                while((i<50)&&(K2==0))
                                {
                                        Delay10ms();
                                        i++;
                                }
                                i=0;
                                
                        }                                                
                }
                LcdTimeDisplay();        
                LcdTempDisplay(Ds18b20ReadTemp());
        }
        
}
void LcdTimeDisplay()
{
        LcdWriteCom(0x80+0X40);
        LcdWriteData('0'+TIME[2]/16);  
        LcdWriteData('0'+(TIME[2]&0x0f));                                 
        LcdWriteData('-');
        LcdWriteData('0'+TIME[1]/16);  
        LcdWriteData('0'+(TIME[1]&0x0f));        
        LcdWriteData('-');
        LcdWriteData('0'+TIME[0]/16);  
        LcdWriteData('0'+(TIME[0]&0x0f));

        LcdWriteCom(0x80);
        LcdWriteData('2');
        LcdWriteData('0');
        LcdWriteData('0'+TIME[6]/16);
        LcdWriteData('0'+(TIME[6]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[4]/16);  
        LcdWriteData('0'+(TIME[4]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[3]/16);
        LcdWriteData('0'+(TIME[3]&0x0f));
        LcdWriteCom(0x8D);
        LcdWriteData('0'+(TIME[5]&0x07));                     
}
void LcdTempDisplay(int temp)
{

          unsigned char i, datas[] = {0, 0, 0, 0, 0};
        float tp;  
        if(temp< 0)  
          {
                  LcdWriteCom(0x80);   
                SBUF='-';
                while(!TI);
                TI=0;      
            LcdWriteData('-');   
         
                temp=temp-1;
                temp=~temp;
                tp=temp;
                temp=tp*0.0625*100+0.5;        

          }
         else
          {                        
                  LcdWriteCom(0x4a+0x80);   
            LcdWriteData('+');  
                SBUF='+';
                while(!TI);      
                TI=0;  
                tp=temp;
                temp=tp*0.0625*100+0.5;        

        }
        datas[0] = temp / 10000;
        datas[1] = temp % 10000 / 1000;
        datas[2] = temp % 1000 / 100;
        datas[3] = temp % 100 / 10;
        datas[4] = temp % 10;


        LcdWriteCom(0x4b+0x80);
        LcdWriteData('0'+datas[1]);
        SBUF = '0'+datas[1];
        while (!TI);
        TI = 0;

        LcdWriteCom(0x4c+0x80);
        LcdWriteData('0'+datas[2]);
        SBUF = '0'+datas[2];
        while (!TI);  
        TI = 0;

        LcdWriteCom(0x4d+0x80);
        LcdWriteData('.');
        SBUF = '.';
        while (!TI);  
        TI = 0;

        LcdWriteCom(0x4e+0x80);  
        LcdWriteData('0'+datas[3]);
        SBUF = '0'+datas[3];
        while (!TI);  
        TI = 0;

        LcdWriteCom(0x4f+0x80);   
        LcdWriteData('0'+datas[4]);
        SBUF = '0'+datas[4];
        while (!TI);  
        TI = 0;
        for(i=0; i<6; i++)
        {
                 SBUF = CNCHAR[ i];
                while (!TI);  
                TI = 0;
        }

}

IMG20190211111357.jpg (3.36 MB, 下載次數: 79)

IMG20190211111357.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2019-2-11 12:45 | 只看該作者
前面我回復過,因為有其它論壇的鏈接,沒有通過!今天直接給你結果:


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

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

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

//        CE = 0;
        _nop_();//以下為DS1302復位的穩定時間,必須的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();

        return dat;        
}

紅色那一條語句,原來有,現在我將它去掉,就好了。其它的什么都不用改。

究其原因,可能是兩器件使能沖突。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:277550 發表于 2019-2-11 12:59 | 只看該作者
溫度采集的部分,有問題

~~~~~~~~~~
回復

使用道具 舉報

地板
ID:719762 發表于 2020-4-13 17:45 | 只看該作者
HC6800-ES-V2.0 發表于 2019-2-11 12:45
前面我回復過,因為有其它論壇的鏈接,沒有通過!今天直接給你結果:

老哥,太感謝了,我也是被這個問題困惑了好久,按你的方法試了一下問題就解決了,感謝感謝。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人久久在线观看 | av毛片| 成人中文字幕在线观看 | 成人中文字幕在线 | 精品欧美激情精品一区 | 亚洲视频中文字幕 | 久草网站| 99精品久久久久久中文字幕 | 欧美精品1区2区3区 精品国产欧美一区二区 | 国产亚洲精品区 | 中文字幕 国产精品 | 亚洲精品久久久9婷婷中文字幕 | www.色.com| 日韩一区二区在线播放 | 超碰免费在线 | 免费在线一区二区三区 | 成人免费视频网 | 精品久久香蕉国产线看观看亚洲 | 亚洲精品永久免费 | 日韩精品一区二区三区四区 | 久久国产精品久久 | 亚洲欧美日韩精品久久亚洲区 | 久久国产精品偷 | 成人午夜黄色 | 亚洲精品一区二区三区免 | 中文字幕二区三区 | 色婷婷综合在线观看 | 欧美日一区二区 | 拍真实国产伦偷精品 | 亚洲国产欧美日韩 | 亚洲日本视频 | 精彩视频一区二区三区 | 亚洲一区二区在线 | 国产成人高清 | 草樱av| 久久精品视频在线观看 | 日日做夜夜爽毛片麻豆 | 日本免费一区二区三区四区 | 免费一级片| 成人在线中文字幕 | 91青青草视频 |