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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

在單片機開發板上運行程序,顯示的為以下圖片,測不出溫度,怎么解決呀

[復制鏈接]
跳轉到指定樓層
樓主


main.c


#include <smg.h>
#include <ds18b20.h>

void main()
{        
        u8 i=0;
  int temp_value;
        u8 temp_buf[6];

        ds18b20_init();

        while(1)
        {                                
                i++;
                if(i%50==0)
                        temp_value=ds18b20_read_temperture()*10;
                if(temp_value<0)
                {
                        temp_value=-temp_value;
                        temp_buf[0]=0x40;
                }
                else

                temp_buf[2]=gsmg_code[temp_value%1000%100/10];
                temp_buf[3]=gsmg_code[temp_value%1000%100%10];
                smg_display(temp_buf,3);
        }               
}

/***********************************************************************************

ds18b20.c

#include <ds18b20.h>
#include <intrins.h>

void ds18b20_reset(void)
{
        DS18B20_PORT=0;        
        delay_10us(75);        
        DS18B20_PORT=1;        
        delay_10us(2);
}


u8 ds18b20_check(void)
{
        u8 time_temp=0;

        while(DS18B20_PORT&&time_temp<20)        
        {
                time_temp++;
                delay_10us(1);        
        }
        if(time_temp>=20)return 1;
        else time_temp=0;
        while((!DS18B20_PORT)&&time_temp<20)
        {
                time_temp++;
                delay_10us(1);
        }
        if(time_temp>=20)return 1;        
        return 0;
}


u8 ds18b20_read_bit(void)
{
        u8 dat=0;
        
        DS18B20_PORT=0;
        _nop_();_nop_();
        DS18B20_PORT=1;        
        _nop_();_nop_();
        if(DS18B20_PORT)dat=1;
        else dat=0;
        delay_10us(5);
        return dat;
}


u8 ds18b20_read_byte(void)
{
        u8 i=0;
        u8 dat=0;
        u8 temp=0;

        for(i=0;i<8;i++)
        {
                temp=ds18b20_read_bit();
                dat=(temp<<7)|(dat>>1);
        }
        return dat;        
}


void ds18b20_write_byte(u8 dat)
{
        u8 i=0;
        u8 temp=0;

        for(i=0;i<8;i++)
        {
                temp=dat&0x01;
                dat>>=1;
                if(temp)
                {
                        DS18B20_PORT=0;
                        _nop_();_nop_();
                        DS18B20_PORT=1;        
                        delay_10us(6);
                }
                else
                {
                        DS18B20_PORT=0;
                        delay_10us(6);
                        DS18B20_PORT=1;
                        _nop_();_nop_();        
                }        
        }        
}

void ds18b20_start(void)
{
        ds18b20_reset();
        ds18b20_check();
        ds18b20_write_byte(0xcc);
    ds18b20_write_byte(0x44);
}


u8 ds18b20_init(void)
{
        ds18b20_reset();
        return ds18b20_check();        
}


float ds18b20_read_temperture(void)
{
        float temp;
        u8 dath=0;
        u8 datl=0;
        u16 value=0;

        ds18b20_start();
        ds18b20_reset();
        ds18b20_check();
        ds18b20_write_byte(0xcc);
  ds18b20_write_byte(0xbe);

        datl=ds18b20_read_byte();
        dath=ds18b20_read_byte();
        value=(dath<<8)+datl;

        if((value&0xf800)==0xf800)
        {
                value=(value)+1;
                temp=value*(-0.0625);
        }
        else
        {
                temp=value*0.0625;        
        }
        return temp;
}
/***********************************************************************************

smg.c


#include <smg.h>

u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                0x7f,0x6f};


void delay_10us(u16 ten_us)
{
        while(ten_us--);        
}
void smg_display(u8 dat[],u8 pos)
{
        u8 i=0;
        u8 pos_temp=pos-1;

        for(i=pos_temp;i<8;i++)
        {
                   switch(i)
                {
                        case 0: LSC=1;LSB=1;LSA=1;break;
                        case 1: LSC=1;LSB=1;LSA=0;break;
                        case 2: LSC=1;LSB=0;LSA=1;break;
                        case 3: LSC=1;LSB=0;LSA=0;break;
                        case 4: LSC=0;LSB=1;LSA=1;break;
                        case 5: LSC=0;LSB=1;LSA=0;break;
                        case 6: LSC=0;LSB=0;LSA=1;break;
                        case 7: LSC=0;LSB=0;LSA=0;break;
                }
                SMG_A_DP_PORT=dat[i-pos_temp];
                delay_10us(100);
                SMG_A_DP_PORT=0x00;
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:712097 發表于 2023-7-7 08:09 | 只看該作者
你溫度傳感器接哪里的呀?有沒有電路圖?
回復

使用道具 舉報

板凳
ID:1080935 發表于 2023-7-7 08:19 | 只看該作者
首先取個位  x%10,取十位 x/10%10,取百位 x/100%10,然后注意if,else的范圍,不清楚就全用大括號括起來,另外注意正負號處理。
回復

使用道具 舉報

地板
ID:213173 發表于 2023-7-7 11:16 | 只看該作者
你自己根據硬件電路核對IO口。

  1. #include <reg51.h>
  2. #include <intrins.h>
  3. typedef unsigned char u8;
  4. typedef unsigned int u16;
  5. #define SMG_A_DP_PORT P0

  6. sbit LSC=P2^4;
  7. sbit LSB=P2^3;
  8. sbit LSA=P2^2;
  9. sbit DS18B20_PORT=P3^7;

  10. u8  gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,
  11.                   0x6d,0x7d,0x07,0x7f,0x6f};
  12. u8  temp_buf[8];

  13. u16 temp;
  14. u8  tempH=0;
  15. u8  tempL=0;

  16. void delay_10us(u16 ten_us)//T=ten_us*9+16us
  17. {
  18.         while(ten_us--);        
  19. }

  20. void ds18b20_reset(void)//重置
  21. {
  22.         DS18B20_PORT=1;
  23.         delay_10us(8);
  24.         DS18B20_PORT=0;        
  25.         delay_10us(80);        
  26.         DS18B20_PORT=1;
  27.         delay_10us(30);
  28. }

  29. u8 ds18b20_read_byte(void)//讀
  30. {
  31.         u8 i=0;
  32.         u8 dat=0;
  33.        
  34.         for(i=0;i<8;i++)
  35.         {
  36.                 DS18B20_PORT=0;
  37.                 dat>>=1;
  38.                 DS18B20_PORT=1;
  39.                 if(DS18B20_PORT)
  40.                         dat|=0x80;
  41.                 delay_10us(4);
  42.         }
  43.         return dat;        
  44. }


  45. void ds18b20_write_byte(u8 dat)//寫
  46. {
  47.         u8 i=0;
  48.         for(i=0;i<8;i++)
  49.         {
  50.                 DS18B20_PORT=0;
  51.                 DS18B20_PORT=dat&0x01;
  52.                 delay_10us(5);
  53.                 DS18B20_PORT=1;
  54.                 dat>>=1;
  55.         }
  56.         delay_10us(4);
  57. }

  58. void ds18b20_start(void)
  59. {
  60.         ds18b20_reset();
  61.         ds18b20_write_byte(0xcc);
  62.         ds18b20_write_byte(0x44);
  63. }


  64. void ds18b20_read(void)
  65. {
  66.         ds18b20_reset();
  67.         ds18b20_write_byte(0xcc);
  68.         ds18b20_write_byte(0xbe);   
  69. }


  70. void ds18b20_read_temperture(void)
  71. {
  72.         static u8 value;
  73.         u8 dath=0;
  74.         u8 datl=0;
  75.         switch(value)
  76.         {
  77.                 case 0: ds18b20_start(); break;

  78.                 //1~4為等待轉換完成時間

  79.                 case 5: ds18b20_read();  break;

  80.                 case 6: datl=ds18b20_read_byte();
  81.                                 dath=ds18b20_read_byte();
  82.                                 temp=dath<<8|datl;
  83.                                 tempH=temp>>4;
  84.                                 tempL=(temp&0x0f)*0.625;
  85.                 case 7:
  86.                                 temp_buf[0]=gsmg_code[tempH/100%10];
  87.                                 temp_buf[1]=gsmg_code[tempH/10%10];
  88.                                 temp_buf[2]=gsmg_code[tempH%10]|0x80;
  89.                                 temp_buf[3]=gsmg_code[tempL];
  90.                                 break;
  91.         }               
  92.         value=++value%8;
  93. }

  94. void smg_display()
  95. {
  96.         static i=0;
  97.         SMG_A_DP_PORT=0x00;//消隱       
  98.         switch(i)
  99.         {
  100.                 case 0: LSC=1;LSB=1;LSA=1;break;
  101.                 case 1: LSC=1;LSB=1;LSA=0;break;
  102.                 case 2: LSC=1;LSB=0;LSA=1;break;
  103.                 case 3: LSC=1;LSB=0;LSA=0;break;
  104. /*                case 4: LSC=0;LSB=1;LSA=1;break;
  105.                 case 5: LSC=0;LSB=1;LSA=0;break;
  106.                 case 6: LSC=0;LSB=0;LSA=1;break;
  107.                 case 7: LSC=0;LSB=0;LSA=0;break;*/
  108.         }
  109.         SMG_A_DP_PORT=temp_buf[i];
  110.         i=++i%4;

  111. }

  112. void main()
  113. {
  114.        
  115.         while(1)
  116.         {                                
  117.                 smg_display();
  118.                 ds18b20_read_temperture();
  119.                 delay_10us(100);
  120.         }               
  121. }
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人玩人人添人人澡欧美 | 人人干免费| 欧美精品在线免费 | 亚洲精品国产区 | 亚洲精品国产一区 | 99久久日韩精品免费热麻豆美女 | 久草成人 | 91久久婷婷| av免费成人 | 久久一区二区三区四区 | 国产美女视频黄 | 一区二区精品 | 国产成人综合网 | 国产综合精品一区二区三区 | 精品美女久久久久久免费 | 亚洲久久一区 | 久久福利电影 | 欧美11一13sex性hd | 精品久久国产 | а_天堂中文最新版地址 | 日韩午夜电影在线观看 | 91精品国产一区二区三区 | 日韩av在线免费 | 亚洲a在线视频 | 久久国产精品精品 | 黄色网络在线观看 | 中文字幕亚洲精品 | 国产成人高清 | 欧美专区在线 | 亚洲精品自在在线观看 | 亚洲一区二区三区四区五区午夜 | 粉嫩av久久一区二区三区 | 精品综合久久久 | 天天影视网天天综合色在线播放 | 国产免费一区二区 | 美美女高清毛片视频免费观看 | 日韩午夜影院 | 日韩欧美一区二区三区四区 | 欧美日韩不卡合集视频 | 亚洲精品在线观 | 亚洲日韩中文字幕一区 |