欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2323|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于STM32、STM8、Arduino 51單片機的簡易電子秤仿真程序資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1017118 發(fā)表于 2022-4-10 00:25 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
基于STM32、STM8、Arduino的簡易電子秤附帶各種所需資料與原理圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
注意:按鍵定義名稱是根據(jù)程序控制的,可以修改的,所以按鍵需要什么功能,自己修改程序來實現(xiàn)。



電路原理圖如下:




單片機源程序如下:
  1. /**********************************************************************

  2. ***********************************************************************/

  3. #include "main.h"
  4. #include "HX711.h"
  5. #include "uart.h"
  6. #include "LCD1602.h"

  7. #define   uchar unsigned char
  8. #define   uint unsigned int
  9. unsigned long HX711_Buffer = 0;
  10. unsigned long Weight_Maopi = 0;
  11. long Weight_Shiwu = 0;
  12. long Weight_warn = 0;

  13. unsigned char flag = 0;
  14. bit Flag_ERROR = 0;
  15. sbit speak= P1^7;         //蜂鳴器
  16. sbit jiare= P3^0;        //繼電器接口
  17. uchar Ncunchu[5];
  18. unsigned char num1,num2;
  19. //校準參數(shù)
  20. //因為不同的傳感器特性曲線不是很一致,因此,每一個傳感器需要矯正這里這個參數(shù)才能使測量值很準確。
  21. //當發(fā)現(xiàn)測試出來的重量偏大時,增加該數(shù)值。
  22. //如果測試出來的重量偏小時,減小改數(shù)值。 不過該值也可以通過按鍵開修改,該程序中有體現(xiàn)出來的 ?
  23. //該值可以為小數(shù)

  24. uint GapValue= 430;

  25. #include "eeprom52.h"


  26. /******************把數(shù)據(jù)保存到單片機內(nèi)部eeprom中******************/
  27. void write_eeprom()
  28. {  

  29.         
  30.         Ncunchu[0] = Weight_warn/256;
  31.         Ncunchu[1] = Weight_warn%256;
  32.         
  33.          num1=GapValue/256;
  34.         num2=GapValue%256;
  35.         
  36.         SectorErase(0x2000);
  37.         byte_write(0x2011,Ncunchu[0]);
  38.         byte_write(0x2012,Ncunchu[1]);
  39.         
  40.         byte_write(0x2001,  num1);
  41.         byte_write(0x2002,  num2);



  42.   byte_write(0x2060, a_a);        
  43. }

  44. /******************把數(shù)據(jù)從單片機內(nèi)部eeprom中讀出來*****************/
  45. void read_eeprom()
  46. {
  47.   num1   = byte_read(0x2001);
  48.         num2   = byte_read(0x2002);

  49.         
  50.         Ncunchu[0] = byte_read(0x2011);
  51.         Ncunchu[1] = byte_read(0x2012);
  52.         
  53.         Weight_warn  = Ncunchu[0]*256+Ncunchu[1];
  54.         GapValue= num1*256+num2;


  55.         
  56.     a_a      = byte_read(0x2060);
  57. }

  58. /**************開機自檢eeprom初始化*****************/
  59. void init_eeprom()
  60. {
  61.         read_eeprom();                //先讀
  62.         if(a_a != 156)                //新的單片機初始單片機內(nèi)問eeprom
  63.         {
  64.            a_a =156;
  65.            Weight_warn = 100;
  66.                  GapValue= 430;
  67.      write_eeprom();
  68.         }        
  69.         
  70.         
  71.         
  72. }

  73. //****************************************************
  74. //主函數(shù)
  75. //****************************************************
  76. void main()
  77. {
  78.    // Uart_Init();
  79.    // Send_Word("Welcome to use!\n");
  80.    // Send_Word("Made by Beetle Electronic Technology!\n");
  81.         
  82.         Init_LCD1602();
  83.         LCD1602_write_com(0x80);
  84.         LCD1602_write_word("Weight  Warning");
  85.         init_eeprom();                              //讀eeprom數(shù)據(jù)

  86.         Delay_ms(1000);                 //延時,等待傳感器穩(wěn)定
  87.         Get_Maopi();                                //稱毛皮重量
  88.     Delay_ms(100);                 
  89.         Get_Maopi();                                //稱毛皮重量
  90.         Delay_ms(100);                 
  91.         Get_Maopi();                                //多次去皮有利于穩(wěn)定
  92.         
  93.         while(1)
  94.         {
  95.                 EA = 0;
  96.                 Get_Weight();                        //稱重
  97.                 EA = 1;

  98.                 Scan_Key();

  99.                 //顯示當前重量
  100.                 if( Flag_ERROR == 1)
  101.                 {
  102.          //   Send_Word("ERROR\n");
  103.                         
  104.                         LCD1602_write_com(0x80+0x40);
  105.                         LCD1602_write_word("ERROR ");
  106.                         speak=0;
  107.                 }               
  108.                 else
  109.                 {         
  110.                
  111.             LCD1602_write_com(0x80+0x40);
  112.                         LCD1602_write_data(Weight_Shiwu/1000 + 0X30);
  113.             LCD1602_write_data(Weight_Shiwu%1000/100 + 0X30);
  114.             LCD1602_write_data(Weight_Shiwu%100/10 + 0X30);
  115.             LCD1602_write_data(Weight_Shiwu%10 + 0X30);
  116.                         LCD1602_write_word(" g");

  117.                         LCD1602_write_com(0x80+0x40+8);
  118.                         LCD1602_write_data(Weight_warn/1000 + 0X30);
  119.             LCD1602_write_data(Weight_warn%1000/100 + 0X30);
  120.             LCD1602_write_data(Weight_warn%100/10 + 0X30);
  121.             LCD1602_write_data(Weight_warn%10 + 0X30);
  122.                         LCD1602_write_word(" g");
  123.                 }
  124.                
  125.         }
  126. }

  127. //掃描按鍵
  128. void Scan_Key()
  129. {
  130.         if(KEY1 == 0  && KEY2 == 1 && KEY3 ==1)
  131.         {
  132.                 Delay_ms(5);
  133.                 if(KEY1 == 0  && KEY2 == 1 && KEY3 ==1)
  134.                 {
  135.                     Get_Maopi();
  136.                 }        
  137.         }

  138.         if(KEY2 == 0 && KEY1 == 1 && KEY3 ==1)
  139.         {
  140.                 Delay_ms(20);
  141.                 if(KEY2 == 0 && KEY1 == 1 && KEY3 ==1)
  142.                 {
  143.                 //        while(KEY2 == 0);
  144.                    if(Weight_warn<=5000)         { Weight_warn+=1;}
  145.                     write_eeprom();       //保存數(shù)據(jù)
  146.                 }        
  147.         }

  148.         if(KEY3 == 0 && KEY2 == 1 && KEY1 ==1)
  149.         {
  150.                 Delay_ms(20);
  151.                 if(KEY3 == 0 && KEY2 == 1 && KEY1 ==1)
  152.                 {
  153.                 //        while(KEY3 == 0);
  154.                     if(Weight_warn>=2)        Weight_warn-=1;
  155.                          write_eeprom();       //保存數(shù)據(jù)
  156.                 }        
  157.         }
  158.   
  159.         
  160.         //=======================對實物進行重量校正================================
  161.         if(KEY1 == 0 && KEY2 == 0 && KEY3 ==1)
  162.         {
  163.                 Delay_ms(25);
  164.                 if(KEY1 == 0 && KEY2 == 0 && KEY3 ==1)
  165.                 {

  166.                     if(GapValue<9999)  { GapValue++; }
  167.                            write_eeprom();       //保存數(shù)據(jù)

  168.                 }        
  169.         }

  170.         if(KEY1 == 0 && KEY2 == 1 && KEY3 ==0)
  171.         {
  172.                 Delay_ms(25);
  173.                 if(KEY1 == 0 && KEY2 == 1 && KEY3 ==0)
  174.                 {         

  175.                     if(GapValue>1)  {         GapValue--; }
  176.                           write_eeprom();       //保存數(shù)據(jù)


  177.                 }        
  178.         }
  179.         
  180.     if(Weight_Shiwu<Weight_warn)   {jiare=1; speak=1;}         //繼電器關(guān)閉
  181.           if(Weight_Shiwu>=Weight_warn)  {jiare=0; speak=0; }         //繼電器打開
  182. }

  183. //****************************************************
  184. //稱重
  185. //****************************************************
  186. void Get_Weight()
  187. {
  188.         Weight_Shiwu = HX711_Read();
  189.         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //獲取凈重
  190.         if(Weight_Shiwu > 0)                        
  191.         {        
  192.                 Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue);         //計算實物的實際重量
  193.                                                                                                                                                 
  194.                                                                                                                                                 
  195.                 if(Weight_Shiwu > 5000)                //超重報警
  196.                 {
  197.                         Flag_ERROR = 1;        
  198.                 }
  199.                 else
  200.                 {
  201.                         Flag_ERROR = 0;
  202.                 }
  203.         }
  204.         else
  205.         {
  206.                 Weight_Shiwu = 0;
  207.         //        Flag_ERROR = 1;                                //負重報警
  208.         }
  209.         
  210. }

  211. //****************************************************
  212. //獲取毛皮重量
  213. //****************************************************
  214. void Get_Maopi()
  215. {
  216.         Weight_Maopi = HX711_Read();        
  217. }

  218. //****************************************************
  219. //MS延時函數(shù)(12M晶振下測試)
  220. //****************************************************
  221. void Delay_ms(unsigned int n)
  222. {
  223.         unsigned int  i,j;
  224.         for(i=0;i<n;i++)
  225.                 for(j=0;j<123;j++);
  226. }
復(fù)制代碼


所有資料51hei附件下載:
壓力傳感器資料包.7z (5.62 MB, 下載次數(shù): 66)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表