找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2349|回復: 3
收起左側(cè)

往上位機發(fā)送51單片機串口數(shù)據(jù)(壓力傳感器)求幫助

[復制鏈接]
ID:690019 發(fā)表于 2020-2-4 18:17 | 顯示全部樓層 |閱讀模式
用keil打開,編譯,燒錄到51單片機中即可。用串口助手讀取數(shù)據(jù)。

單片機源程序如下:
  1. ///**********************************************
  2. //*  平臺:BST-V51 + Keil U3 + STC89C52
  3. //*  名稱:往串口發(fā)送一字節(jié)數(shù)據(jù)(可通過超級終端或者串口調(diào)試助手顯示出來,
  4. //                  超級終端波特率選為9600)。
  5. //                  超級終端設置好后,每按下一次S2鍵,松開后均會在超級終端
  6. //                  上顯示一串字母"abcdefg哈哈"。   
  7. //*  日期:2012-8-14
  8. //*  晶振:11.0592MHZ
  9. //*  說明:免費開源,不提供源代碼分析.
  10. //
  11. //******************************************************************/
  12. #include <stdio.h>  
  13. #include <reg52.h>
  14. #include <intrins.h>

  15. //IO設置
  16. sbit HX711_DOUT=P3^4;
  17. sbit HX711_SCK=P3^5;

  18. //HX711緩存區(qū)初始值設為0.
  19. unsigned long HX711_Buffer = 0;

  20. //毛皮和實物初始化,都為0.
  21. unsigned int Weight_Maopi = 0,Weight_Shiwu = 0;

  22.   
  23. void InitUART(void)//使用定時器1作為串口波特率發(fā)生器  
  24. {  
  25.     TH1 = 0xFD;  //晶振11.0592mhz 波特率設為9600  
  26.     TL1 = TH1;  
  27.     TMOD |= 0x20;    //定時器1方式2  
  28.     SCON = 0x50;     //串口接收使能  
  29.     ES = 1;          //串口中斷使能  
  30.     TR1 = 1;         //定時器1使能  
  31.     TI = 1;          //發(fā)送中斷標記位,必須設置  
  32. }  

  33. //毫秒延時函數(shù)  
  34. void delay_ms(unsigned int t)  
  35. {  
  36.     unsigned char a,b;  
  37.     while(t--)  
  38.     {  
  39.       for(b=102;b>0;b--)  
  40.       for(a=3;a>0;a--);  
  41.     }  
  42. }

  43. //****************************************************
  44. //延時函數(shù)
  45. //****************************************************
  46. void Delay__hx711_us(void)
  47. {
  48. //_nop_()一般包含在#include "intrins.h",,,一個_nop_();函數(shù)延時一個機器周期的時間
  49.     _nop_();
  50.     _nop_();
  51. }

  52. //****************************************************
  53. //讀取HX711
  54. //****************************************************
  55. unsigned long HX711_Read(void)    //增益128
  56. {
  57.     unsigned long count;
  58.     unsigned char i;
  59.       HX711_DOUT=1;
  60.     Delay__hx711_us();
  61.       HX711_SCK=0;
  62.       count=0;
  63.       while(HX711_DOUT);
  64.       for(i=0;i<24;i++)
  65.     {
  66.           HX711_SCK=1;
  67.           count=count<<1;
  68.         HX711_SCK=0;
  69.           if(HX711_DOUT)
  70.             count++;
  71.     }
  72.      HX711_SCK=1;
  73.     Delay__hx711_us();
  74.     HX711_SCK=0;  
  75.     return(count);
  76. }
  77. //****************************************************
  78. //稱重
  79. //****************************************************
  80. void Get_Weight()
  81. {
  82.     HX711_Buffer = HX711_Read();
  83.     HX711_Buffer = HX711_Buffer/100;
  84.     if(HX711_Buffer > Weight_Maopi)            
  85.     {
  86.         Weight_Shiwu = HX711_Buffer;
  87.         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //獲取實物的AD采樣數(shù)值。
  88.    
  89.         Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/2.09+0.05);     //計算實物的實際重量
  90.                                                                         //因為不同的傳感器特性曲線不一樣,因此,每一個傳感器需要矯正這里的2.15這個除數(shù)。
  91.                                                                         //當發(fā)現(xiàn)測試出來的重量偏大時,增加該數(shù)值。
  92.                                                                         //如果測試出來的重量偏小時,減小改數(shù)值。
  93.                                                                         //該數(shù)值一般在2.15附近調(diào)整之間。因傳感器不同而定。
  94.                                                                         //+0.05是為了四舍五入百分位        
  95.             Weight_Shiwu=Weight_Shiwu/2;   
  96.    
  97.     }
  98. }

  99. //****************************************************
  100. //獲取毛皮重量
  101. //****************************************************
  102. void Get_Maopi()
  103. {
  104.     unsigned char i = 0;
  105.     unsigned int Temp_Weight = 0;

  106.     Weight_Maopi = 0;

  107.     for( i = 0 ; i < 10 ; i++)
  108.     {


  109.         if( Temp_Weight > Weight_Maopi)
  110.         {
  111.             Weight_Maopi = Temp_Weight;     
  112.         }
  113.     }        
  114. }  
  115.   
  116. void main()  
  117. {         
  118.     Get_Maopi();                //稱毛皮重量
  119.     InitUART(); //初始化串口  
  120.     EA = 1;     //開總中斷  
  121.         while(1)
  122.     {
  123.         Get_Weight();            //稱重
  124.                 printf("%d\n",Weight_Shiwu);//串口打印結(jié)果

  125.     }
  126. }
復制代碼

目前程序還有問題,求大佬指點:
讀取.zip (1.83 KB, 下載次數(shù): 15)


回復

使用道具 舉報

ID:704752 發(fā)表于 2020-3-27 01:15 | 顯示全部樓層
請問超級終端是什么東西
回復

使用道具 舉報

ID:704752 發(fā)表于 2020-3-27 01:17 | 顯示全部樓層
還有你要發(fā)送的數(shù)據(jù)一串字母"abcdefg哈哈"不用在什么程序中體現(xiàn)嗎,我是小白不太懂,大神可以解釋下嗎
回復

使用道具 舉報

ID:603160 發(fā)表于 2020-8-18 13:46 | 顯示全部樓層
浪費黑幣,有問題的東西,大家別下
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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