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

標題: 單片機+LCD1602上怎么同時實時顯示溫度和時間問題求救 [打印本頁]

作者: 山山山山山    時間: 2019-2-11 11:24
標題: 單片機+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

作者: HC6800-ES-V2.0    時間: 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;        
}

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

究其原因,可能是兩器件使能沖突。
作者: devcang    時間: 2019-2-11 12:59
溫度采集的部分,有問題

~~~~~~~~~~
作者: 小阿giao    時間: 2020-4-13 17:45
HC6800-ES-V2.0 發表于 2019-2-11 12:45
前面我回復過,因為有其它論壇的鏈接,沒有通過!今天直接給你結果:

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




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