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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請問朋友這個溫度計程序要顯示負55度要怎樣改啊!!

[復制鏈接]
跳轉到指定樓層
樓主
只是一個溫度計程序,可是只能顯示0-128度(圖1),在0度以下就不能正常顯示了(正95度顯示圖2 095.0度),比如負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; //標志位
         uint temp,num;        //定義顯示變量


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

        }

         void ds_reset()//復位函數
         {
          ds=1;                   //拉高總線
          delayus(5);        //延時約60us
          ds=0;                        //拉低總線
          delayus(80);//延時約700us
          ds=1;                  
          delayus(14);
          if(ds==0)
          flag=1;  //標志位等于1表示18b20存在
          else
          flag=0; //標志位等于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;

         }
           //-------將讀取到的位轉換為字節---------//
         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;
         }
         //-------寫一個字節的函數-------//
         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);
         }
         //******讀取溫度的函數******//
         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;//讀出的數放大10倍取大于0.5的
         return temp;
         }
          
         
            //---------主函數-------------//
                     void main()
                   {  
                           while(1)
                           {
                                           ds_reset();//復位
                                    ds_write_byte(0xcc);//跳過ROM
                                        ds_write_byte(0x44);//啟動溫度轉換
                                //        temp=256;
                                        display(read_temperature( ));
                                        display(temp);//                                                                          
                                   }
             }




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

        { 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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人综合在线 | 毛片黄 | 天天操网 | 欧美日一区二区 | www.亚洲视频.com | 亚洲精品99999 | 99色在线 | 真人女人一级毛片免费播放 | 中文字幕视频在线观看免费 | 久久88| 成人在线免费观看视频 | av在线影院 | 九九九视频在线 | 成人婷婷 | 久久九九99| 久久一区 | 欧美在线视频网 | 一本色道久久综合亚洲精品高清 | 美女视频三区 | 国产高清在线精品 | 亚洲国产中文在线 | 国产精品久久久久久久毛片 | 中文字幕日韩一区 | 国产成人小视频 | 久久国产视频播放 | 成人精品鲁一区一区二区 | 欧美一级欧美三级在线观看 | 国产一区二区在线免费播放 | 久久久久久黄 | 一区二区不卡视频 | 精品国产乱码久久久久久影片 | 黄网免费看| 国内精品久久久久久久影视简单 | 在线91| 在线视频国产一区 | 亚洲欧美日韩激情 | 国产真实精品久久二三区 | 婷婷五月色综合 | 五月综合久久 | 一级免费a | 亚洲精品粉嫩美女一区 |