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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 24419|回復: 25
收起左側

原創(chuàng)基于51單片機的電子秤設計 帶源代碼,原理圖畢業(yè)設計論文

  [復制鏈接]
ID:169556 發(fā)表于 2017-3-10 09:45 | 顯示全部樓層 |閱讀模式
  這是我以前給同班同學做的本科畢業(yè)設計,用了近10天左右的時間,附件里面包含用AD畫的原理圖和PCB圖,以及當時調試的12單片機源代碼,還有一點我查閱的相近文檔資料,本是設計為自己原創(chuàng),請大家多多指教。
2.jpg 3.jpg
  1. 程序采用的是模塊化寫法,你寫論文時也分開寫兩個小標題把代碼粘貼進去就行了。



  2. HX711的AD轉換代碼

  3. #include "HX711.h"


  4. //****************************************************
  5. //延時函數(shù)
  6. //****************************************************
  7. void Delay__hx711_us(void)
  8. {
  9.         _nop_();
  10.         _nop_();
  11. }

  12. //****************************************************
  13. //讀取HX711
  14. //****************************************************
  15. unsigned long HX711_Read(void)        //增益128
  16. {
  17.         unsigned long count;
  18.         unsigned char i;
  19.           HX711_DOUT=1;
  20.         Delay__hx711_us();
  21.           HX711_SCK=0;
  22.           count=0;
  23.           while(HX711_DOUT);
  24.           for(i=0;i<48;i++)
  25.         {
  26.                   HX711_SCK=1;
  27.                   count=count<<1;
  28.                 HX711_SCK=0;
  29.                   if(HX711_DOUT)
  30.                         count++;
  31.         }
  32.          HX711_SCK=1;
  33.     count=count^0x008000;//第25個脈沖下降沿來時,轉換數(shù)據(jù)
  34.         Delay__hx711_us();
  35.         HX711_SCK=0;  
  36.         return(count);
  37. }


  38. 主函數(shù)程序

  39. #include <reg52.h>
  40. #include <intrins.h>
  41. #include <string.h>
  42. #include "main.h"
  43. #include "HX711.h"
  44. #include "eeprom52.h"

  45. #define uchar unsigned char
  46. #define uint  unsigned int
  47. uchar qianwei,baiwei,gewei,shiwei;
  48. unsigned long HX711_Buffer = 0;
  49. unsigned long Weight_Maopi = 0;
  50. unsigned long Weight_Maopi_0 = 0;
  51. long Weight_Shiwu = 0;
  52. unsigned int qupi=0;
  53. unsigned char p=0;
  54. //鍵盤處理變量
  55. unsigned char keycode;
  56. unsigned char key_press_num=0;

  57. uint GapValue,GapValue1;
  58. bit flag_cz=0;

  59. //uchar code  LEDData[]={0x5F,0x44,0x9D,0xD4,0xC6,0xD3,0xDB,0x57,0xDF,0xD7,0xCF,0xaA,0x9B,0xDC,0x9B,0x8B}; //數(shù)碼管顯示碼表
  60. //定義標識
  61. volatile bit FlagTest = 0;                //定時測試標志,每0.5秒置位,測完清0
  62. volatile bit FlagKeyPress = 0;  //有鍵按下標志,處理完畢清0
  63. //校準參數(shù)
  64. //因為不同的傳感器特性曲線不是很一致,因此,每一個傳感器需要矯正這里這個參數(shù)才能使測量值很準確。
  65. //當發(fā)現(xiàn)測試出來的重量偏大時,增加該數(shù)值。
  66. //如果測試出來的重量偏小時,減小改數(shù)值。
  67. //該值可以為小數(shù)
  68. //#define GapValue 349
  69. sbit LED=P1^1;
  70. sbit ROW1=P3^0;
  71. sbit ROW2=P3^1;
  72. sbit ROW3=P3^2;
  73. sbit ROW4=P3^3;
  74. //sbit DIAN = P0^6;                        //小數(shù)點
  75. sbit rs=P0^7;
  76. sbit rw=P0^6;
  77. sbit en=P0^5;
  78. sbit D1=P2^0;

  79. volatile bit ClearWeighFlag = 0; //傳感器調零標志位,清除0漂

  80. /******************把數(shù)據(jù)保存到單片機內部eeprom中******************/
  81. void write_eeprom()
  82. {
  83.         SectorErase(0x1080);
  84.         GapValue1=GapValue&0x00ff;
  85.         byte_write(0x1000, GapValue1);
  86.         GapValue1=(GapValue&0xff00)>>8;
  87.         byte_write(0x1001, GapValue1);
  88.         byte_write(0x1060, a_a);        
  89. }

  90. /******************把數(shù)據(jù)從單片機內部eeprom中讀出來*****************/
  91. void read_eeprom()
  92. {
  93.         GapValue   = byte_read(0x1001);
  94.         GapValue   = (GapValue<<8)|byte_read(0x1000);
  95.         a_a      = byte_read(0x1060);
  96. }

  97. /**************開機自檢eeprom初始化*****************/
  98. void init_eeprom()
  99. {
  100.         read_eeprom();                //先讀
  101.         if(a_a == 1)                //新的單片機初始單片機內問eeprom
  102.         {
  103.                 GapValue  = 3500;
  104.                 a_a = 1;
  105.                 write_eeprom();           //保存數(shù)據(jù)
  106.         }        
  107. }
  108. void delayms(uint xms)                //延時
  109. {
  110.          uchar i,j;
  111.         for(i=xms;i>0;i--)
  112.                 for(j=110;j>0;j--);
  113. }
  114. void write_com(uchar com)                 //寫命令
  115. {
  116.          rs=0;
  117. //        P2=change(com);
  118.         P2=com;
  119.         delayms(50);
  120.         en=1;
  121.         delayms(50);
  122.         en=0;        
  123. }
  124. void write_dat(uchar dat)             //寫數(shù)據(jù)
  125. {
  126.          rs=1;
  127. //        P2=change(dat);         
  128.         P2=dat;
  129.         en=1;
  130.         delayms(50);
  131.         en=0;
  132. }
  133. void init()                                        //液晶初始化
  134. {
  135.          rw=0;
  136.         write_com(0x38);
  137.         write_com(0x0c);  
  138.         write_com(0x06);
  139.         //write_com(0x01);
  140. }        
  141. /*****顯示開機初始化等待畫面*****/
  142. /*
  143. void Disp_init(void)   
  144. {
  145.         P0 = 0x80;      //顯示----
  146.         P2 = 0xBF;                 //依次打開各位
  147.         Delay_ms(1);                 //延時
  148.         P2 = 0xEF;
  149.         Delay_ms(1);   
  150.         P2 = 0xFB;
  151.         Delay_ms(1);
  152.         P2 = 0xFE;
  153.         Delay_ms(1);
  154.         P2 = 0xFF;         //關閉顯示
  155. }
  156. */
  157. //顯示重量,單位kg,兩位整數(shù),三位小數(shù)
  158. void Display_Weight()
  159. {                                                                                                                                                                                                                                                                                                                                            ;
  160.                         qianwei=Weight_Shiwu/1000%10;
  161.                          baiwei=Weight_Shiwu/100%10;                                                                                                                                                                                                                                                                                                                       ;
  162.                         shiwei=Weight_Shiwu%100/10;
  163.                         gewei=Weight_Shiwu%100%10;
  164.                         write_com(0x80+2);

  165.                     write_dat(qianwei+'0');
  166.                         write_dat('.');
  167.                         write_dat(baiwei+'0');
  168.                          write_dat(shiwei+'0');                 
  169.                         write_dat(gewei+'0');
  170.                
  171.   
  172. }  

  173. //定時器0初始化
  174. void Timer0_Init()
  175. {
  176.         ET0 = 1;        //允許定時器0中斷
  177.         TMOD = 1;       //定時器工作方式選擇
  178.         TH0 = 0xb0;     
  179.         TL0 = 0x3c;     //定時器賦予初值
  180.         TR0 = 1;        //啟動定時器
  181. }

  182. //定時器0中斷
  183. void Timer0_ISR (void) interrupt 1 using 0
  184. {
  185. uchar Counter;
  186.         TH0 = 0xb0;
  187.         TL0 = 0x3c;     //定時器賦予初值

  188.         //每0.5秒鐘刷新重量
  189.     Counter ++;
  190.     if (Counter >= 10)
  191.     {
  192.        FlagTest = 1;
  193.            Counter = 0;
  194.     }
  195. }


  196. //按鍵響應程序,參數(shù)是鍵值
  197. //返回鍵值:
  198. //         7          8    9      10(清0)
  199. //         4          5    6      11(刪除)
  200. //         1          2    3      12(未定義)
  201. //         14(未定義) 0    15(.)  13(確定價格)

  202. void KeyPress()
  203. {
  204.         if(ROW1==0)   //清零鍵
  205.         {
  206.                 Display_Weight();
  207.                 if(ROW1==0)
  208.                 {
  209.                         if(qupi==0)
  210.                         qupi=Weight_Shiwu;
  211.                         else
  212.                         qupi=0;
  213.                         Buzzer=1;
  214.                         for(p=0;p<10;p++)
  215.                         Display_Weight();
  216.                         Buzzer=0;        
  217.                         while(ROW1==0) Display_Weight();
  218.                 }
  219.         }
  220.         if(ROW2==0)           //加
  221.         {
  222.                 Display_Weight();
  223.                 if(ROW2==0)
  224.                 {
  225.                         while(!ROW2)
  226.                         {
  227.                                 key_press_num++;
  228.                                 if(key_press_num>=100)
  229.                                 {
  230.                                         key_press_num=0;
  231.                                         while(ROW2)
  232.                                         {
  233.                                                 if(GapValue<10000)
  234.                                                 GapValue++;
  235.                                                 Buzzer=0;
  236.                                                 for(p=0;p<2;p++)
  237.                                                 Display_Weight();
  238.                                                 Buzzer=1;
  239.                                                 for(p=0;p<2;p++)
  240.                                                 Display_Weight();
  241.                                                 Get_Weight();
  242.                                         }
  243.                                 }
  244.                                 Display_Weight();
  245.                                 Delay_ms(8);
  246.                         }
  247.                         if(key_press_num==0)
  248.                         {
  249.                                 key_press_num=0;
  250.                                 if(GapValue>10000)
  251.                                 GapValue++;
  252.                                 Buzzer=0;
  253.                                 for(p=0;p<10;p++)
  254.                                 Display_Weight();
  255.                                 Buzzer=1;
  256.                         }
  257.                         write_eeprom();               
  258.                 }
  259.         }
  260.         if(ROW3==0)  //減
  261.         {
  262.                 Display_Weight();
  263.                 if(ROW3==0)
  264.                 {
  265.                         while(ROW3)
  266.                         {
  267.                                 key_press_num++;
  268.                                 if(key_press_num>=100)
  269.                                 {
  270.                                         key_press_num=0;
  271.                                         while(ROW3)
  272.                                         {
  273.                                                 if(GapValue>1)
  274.                                                 GapValue--;
  275.                                                 Buzzer=0;
  276.                                                 for(p=0;p<2;p++)
  277.                                                 Display_Weight();
  278.                                                 Buzzer=1;
  279.                                                 for(p=0;p<2;p++)
  280.                                                 Display_Weight();
  281.                                                 Get_Weight();
  282.                                         }
  283.                                 }
  284.                                 Display_Weight();
  285.                                 Delay_ms(8);
  286.                         }
  287.                         if(key_press_num!=0)
  288.                         {
  289.                                 key_press_num=0;
  290.                                 if(GapValue>1)
  291.                                 GapValue--;
  292.                                 Buzzer=0;
  293.                                 for(p=0;p<10;p++)
  294.                                 Display_Weight();
  295.                                 Buzzer=1;
  296.                         }
  297.                         write_eeprom();                           //保存數(shù)?
  298.                 }
  299.         }
  300. }
  301. //****************************************************
  302. //主函數(shù)
  303. //****************************************************
  304. void main()
  305. {        
  306.         init();
  307.         init_eeprom();  //開始初始化保存的數(shù)據(jù)
  308.    EA = 0;
  309.    Timer0_Init();
  310.    //初中始化完成,開斷
  311.    EA = 0;
  312.    write_com(0x80+7);
  313.            write_dat('K');         
  314.         write_dat('g');
  315.         while(1)
  316.         {                                                                         //每0.5秒稱重一次
  317.                
  318.                 if (FlagTest==1)
  319.                 {
  320.                         Get_Weight();
  321.                         FlagTest = 0;
  322.                 }
  323.                 if(flag_cz==1)
  324.                 {
  325.                         write_com(0x80+2);
  326.                            write_dat('0');
  327.                            write_dat('.');
  328.                         write_dat('0');
  329.                     write_dat('0');
  330.             write_dat('0');
  331.                         write_dat('K');         
  332.                         write_dat('g');
  333.                 }
  334.                   
  335.                 Display_Weight();         
  336.                 KeyPress();
  337.         }
  338. }
  339. //****************************************************
  340. //稱重
  341. //****************************************************
  342. void Get_Weight()
  343. {
  344.         Weight_Shiwu = HX711_Read();
  345.         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //獲取凈重
  346.         
  347.         Weight_Shiwu = (unsigned int)((float)(Weight_Shiwu*10)/GapValue)-qupi;         //計算實物的實際重量                                                                                                                                
  348.         if(Weight_Shiwu <= 10000)                //超重報警
  349.         {
  350.                 Buzzer = !Buzzer;        
  351.                 LED=!LED;
  352.                 flag_cz=0;
  353.         }
  354.         else
  355.         {
  356.                 if(Weight_Shiwu==0)
  357.                 LED=0;
  358.                 else if(Weight_Shiwu>0)
  359.                 LED=1;
  360.                 Buzzer = 1;
  361.                 flag_cz=0;
  362.         }
  363. }

  364. //****************************************************

  365. //****************************************************
  366. void Get_Maopi()
  367. {
  368.         unsigned char clear,f;
  369.         Weight_Maopi_0 = HX711_Read();
  370.         for(clear=0;clear<10;clear++)
  371.         {
  372.                 Buzzer=1;
  373.                 LED=0;
  374.                 for(f=0;f<40;f++)
  375.                 //Disp_init();
  376.                 Display_Weight();         
  377.                 LED=1;
  378.                 for(f=0;f<40;f++)
  379.                 //Disp_init();
  380.                 Display_Weight();                 
  381.         }
  382. mm:        Weight_Maopi = HX711_Read();
  383.         if((Weight_Maopi*10)/GapValue!=(Weight_Maopi_0*100)/GapValue)
  384.         goto mm;
  385.         Buzzer=0;
  386.         for(f=0;f<10;f++)
  387.         //Disp_init();
  388.         Display_Weight();         
  389.         Buzzer=1;
  390. }

  391. //****************************************************
  392. //MS延時函數(shù)(12M晶振下測試)
  393. //****************************************************
  394. void Delay_ms(unsigned int n)
  395. {
  396.         unsigned int  i,j;
  397.         for(i=0;i<n;i++)
  398.                 for(j=0;j<121;j++);
  399. }





復制代碼
0.png
下載:
電子秤.rar (810.38 KB, 下載次數(shù): 563)
回復

使用道具 舉報

ID:187940 發(fā)表于 2017-4-10 05:57 | 顯示全部樓層
哇哇,我找了很久呢,謝謝樓主大大
回復

使用道具 舉報

ID:190608 發(fā)表于 2017-4-17 21:07 | 顯示全部樓層
樓主我現(xiàn)在就在做這個有不懂的啊
回復

使用道具 舉報

ID:196965 發(fā)表于 2017-5-5 16:06 | 顯示全部樓層
11.c(1): warning C318: can't open file 'HX711.h' 11.C(9): warning C206: '_nop_': missing function-prototype 11.C(9): error C264: intrinsic '_nop_': declaration/activation error 11.C(20): error C202: 'HX711_DOUT': undefined identifier 11.C(22): error C202: 'HX711_SCK': undefined identifier 11.C(24): error C202: 'HX711_DOUT': undefined identifier 11.C(27): error C202: 'HX711_SCK': undefined identifier 11.C(29): error C202: 'HX711_SCK': undefined identifier 11.C(30): error C202: 'HX711_DOUT': undefined identifier 11.C(33): error C202: 'HX711_SCK': undefined identifier 11.C(36): error C202: 'HX711_SCK': undefined identifier 11.C(41): error C100: unprintable character 0xD6 skipped 11.C(41): error C100: unprintable character 0xF7 skipped 11.C(41): error C100: unprintable character 0xBA skipped 11.C(41): error C100: unprintable character 0xAF skipped 11.C(41): error C100: unprintable character 0xCA skipped 11.C(41): error C100: unprintable character 0xFD skipped 11.C(41): error C100: unprintable character 0xB3 skipped 11.C(41): error C100: unprintable character 0xCC skipped 11.C(41): error C100: unprintable character 0xD0 skipped 11.C(41): error C100: unprintable character 0xF2 skipped C:\KEIL\C51\INC\INTRINS.H(12): error C231: '_nop_': redefinition 11.c(46): warning C318: can't open file 'main.h' 11.c(47): warning C318: can't open file 'HX711.h' 11.c(48): warning C318: can't open file 'eeprom52.h' 11.c - 20 Error(s), 5 Warning(s).
回復

使用道具 舉報

ID:196965 發(fā)表于 2017-5-5 16:16 | 顯示全部樓層
#include "main.h"
#include "HX711.h"
#include "eeprom52.h"
有沒有這三個的頭文件???
回復

使用道具 舉報

ID:184230 發(fā)表于 2017-5-6 20:24 | 顯示全部樓層
好厲害,借鑒一下,自己也做一個
回復

使用道具 舉報

ID:197897 發(fā)表于 2017-5-7 22:39 | 顯示全部樓層
感覺分享!
回復

使用道具 舉報

ID:204235 發(fā)表于 2017-5-24 11:59 | 顯示全部樓層
樓主這個是在網上買的稱重套件么  亞克力哪里搞的
回復

使用道具 舉報

ID:186662 發(fā)表于 2017-5-26 17:04 | 顯示全部樓層
好東西,謝謝分享,下來看看
回復

使用道具 舉報

ID:170318 發(fā)表于 2017-6-26 11:20 | 顯示全部樓層
下來學習,謝謝樓主分享
回復

使用道具 舉報

ID:207702 發(fā)表于 2017-7-12 12:44 來自手機 | 顯示全部樓層
很好這個可以有
回復

使用道具 舉報

ID:232534 發(fā)表于 2017-10-10 15:05 | 顯示全部樓層
大兄弟,有沒有仿真
回復

使用道具 舉報

ID:82765 發(fā)表于 2017-10-10 17:45 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

ID:288557 發(fā)表于 2018-3-7 10:14 | 顯示全部樓層
感謝分享!最近正在做這個呢~
回復

使用道具 舉報

ID:294933 發(fā)表于 2018-3-21 14:55 | 顯示全部樓層
這次實訓想借你的資料做一下
回復

使用道具 舉報

ID:129918 發(fā)表于 2018-3-29 10:09 | 顯示全部樓層
畢業(yè)設計參考一下,謝謝分享
回復

使用道具 舉報

ID:314531 發(fā)表于 2018-4-23 17:24 | 顯示全部樓層
下載后文件打不開呀
回復

使用道具 舉報

ID:314531 發(fā)表于 2018-4-23 17:26 | 顯示全部樓層
為什么下載后有權限打不開
回復

使用道具 舉報

ID:339165 發(fā)表于 2018-5-27 21:30 | 顯示全部樓層
非常感謝 有用
回復

使用道具 舉報

ID:314615 發(fā)表于 2018-6-7 10:50 | 顯示全部樓層
Build target 'Target 1'
compiling main.c...
main.c(1): warning C318: can't open file 'HX711.h'
MAIN.C(9): warning C206: '_nop_': missing function-prototype
MAIN.C(9): error C264: intrinsic '_nop_': declaration/activation error
MAIN.C(20): error C202: 'HX711_DOUT': undefined identifier
MAIN.C(22): error C202: 'HX711_SCK': undefined identifier
MAIN.C(24): error C202: 'HX711_DOUT': undefined identifier
MAIN.C(27): error C202: 'HX711_SCK': undefined identifier
MAIN.C(29): error C202: 'HX711_SCK': undefined identifier
MAIN.C(30): error C202: 'HX711_DOUT': undefined identifier
MAIN.C(33): error C202: 'HX711_SCK': undefined identifier
MAIN.C(36): error C202: 'HX711_SCK': undefined identifier
D:\單片機\C51\INC\INTRINS.H(12): error C231: '_nop_': redefinition
main.c(42): warning C318: can't open file 'main.h'
main.c(43): warning C318: can't open file 'HX711.h'
main.c(44): warning C318: can't open file 'eeprom52.h'
Target not created
回復

使用道具 舉報

ID:341273 發(fā)表于 2018-6-12 09:28 | 顯示全部樓層
謝謝樓主
回復

使用道具 舉報

ID:376070 發(fā)表于 2018-7-22 09:53 | 顯示全部樓層
贊贊贊
回復

使用道具 舉報

ID:274952 發(fā)表于 2018-8-20 11:54 來自手機 | 顯示全部樓層
終于找到你
回復

使用道具 舉報

ID:64765 發(fā)表于 2020-3-4 15:14 | 顯示全部樓層
下載,學習。謝樓主分享。以前搞過ICL7135AD的單片機電子秤。看來用HX711更為簡潔,受益匪淺。最好還能增加分度調節(jié)和空稱零點自動跟蹤,就更加完美了。
回復

使用道具 舉報

ID:517951 發(fā)表于 2020-11-15 16:30 | 顯示全部樓層
不錯,值得學習。51hei有你更精彩!!
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区在线看 | 69电影网| av电影一区 | 国产激情免费视频 | 亚洲视频在线一区 | 91久久精品一区 | 99精品视频免费观看 | 蜜桃五月天 | 亚洲精品在线免费看 | 日韩国产高清在线观看 | 日本在线网址 | 成人国产在线视频 | 久热久热 | 日韩中文字幕在线播放 | 亚洲精品一区二区三区四区高清 | 狠狠操狠狠干 | 一区二区三区av | 欧美日本在线观看 | 精品自拍视频在线观看 | 久久久青草婷婷精品综合日韩 | 国产一级视频在线播放 | 精品国产三级 | 免费看片国产 | 国产成人一区二区三区电影 | 欧美大片久久久 | 九色视频网 | 欧美精品久久久 | 久久大陆 | 手机av网| 国产69精品久久99不卡免费版 | 国产视频h | 亚洲欧美视频一区二区 | 日韩午夜激情 | 成年视频在线观看福利资源 | 暖暖成人免费视频 | 午夜影院在线视频 | 欧美午夜精品理论片a级按摩 | 二区三区视频 | 国产精品一区视频 | 在线日韩中文字幕 | 在线观看av网站 |