找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3031|回复: 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 单片机教程网

快速回复 返回顶部 返回列表