找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3436|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

請問朋友這個溫度計程序要顯示負(fù)55度要怎樣改�。�!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:69408 發(fā)表于 2014-11-25 14:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
只是一個溫度計程序,可是只能顯示0-128度(圖1),在0度以下就不能正常顯示了(正95度顯示圖2 095.0度),比如負(fù)1度顯示的是95度(如圖3),要怎樣修改�。�?
下面是程序和仿真圖
         #include<reg52.h>
  #include <intrins.h>
        #define uchar unsigned        char
         #define uint unsigned        int
          sbit ds=P2^2; //位定義ds引腳
         sbit dula=P2^6 ;
         sbit wela=P2^7        ;
         
         
         uchar code table_du[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} ;//{0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; //

       
         
         bit flag; //標(biāo)志位
         uint temp,num;        //定義顯示變量


            //--------函數(shù)聲明---------//
          void delay(uint z);
         void display(uint temp);
        void delayus(uint t)//延時函數(shù)
        {
         while(t--)        ;

        }

         void ds_reset()//復(fù)位函數(shù)
         {
          ds=1;                   //拉高總線
          delayus(5);        //延時約60us
          ds=0;                        //拉低總線
          delayus(80);//延時約700us
          ds=1;                  
          delayus(14);
          if(ds==0)
          flag=1;  //標(biāo)志位等于1表示18b20存在
          else
          flag=0; //標(biāo)志位等于0表示18b20不存在
          delayus(20);


         }
          //-------位讀取-------//
         bit ds_read_bit()
         {
                         bit dat;  //定義位變量dat
                         ds=0;
                         _nop_();
                         _nop_();
                         ds=1;
                         _nop_();
                         dat=ds;
                         delayus(10);
                         return dat;//返回變量dat;

         }
           //-------將讀取到的位轉(zhuǎn)換為字節(jié)---------//
         uchar ds_read_byte()
         {
         uchar i,j,k;
         for(i=0;i<8;i++)
         {
         j=ds_read_bit();
         k=(j<<7)|(k>>1);
         }
         return k;
         }
         //-------寫一個字節(jié)的函數(shù)-------//
         void ds_write_byte(uchar dat)

         {
         uchar i;
         for(i=0;i<8;i++)
         {
          ds=0;
          _nop_();
          ds=dat&0x01; //保留最低位
          delayus(6);
          ds=1;
          dat=dat>>1;
         }
         delayus(6);
         }
         //******讀取溫度的函數(shù)******//
         uint read_temperature()
          {
         uchar a,b;
         ds_reset();
         ds_write_byte(0xcc); //跳過ROM
         ds_write_byte(0xbe); //讀溫度
         a=ds_read_byte();         //        讀高八位
         b=ds_read_byte();        // 讀低八位
         temp=b;
         temp=temp<<8;
         temp=temp|a ;
         temp=temp*0.0625*10+0.5;//讀出的數(shù)放大10倍取大于0.5的
         return temp;
         }
          
         
            //---------主函數(shù)-------------//
                     void main()
                   {  
                           while(1)
                           {
                                           ds_reset();//復(fù)位
                                    ds_write_byte(0xcc);//跳過ROM
                                        ds_write_byte(0x44);//啟動溫度轉(zhuǎn)換
                                //        temp=256;
                                        display(read_temperature( ));
                                        display(temp);//                                                                          
                                   }
             }




         void delay(uint z)//延時函數(shù)

        { uint x,y;
          for(x=z;x>0;x--)
          for(y=200;y>0;y--);
     }
         //*******顯示****//         
           void display(uint temp)          //顯示
        {        P1=table_du[temp/1000] ;           //  /100
                 dula=1;
                 dula=0;
           delay(1);
                 P1=0xfe;        
                 wela=1;
                 wela=0;
                 delay(1);         //         百位
                 P1=0xff;        
                 wela=1;
                 wela=0;
                 delay(5);         

                  P1=table_du[temp/100%10];  // %100/10]|0x80
                 dula=1;
                 dula=0;
                 delay(1);
                 P1=0xfd;                   
             wela=1;
                 wela=0;
                 delay(1);         //
                 P1=0xff;        
                 wela=1;
                 wela=0;
                 delay(5);

                 P1=table_du[temp%100/10]|0x80;        //%100%10
                 dula=1;
                 dula=0;  
                delay(1);
                 P1=0xfb;
                 wela=1;
                 wela=0;
                 delay(1);         //
                 P1=0xff;        
                 wela=1;
                 wela=0;
                 delay(5);

             P1=table_du[temp%100%10];        //%100%10
                 dula=1;
                 dula=0;  
                 delay(1);
                 P1=0xf7;
                 wela=1;
                 wela=0;
                 delay(1);         //
                 P1=0xff;        
                 wela=1;
                 wela=0;
                 delay(5);
                 

                 }
       


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

使用道具 舉報

沙發(fā)
ID:69408 發(fā)表于 2014-11-27 08:29 | 只看該作者
有會的朋友給看看吧!!謝謝啦�。。�!
回復(fù)

使用道具 舉報

板凳
ID:69408 發(fā)表于 2014-11-29 17:51 | 只看該作者
還是解決不了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表