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

標題: 在單片機開發板上運行程序,顯示的為以下圖片,測不出溫度,怎么解決呀 [打印本頁]

作者: IOW    時間: 2023-7-6 20:36
標題: 在單片機開發板上運行程序,顯示的為以下圖片,測不出溫度,怎么解決呀


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;
        }
}

作者: chxelc    時間: 2023-7-7 08:09
你溫度傳感器接哪里的呀?有沒有電路圖?
作者: LaoYuTou    時間: 2023-7-7 08:19
首先取個位  x%10,取十位 x/10%10,取百位 x/100%10,然后注意if,else的范圍,不清楚就全用大括號括起來,另外注意正負號處理。
作者: wulin    時間: 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. }
復制代碼








歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久网亚洲 | 日韩欧美一区二区在线播放 | 男人的天堂亚洲 | 中文字幕乱码亚洲精品一区 | 国产精品综合 | 亚洲天堂久久 | 日本在线小视频 | 国产精品美女久久久久aⅴ国产馆 | 久久精品一 | 中文字幕视频在线免费 | 99精品久久 | 网站黄色在线免费观看 | 日韩第一区| 精品视频一区二区三区在线观看 | 日本久草| 免费视频一区 | 国产剧情一区二区三区 | 国产精品久久久av | 亚洲精品久久久9婷婷中文字幕 | 国产精品成人一区二区三区吃奶 | 欧美精品一区三区 | 国产精品夜夜春夜夜爽久久电影 | 日韩中文字幕在线视频观看 | 欧美日韩第一页 | 一级黄a| 青青操av | 亚洲成人av在线播放 | 一区二区三区在线观看视频 | 性高湖久久久久久久久3小时 | 午夜精品久久久久久久久久久久 | 久久精品国产一区二区三区不卡 | 亚洲视频在线免费观看 | 久久9999久久 | 亚洲日本一区二区三区四区 | 中文字幕国产 | 91精品国产麻豆 | 中文天堂在线观看 | 亚洲精品天堂 | 青久草视频 | 国产精品1区2区3区 国产在线观看一区 | 2019天天操|