找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數(shù): 1542 | 評論數(shù): 3 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
IOW
發(fā)布時間: 2023-7-6 20:36

正文摘要:

main.c #include <smg.h> #include <ds18b20.h> void main() {                 u8 i=0;   int temp_value; ...

回復

ID:213173 發(fā)表于 2023-7-7 11:16
你自己根據(jù)硬件電路核對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為等待轉(zhuǎn)換完成時間

  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. }
復制代碼



ID:1080935 發(fā)表于 2023-7-7 08:19
首先取個位  x%10,取十位 x/10%10,取百位 x/100%10,然后注意if,else的范圍,不清楚就全用大括號括起來,另外注意正負號處理。
ID:712097 發(fā)表于 2023-7-7 08:09
你溫度傳感器接哪里的呀?有沒有電路圖?

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

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

快速回復 返回頂部 返回列表