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

標題: HX711電子秤完整單片機程序+原理圖 [打印本頁]

作者: q87642706    時間: 2017-6-29 08:52
標題: HX711電子秤完整單片機程序+原理圖
電子秤HX71模塊的資料,C51完整源碼


電子秤使用說明:

商品代碼:
0001    香蕉
0002    蘋果
0003    橘子
0004    葡萄
0005    柚子
0006    橙子
0007    梨子
0008    西瓜
0009    木瓜
0010    桃子

鍵盤鍵位定義:

7    8    9    10(清零)
4    5    6    11(刪除)    總金額(P3.7)
1    2    3    12(去皮)
14(累計)0    15(.)    13(確定)

大體流程:
1.連接好傳感器及主板各部件,給系統通電
2.通電后,液晶顯示第一屏,包括學校、系部、專業、制作人以及作品名稱。
3.幾秒后,液晶顯示第二屏,大體格式是:
名稱數量:0000-00
重量:   0.000kg
單價:   0.00 元
金額:------- 元

4.名稱數量:0000-00,前面的0000表示商品代碼,如上面所示,后面00的代表數量。
例如:輸入0001-01,則先按1鍵,再按小數點,再按0,再按1即輸入了0001-01,然后按確定鍵,則顯示香蕉01.
注意:如果輸錯了,比如是0001-00,按確定鍵,即清零了,也就是你得重新輸入數據。
還有幾種情況,也是按確定鍵自動清零的。比如是0000-01,沒有這個商品編碼,則出錯。
再比如,我們設置的商品代碼范圍是1-10,則如果輸入的商品代碼不在范圍內,則按確定鍵即清零,需要重新輸入數據。
5.輸入完名稱數量,再按數字鍵,則是輸入單價,輸入單價后,按確定鍵,則計算出金額,并顯示出來。

6.如果不需要累計,下次稱重前,按一次清零即可。
如果需要累計,則在商品沒有拿下錢,按一次累計,然后拿下商品,再按一次清零即可進行下一次稱重。

7.清零前,必須在拿下商品的情況下才能準確回零。

8.去皮功能:先在傳感器支架上放上要去皮的,然后按一下去皮鍵,則重量那顯示0kg,表示去皮成功。這時,再放上商品,按操作順序進行操作。

9.總金額:當累計幾次后,需要算總金額時,按一下總金額鍵,即可算出總金額,并在屏幕顯示出來。
再按一次總金額即可清零,回到初始狀態。

10.輸入數字過程中,如果出錯,可以退格,也就類似電腦的backspace,向前刪除一位。

11.按鍵注意事項:按鍵時間不能過長,也不能過短,按鍵時間和按鍵壓力一定要適中,這樣才能正確讀取數據。

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<string.h>
  4. #include<lcd12864.h>
  5. #include<hx711.h>
  6. #include<keyboard.h>
  7. #define uint unsigned int
  8. #define uchar unsigned char
  9. #define ulong unsigned long
  10. #define delayNOP();{_nop_();_nop_();_nop_();_nop_();};
  11. //定義量程系數
  12. #define RATIO     6797/1000   
  13. //定義標識
  14. volatile bit FlagTest = 0;                //定時測試標志,每0.5秒置位,測完清0
  15. volatile bit FlagKeyPress = 0;  //有鍵按下標志,處理完畢清0
  16. volatile bit FlagSetPrice = 0;  //價格設置狀態標志,設置好為1。
  17. //管腳定義
  18. //sbit LedA = P2^2;
  19. sbit beep = P1^5;
  20. sbit alert = P1^6;
  21. sbit key_all=P3^7;        //總金額鍵
  22. //顯示用變量
  23. int Counter;
  24. uchar idata str1[6] = "000000";
  25. uchar code name0[]={"本次購物總金額:"};
  26. uchar code name1[]={"香蕉"};
  27. uchar code name2[]={"蘋果"};
  28. uchar code name3[]={"橘子"};
  29. uchar code name4[]={"葡萄"};
  30. uchar code name5[]={"柚子"};
  31. uchar code name6[]={"橙子"};
  32. uchar code name7[]={"梨子"};
  33. uchar code name8[]={"西瓜"};
  34. uchar code name9[]={"木瓜"};
  35. uchar code name10[]={"桃子"};
  36. int i, iTemp;
  37. //稱重用變量
  38. ulong idata FullScale; //滿量程AD值/1000
  39. ulong AdVal;     //AD采樣值
  40. ulong weight;    //重量值,單位g
  41. ulong idata price;     //單價,長整型值,單位為分   
  42. ulong idata money;     //總價,長整型值,單位為分
  43. ulong dec_weight;
  44. //鍵盤處理變量
  45. uchar keycode;
  46. uchar DotPos;                                   //小數點標志及位置
  47. uchar Dec_pi;                //去皮變量
  48. uchar all_flag;                //累計變量
  49. //標志位
  50. uchar num_name;                //名稱數量標志
  51. uchar shuliang;                //數量值
  52. ulong idata all_money;        //累計

  53. //函數聲明
  54. void int2str(int, char *);
  55. void Data_Init();
  56. void Port_Init();  
  57. void Timer0_Init();
  58. void Timer0_ISR () ;
  59. void INT1_Init();
  60. void KeyPress(uchar);
  61. void To_Zero();
  62. void Display_Namenum();
  63. void Display_Price();
  64. void Display_Weight();
  65. void Display_Money();
  66. void Display_Allmoney();
  67. //整型轉字符串的函數,轉換范圍0--65536
  68. void int2str(int x, char* str)
  69. {
  70.         int i=1;
  71.     int tmp=10;
  72.     while(x/tmp!=0)
  73.     {
  74.               i++;
  75.         tmp*=10;
  76.     }
  77.     tmp=x;
  78.     str[i]='\0';
  79.     while(i>1)
  80.     {
  81.         str[--i]='0'+(tmp%10);
  82.         tmp/=10;
  83.     }
  84.     str[0]=tmp+'0';
  85. }
  86. //重新找回零點,每次測量前調用
  87. void To_Zero()
  88. {
  89.            FullScale=ReadCount()/1000;
  90.            price=0;
  91. }
  92. //顯示名稱數量,單位為元,四位整數,兩位小數
  93. void Display_Namenum()
  94. {
  95.            uint i,j;
  96.         uchar A1,A2,A3,A4;
  97.         uchar B1,B2;
  98.            i = price/100;    //得到整數部分
  99.            j = price - i*100;//得到小數部分
  100. //           int2str(a,str1);
  101.         A1=i/1000+48;
  102.         A2=i%1000/100+48;
  103.         A3=i%1000%100/10+48;
  104.         A4=i%1000%100%10+48;
  105.         B1=j/10+48;
  106.         B2=j%10+48;
  107.            //顯示整數部分
  108.               Lcd_Pos(0,4);
  109.                 Lcd_Wdat(':');
  110.                 Lcd_Wdat(A1);
  111.                    Lcd_Wdat(A2);
  112.                 Lcd_Wdat(A3);
  113.                 Lcd_Wdat(A4);
  114.                 Lcd_Wdat('-');
  115.            //顯示小數點, 小數點部分
  116.         //   int2str(j,str1);
  117.         Lcd_Pos(0,7);
  118.                 Lcd_Wdat(B1);
  119.                 Lcd_Wdat(B2);
  120. }
  121. //顯示單價,單位為元,四位整數,兩位小數
  122. void Display_Price()
  123. {
  124.            uint i,j;
  125.         uchar A1,A2,A3,A4;
  126.         uchar B1,B2;
  127.            i = price/100;    //得到整數部分
  128.            j = price - i*100;//得到小數部分
  129. //           int2str(a,str1);
  130.         A1=i/1000+48;
  131.         A2=i%1000/100+48;
  132.         A3=i%1000%100/10+48;
  133.         A4=i%1000%100%10+48;
  134.         B1=j/10+48;
  135.         B2=j%10+48;
  136.            //顯示整數部分
  137.            if (i>=1000)
  138.            {
  139.               Lcd_Pos(2,3);
  140.                 Lcd_Wdat(A1);
  141.                    Lcd_Wdat(A2);
  142.                 Lcd_Wdat(A3);
  143.                 Lcd_Wdat(A4);
  144.            }
  145.            else if (i>=100)
  146.            {
  147.               Lcd_Pos(2,3);
  148.                 Lcd_Wdat(' ');
  149.                    Lcd_Wdat(A2);
  150.                 Lcd_Wdat(A3);
  151.                 Lcd_Wdat(A4);
  152.            }
  153.            else if (i>=10)
  154.            {
  155.               Lcd_Pos(2,3);
  156.                 Lcd_Wdat(' ');
  157.                 Lcd_Wdat(' ');
  158.                 Lcd_Wdat(A3);
  159.                 Lcd_Wdat(A4);
  160.            }
  161.    else
  162.    {
  163.         Lcd_Pos(2,3);
  164.                 Lcd_Wdat(' ');
  165.                 Lcd_Wdat(' ');
  166.                 Lcd_Wdat(' ');
  167.                 Lcd_Wdat(A4);
  168.    }
  169.    //顯示小數點, 小數點部分
  170. //   int2str(j,str1);
  171.    if(j<10)
  172.    {
  173.         Lcd_Pos(2,5);
  174.                 Lcd_Wdat('.');
  175.                 Lcd_Wdat('0');
  176.                 Lcd_Wdat(B2);
  177.                 Lcd_Wdat(' ');          
  178.    }
  179.    else
  180.    {
  181.         Lcd_Pos(2,5);
  182.                 Lcd_Wdat('.');
  183.                 Lcd_Wdat(B1);
  184.                 Lcd_Wdat(B2);
  185.                 Lcd_Wdat(' ');
  186.    }
  187. }
  188. //顯示重量,單位kg,兩位整數,三位小數
  189. void Display_Weight()
  190. {
  191.            uint i,j;
  192.            uchar A1,A2;
  193.            uchar B1,B2,B3;
  194.            //weight單位是g                                          
  195.            i = weight/1000;    //得到整數部分
  196.            j = weight - i*1000;//得到小數部分
  197.            A1=i/10+48;
  198.            A2=i%10+48;
  199.            B1=j/100+48;
  200.            B2=j%100/10+48;
  201.            B3=j%100%10+48;
  202.         //   int2str(i,str1);
  203.            if (i>=10)
  204.            {
  205.              
  206.            }
  207.            else
  208.            {
  209.                Lcd_Pos(1,4);
  210.                 Lcd_Wdat(' ');
  211.                 Lcd_Wdat(A2);
  212.            }  
  213.         //   int2str(j,str1);
  214.            if (j<10)
  215.            {
  216.               Lcd_Pos(1,5);
  217.                 Lcd_Wdat('.');
  218.                 Lcd_Wdat('0');
  219.                 Lcd_Wdat('0');
  220.                 Lcd_Wdat(B3);
  221.            }
  222.            else if (j<100)
  223.            {
  224.               Lcd_Pos(1,5);
  225.                 Lcd_Wdat('.');
  226.                 Lcd_Wdat('0');
  227.                 Lcd_Wdat(B2);
  228.                 Lcd_Wdat(B3);
  229.            }
  230.            else
  231.            {
  232.               Lcd_Pos(1,5);
  233.                 Lcd_Wdat('.');
  234.                 Lcd_Wdat(B1);
  235.                 Lcd_Wdat(B2);
  236.                 Lcd_Wdat(B3);
  237.            }
  238. }
  239. //顯示總價,單位為元,四位整數,兩位小數
  240. void Display_Money()
  241. {
  242.            uint i,j;
  243.            uchar A1,A2,A3,A4;
  244.            uchar B1,B2;
  245.            if (money>999999)         //超出顯示量程
  246.            {
  247.               Lcd_Pos(3,3);
  248.                 Lcd_Wdat('-');
  249.                 Lcd_Wdat('-');
  250.                    Lcd_Wdat('-');
  251.                 Lcd_Wdat('-');
  252.                 Lcd_Wdat('-');
  253.                 Lcd_Wdat('-');
  254.                 Lcd_Wdat('-');
  255.               return;      
  256.            }
  257.            i = money/100;    //得到整數部分
  258.            j = money - i*100;//得到小數部分
  259.            A1=i/1000+48;
  260.            A2=i%1000/100+48;
  261.            A3=i%1000%100/10+48;
  262.            A4=i%1000%100%10+48;
  263.            B1=j/10+48;
  264.            B2=j%10+48;
  265.         //   int2str(i,str1);
  266.            //顯示整數部分
  267.         if (i>=1000)
  268.            {
  269.               Lcd_Pos(3,3);
  270.                 Lcd_Wdat(A1);
  271.                    Lcd_Wdat(A2);
  272.                 Lcd_Wdat(A3);
  273.                 Lcd_Wdat(A4);
  274.            }
  275.            else if (i>=100)
  276.            {
  277.               Lcd_Pos(3,3);
  278.                 Lcd_Wdat(' ');
  279.                    Lcd_Wdat(A2);
  280.                 Lcd_Wdat(A3);
  281.                 Lcd_Wdat(A4);
  282.            }
  283.            else if (i>=10)
  284.            {
  285.               Lcd_Pos(3,3);
  286.                 Lcd_Wdat(' ');
  287.                 Lcd_Wdat(' ');
  288.                 Lcd_Wdat(A3);
  289.                 Lcd_Wdat(A4);
  290.            }
  291.            else
  292.            {
  293.              Lcd_Pos(3,3);
  294.                 Lcd_Wdat(' ');
  295.                 Lcd_Wdat(' ');
  296.                 Lcd_Wdat(' ');
  297.                 Lcd_Wdat(A4);
  298.            }
  299.            //顯示小數點, 小數點部分
  300.         //   int2str(j,str1);
  301.            if(j<10)
  302.            {
  303.         Lcd_Pos(3,5);
  304.                 Lcd_Wdat('.');
  305.                 Lcd_Wdat('0');
  306.                 Lcd_Wdat(B2);          
  307.            }
  308.            else
  309.            {
  310.         Lcd_Pos(3,5);
  311.                 Lcd_Wdat('.');
  312.                 Lcd_Wdat(B1);
  313.                 Lcd_Wdat(B2);
  314.            }
  315. }
  316. //顯示總金額,單位為元,四位整數,兩位小數
  317. void Display_Allmoney()
  318. {
  319.            uint i,j;
  320.            uchar A1,A2,A3,A4;
  321.            uchar B1,B2;
  322. //        all_money=all_money/2;
  323.            if (all_money>999999)         //超出顯示量程
  324.            {
  325.               Lcd_Pos(3,3);
  326.                 Lcd_Wdat('-');
  327.                 Lcd_Wdat('-');
  328.                    Lcd_Wdat('-');
  329.                 Lcd_Wdat('-');
  330.                 Lcd_Wdat('-');
  331.                 Lcd_Wdat('-');
  332.                 Lcd_Wdat('-');
  333.               return;      
  334.            }
  335.            i = all_money/100;    //得到整數部分
  336.            j = all_money - i*100;//得到小數部分
  337.            A1=i/1000+48;
  338.            A2=i%1000/100+48;
  339.            A3=i%1000%100/10+48;
  340.            A4=i%1000%100%10+48;
  341.            B1=j/10+48;
  342.            B2=j%10+48;
  343.         //   int2str(i,str1);
  344.            //顯示整數部分
  345.         if (i>=1000)
  346.            {
  347.               Lcd_Pos(2,3);
  348.                 Lcd_Wdat(A1);
  349.                    Lcd_Wdat(A2);
  350.                 Lcd_Wdat(A3);
  351.                 Lcd_Wdat(A4);
  352.            }
  353.            else if (i>=100)
  354.            {
  355.               Lcd_Pos(2,3);
  356.                 Lcd_Wdat(' ');
  357.                    Lcd_Wdat(A2);
  358.                 Lcd_Wdat(A3);
  359.                 Lcd_Wdat(A4);
  360.            }
  361.            else if (i>=10)
  362.            {
  363.               Lcd_Pos(2,3);
  364.                 Lcd_Wdat(' ');
  365.                 Lcd_Wdat(' ');
  366.                 Lcd_Wdat(A3);
  367.                 Lcd_Wdat(A4);
  368.            }
  369.            else
  370.            {
  371.              Lcd_Pos(2,3);
  372.                 Lcd_Wdat(' ');
  373.                 Lcd_Wdat(' ');
  374.                 Lcd_Wdat(' ');
  375.                 Lcd_Wdat(A4);
  376.            }
  377.            //顯示小數點, 小數點部分
  378.         //   int2str(j,str1);
  379.            if(j<10)
  380.            {
  381.         Lcd_Pos(2,5);
  382.                 Lcd_Wdat('.');
  383.                 Lcd_Wdat('0');
  384.                 Lcd_Wdat(B2);          
  385.            }
  386.            else
  387.            {
  388.         Lcd_Pos(2,5);
  389.                 Lcd_Wdat('.');
  390.                 Lcd_Wdat(B1);
  391.                 Lcd_Wdat(B2);
  392.            }
  393. }
  394. //數據初始化
  395. void Data_Init()
  396. {
  397.            price = 0;
  398.            DotPos = 0;
  399.            beep = 1;
  400.            alert = 1;
  401.         num_name=0;
  402.         all_money=0;
  403.         Dec_pi=0;
  404.         dec_weight=0;
  405.         all_flag=0;
  406. }
  407. //管腳配置
  408. void Port_Init()
  409. {
  410.        
  411. }
  412. //定時器0初始化
  413. void Timer0_Init()
  414. {
  415.         ET0 = 1;        //允許定時器0中斷
  416.         TMOD = 1;       //定時器工作方式選擇
  417.         TL0 = 0x06;     
  418.         TH0 = 0xf8;     //定時器賦予初值
  419.         TR0 = 1;        //啟動定時器
  420. }
  421. //定時器0中斷
  422. void Timer0_ISR (void) interrupt 1 using 0
  423. {
  424.         TL0 = 0x06;
  425.         TH0 = 0xf8;     //定時器賦予初值

  426.         //每0.5秒鐘刷新重量
  427.     Counter ++;
  428.     if (Counter >= 200)
  429.     {
  430.                FlagTest = 1;
  431.                    Counter = 0;
  432.     }
  433. }
  434. //按鍵響應程序,參數是鍵值
  435. //返回鍵值:
  436. //         7          8    9      10(清0)
  437. //         4          5    6      11(刪除)
  438. //         1          2    3      12(未定義)
  439. //         14(未定義) 0    15(.)  13(確定價格)

  440. void KeyPress(uchar keycode)
  441. {
  442.            uint nam1,nam2;
  443.         uchar i;
  444.         switch (keycode)
  445.            {
  446.               case 0:
  447.               case 1:
  448.               case 2:
  449.               case 3:
  450.               case 4:
  451.               case 5:
  452.               case 6:
  453.               case 7:
  454.               case 8:
  455.               case 9:
  456.             //目前在設置整數位,要注意price是整型,存儲單位為分
  457.                    if (DotPos == 0)
  458.                 {  
  459.                     //最多只能設置到千位
  460.                         if (price<100000)
  461.                         {
  462.                               price=price*10+keycode*100;
  463.                         }
  464.                 }
  465.                  //目前在設置小數位
  466.                 else if (DotPos==1)  //小數點后第一位
  467.                 {
  468.                     price=price+keycode*10;
  469.                         DotPos++;
  470.                 }
  471.                 else if (DotPos==2)
  472.                 {
  473.                     price=price+keycode;
  474.                         DotPos++;
  475.                 }
  476.                 if(num_name==0)
  477.                 {
  478.                         Display_Namenum();
  479.                 }
  480.                 else if(num_name==1)
  481.                 {
  482.                         Display_Price();
  483.                 }
  484.             break;
  485.               case 10:   //清零鍵
  486.                      To_Zero();
  487.                          Display_Price();
  488.                         Display_Namenum();
  489.                          FlagSetPrice = 0;
  490.                          DotPos = 0;
  491.                         num_name=0;
  492.                         Dec_pi=0;
  493.                         dec_weight=0;
  494.                          break;
  495.                   case 11:        //刪除鍵,按一次刪除最右一個數字
  496.                      if (DotPos==2)
  497.                          {
  498.                             price=price/10;
  499.                                 price=price*10;
  500.                                 DotPos--;
  501.                          }
  502.                          else if (DotPos==1)
  503.                          {
  504.                             price=price/100;
  505.                                 price=price*100;
  506.                                 DotPos--;
  507.                          }
  508.                          else if (DotPos==0)
  509.                          {
  510.                             price=price/1000;
  511.                                 price=price*100;
  512.                          }
  513.                          if(num_name==0)
  514.                         {
  515.                                 Display_Namenum();
  516.                         }
  517.                         else if(num_name==1)
  518.                         {
  519.                                 Display_Price();
  520.                         }
  521.                  break;
  522.                 case 12:                //
  523.                         Dec_pi=1;        //去皮變量
  524.                         break;
  525.               case 13:   //確認鍵,名稱數量和單價
  526.                      if(num_name==0)
  527.                         {
  528.                                 nam1=price/100;
  529.                                 nam2=price-nam1*100;
  530.                                    num_name=1;
  531.                                 if(nam2!=0)
  532.                                 {
  533.                                         //顯示整數部分
  534.                                       Lcd_Pos(0,4);
  535.                                         Lcd_Wdat(':');
  536.                                         Lcd_Wdat(' ');
  537.                                         Lcd_Pos(0,5);                        //顯示位置為第四行的第1個字符               
  538.                                         i = 0;
  539.                                         if(nam1==1)
  540.                                         {
  541.                                             while(name1[i] != '\0')
  542.                                             {
  543.                                                        Lcd_Wdat(name1[i]);             //顯示相應表格中的字符                  
  544.                                                        i++;
  545.                                             }
  546.                                         }
  547.                                         else if(nam1==2)
  548.                                         {
  549.                                             while(name2[i] != '\0')
  550.                                             {
  551.                                                        Lcd_Wdat(name2[i]);             //顯示相應表格中的字符                  
  552.                                                        i++;
  553.                                             }       
  554.                                         }
  555.                                         else if(nam1==3)
  556.                                         {
  557.                                             while(name3[i] != '\0')
  558.                                             {
  559.                                                        Lcd_Wdat(name3[i]);             //顯示相應表格中的字符                  
  560.                                                        i++;
  561.                                             }       
  562.                                         }
  563.                                            else if(nam1==4)
  564.                                         {
  565.                                             while(name4[i] != '\0')
  566.                                             {
  567.                                                        Lcd_Wdat(name4[i]);             //顯示相應表格中的字符                  
  568.                                                        i++;
  569.                                             }       
  570.                                         }
  571.                                         else if(nam1==5)
  572.                                         {
  573.                                             while(name5[i] != '\0')
  574.                                             {
  575.                                                        Lcd_Wdat(name5[i]);             //顯示相應表格中的字符                  
  576.                                                        i++;
  577.                                             }       
  578.                                         }
  579.                                         else if(nam1==6)
  580.                                         {       
  581.                                             while(name6[i] != '\0')
  582.                                             {
  583.                                                        Lcd_Wdat(name6[i]);             //顯示相應表格中的字符                  
  584.                                                        i++;
  585.                                             }       
  586.                                         }
  587.                                         else if(nam1==7)
  588.                                         {
  589.                                             while(name7[i] != '\0')
  590.                                             {
  591.                                                        Lcd_Wdat(name7[i]);             //顯示相應表格中的字符                  
  592.                                                        i++;
  593.                                             }       
  594.                                         }
  595.                                            else if(nam1==8)
  596.                                         {
  597.                                             while(name8[i] != '\0')
  598.                                             {
  599.                                                        Lcd_Wdat(name8[i]);             //顯示相應表格中的字符                  
  600.                                                        i++;
  601.                                             }       
  602.                                         }
  603.                                         else if(nam1==9)
  604.                                         {
  605.                                             while(name9[i] != '\0')
  606.                                             {
  607.                                                        Lcd_Wdat(name9[i]);             //顯示相應表格中的字符                  
  608.                                                        i++;
  609.                                             }       
  610.                                         }
  611.                                         else if(nam1==10)
  612.                                         {
  613.                                             while(name10[i] != '\0')
  614.                                             {
  615.                                                        Lcd_Wdat(name10[i]);             //顯示相應表格中的字符                  
  616.                                                        i++;
  617.                                             }       
  618.                                         }
  619.                                         else
  620.                                         {
  621.                                                 num_name=0;
  622.                                                 Lcd_Pos(0,4);
  623.                                                 Lcd_Wdat(':');
  624.                                                 Lcd_Wdat('0');
  625.                                                 Lcd_Wdat('0');
  626.                                                 Lcd_Wdat('0');
  627.                                                 Lcd_Wdat('0');
  628.                                                 Lcd_Wdat('-');
  629.                                                 Lcd_Wdat('0');
  630.                                                 Lcd_Wdat('0');
  631.                                         }
  632.                                 }
  633.                                 else if(nam2==0)
  634.                                 {
  635.                                         num_name=0;
  636.                                         Lcd_Pos(0,4);
  637.                                         Lcd_Wdat(':');
  638.                                         Lcd_Wdat('0');
  639.                                         Lcd_Wdat('0');
  640.                                         Lcd_Wdat('0');
  641.                                         Lcd_Wdat('0');
  642.                                         Lcd_Wdat('-');
  643.                                         Lcd_Wdat('0');
  644.                                         Lcd_Wdat('0');       
  645.                                 }
  646.                                 shuliang=nam2;
  647.                                 price=0;
  648.                                 DotPos=0;
  649.                                 Dec_pi=0;
  650.                         }
  651.                         else if(num_name==1)
  652.                         {
  653.                                 FlagSetPrice = 1;
  654.                                  DotPos=0;
  655.                                 num_name=0;
  656.                                 Dec_pi=0;
  657.                         }
  658.                          break;
  659.                 case 14:                 //累計
  660.                         all_money=all_money+money;
  661.                         break;
  662.                   case 15:   //小數點按下
  663.                          if (DotPos == 0)  
  664.                          {   
  665.                                 DotPos = 1;      //小數點后第一位
  666.                          }
  667.                      break;
  668.                    }
  669.         Delay(10);
  670. }
  671. void main()
  672. {
  673.         //   Rom_CS=1;
  674.            Lcd_Init();
  675.            EA = 0;
  676.            Data_Init();
  677.            Port_Init();
  678.            Timer0_Init();
  679.            //初始化完成,開中斷
  680.            EA = 1;
  681.            beep=1;
  682.            //背光
  683.         //   LedA = 1;
  684.            Lcd_Clear();    //clear all dots
  685.           Lcd_Display1();
  686.           Delay(1000);
  687.           To_Zero();
  688.         Lcd_Clear();
  689.           Lcd_Display2();
  690.            Display_Price();   
  691.            while(1)
  692.            {
  693.               //每0.5秒稱重一次
  694.                   if (FlagTest==1)
  695.                   {
  696.                      //稱重,得到重量值weight,單位為g
  697.                          AdVal=ReadCount();
  698.                          weight=FullScale-AdVal/1000;
  699.                          if (weight>0x8000) weight=0;
  700.                          weight=10000*weight/FullScale;
  701.                          weight=weight*RATIO;
  702.                        
  703.                         if(Dec_pi==1)
  704.                         {
  705.                                 dec_weight=weight;
  706.                                 Dec_pi=0;
  707.                         }
  708.                         weight=weight-dec_weight;
  709.                          //如果超量程,則報警
  710.                          if (weight >= 10000)
  711.                          {
  712.                             beep = 0;
  713.                                 alert = 0;
  714.                                 Lcd_Pos(1,4);
  715.                                 Lcd_Wdat('-');
  716.                                 Lcd_Wdat('-');
  717.                                    Lcd_Wdat('-');
  718.                                 Lcd_Wdat('-');
  719.                                 Lcd_Wdat('-');
  720.                                 Lcd_Wdat('-');

  721.                                    Lcd_Pos(3,3);
  722.                                 Lcd_Wdat('-');
  723.                                 Lcd_Wdat('-');
  724.                                    Lcd_Wdat('-');
  725.                                 Lcd_Wdat('-');
  726.                                 Lcd_Wdat('-');
  727.                                 Lcd_Wdat('-');
  728.                                 Lcd_Wdat('-');
  729. ……………………

  730. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
HX711完整單片機程序 圖.rar (205.6 KB, 下載次數: 1259)












作者: admin    時間: 2017-6-30 03:29
好資料,51黑有你更精彩!!!
作者: qxdqx    時間: 2017-6-30 07:19
下載看看.
作者: WangYM68    時間: 2017-6-30 11:25
很好的學習資料,謝謝分享
作者: 921451557    時間: 2017-9-12 10:59
謝謝分享
作者: guo151    時間: 2017-12-11 20:52
文章很好
作者: songxia8013    時間: 2018-1-18 11:04
不錯,把我的設計資料給分享了!
作者: jera    時間: 2018-4-17 00:42
文章很好!!!!!!!!!!
作者: lujunli    時間: 2018-4-17 11:13
確實是好東西啊,值得分享。
作者: czrloveljj    時間: 2018-4-19 22:01
好東西

作者: LOVE灬    時間: 2018-4-27 15:09
下載下來打不開,是怎么回事
作者: coldfire    時間: 2018-5-10 19:56
不能顯示啊  顯示亂碼
作者: thjk    時間: 2018-5-15 23:46
感謝分享
作者: 發斯蒂芬    時間: 2018-5-16 11:04
感謝分享
作者: gjyw    時間: 2018-5-17 11:19
感謝樓主
作者: 776872241    時間: 2018-6-7 14:44
感謝樓主分享
作者: hei0    時間: 2018-7-2 18:25
樓主辛苦
作者: hei0    時間: 2018-7-4 08:59
想知道仿真有HX711傳感器么    沒找到啊
作者: 心青見    時間: 2018-7-10 19:20
感謝分享



作者: ptlantu    時間: 2018-7-11 09:44
謝謝分享 ,mark下
作者: 的外號    時間: 2018-7-14 09:28
感謝樓主
作者: Dirk_totti    時間: 2018-7-29 19:14
感謝分享
作者: cyfdc51    時間: 2018-7-30 00:53
謝謝分享
作者: 中恒電子asus    時間: 2018-8-4 14:09
確實是好東西啊,值得分享。

作者: sdsadsadsadsa    時間: 2018-10-2 22:23
不錯
很好
太棒了
作者: 8989896565    時間: 2018-10-3 14:20
很實用
作者: XITYIJUN    時間: 2018-11-16 15:38
很好的學習資料,謝謝分享
作者: 地方女大夫    時間: 2018-11-27 11:19
感謝,,,,,
作者: 劃水小隊長    時間: 2018-11-28 11:22
請問樓主為什么下載下來的程序用keli打不開
作者: 丿長安月    時間: 2018-12-6 23:28
ptlantu 發表于 2018-7-11 09:44
謝謝分享 ,mark下

這個是驅動數碼管還是液晶屏啊
作者: Thunder.    時間: 2018-12-9 20:12
coldfire 發表于 2018-5-10 19:56
不能顯示啊  顯示亂碼

你的亂碼解決了嗎
作者: sabine    時間: 2018-12-10 11:14
好資料,
作者: 1472580    時間: 2018-12-11 11:07
感謝樓主,最近正在做這個電子秤,給了我很好的學習資料。
作者: macklemore    時間: 2018-12-11 14:43
感謝樓主大大!
作者: johndada    時間: 2018-12-11 16:59
很給力
作者: Qianyi1244    時間: 2018-12-17 13:56
謝謝分享,很好的資料
作者: zhengguang    時間: 2019-1-15 16:11
下載學習下,謝謝樓主
作者: iTong    時間: 2019-2-11 15:18
感謝分享!
作者: cliang223    時間: 2019-2-11 16:37
學習下      
作者: 兩笙山世    時間: 2019-2-27 10:49
謝謝分享與制作
作者: 兩笙山世    時間: 2019-2-27 10:50
東西很不錯
作者: 半個月亮    時間: 2019-4-2 10:59
老哥很穩健
作者: 圣所的剪云者    時間: 2019-4-13 10:56
感謝分享!
作者: 12678    時間: 2019-4-22 15:01
樓主,為什么你這么優秀呢
作者: 江洛夜微涼    時間: 2019-4-23 17:45
老哥 你那個HX711模塊電阻、電容都是啥作用能解釋一下嗎 你關注我一下我的問答區提問  
作者: junglecc    時間: 2019-7-9 15:00
雖然是用51寫的但是對我的參考意義很大

作者: 囚心久愛不膩    時間: 2019-7-9 15:37
我剛好在做這個電子稱,很不錯的資料,大有收獲!!很給力!
作者: szzxl10    時間: 2019-7-13 09:27
確實是好東西啊,值得分享
作者: hellowC8051    時間: 2019-7-18 13:28
很好的學習資料,謝謝分享
作者: punp    時間: 2019-9-5 14:51
厲害厲害
作者: 自言自語    時間: 2019-9-23 22:08
秤出的重量比實際多了要怎么修改?用的是5kg的傳感器
作者: 自言自語    時間: 2019-9-24 14:52
有大神嗎幫幫忙
作者: zgs660429    時間: 2019-9-28 11:29
文章很好的,下載學習的。
作者: goalpeak    時間: 2019-9-28 14:55
自言自語 發表于 2019-9-23 22:08
秤出的重量比實際多了要怎么修改?用的是5kg的傳感器

傳感器要先標定,后使用,如有其它不懂可以加我
作者: goalpeak    時間: 2019-9-28 14:56
自言自語 發表于 2019-9-24 14:52
有大神嗎幫幫忙

需要什么幫助,大家一起交流
作者: 自言自語    時間: 2019-10-1 17:32
goalpeak 發表于 2019-9-28 14:55
傳感器要先標定,后使用,如有其它不懂可以加我

大佬,傳感器如何定標,說具體點,我是小白不太懂。
作者: stdjj000    時間: 2019-10-7 14:56

好資料,51黑有你更精彩!!!
作者: wilger    時間: 2020-1-16 15:17
很好的資料,很給力
作者: Hmu    時間: 2020-3-21 11:52
有沒有老哥畫完原理圖的--
作者: xinyihe2006    時間: 2020-3-29 08:49
HX711電子秤完整單片機程序+原理圖 [修改]
作者: jkyc66    時間: 2020-4-2 16:39
謝謝分享
作者: fjxyw1    時間: 2020-5-9 13:43
謝謝樓主!
作者: juncai8131    時間: 2020-6-11 15:38
感謝分享,樓主辛苦了
作者: yuacj    時間: 2020-6-17 10:49
請問數碼管加上還需要其他程序嗎
作者: xwd2010    時間: 2020-6-17 12:46
收藏了,謝謝
作者: tieq1952    時間: 2020-6-25 07:17
謝謝分享!!!
作者: kissvenus00    時間: 2020-6-25 08:39
這個不錯  功能比較好
作者: milimi    時間: 2020-6-25 10:18
學到很多
作者: yuyong308    時間: 2020-6-26 15:33
厲害,學習的榜樣
作者: qq549059056    時間: 2020-6-27 12:09
謝謝讓我有參考的地方?
作者: Jeff_BlindCat    時間: 2020-6-27 12:11
分享無限,謝謝樓主指點參考。
作者: lihai350    時間: 2020-12-1 19:17
復制代碼驗證一下,做個項目

作者: dwdsp    時間: 2020-12-16 17:32
不論有沒有用到,真心不錯的,贊一個了
作者: 木可    時間: 2021-4-10 10:28
大佬,請問加sensor是為什么
作者: jxlsr    時間: 2021-5-6 20:42
今天我也買了一個HX711稱模塊正想找個程序來測試一下。謝謝
作者: oosheoo    時間: 2021-5-7 04:45
經典的程序,有時間做一個。
作者: gaoshuo230    時間: 2021-7-31 15:08
東西不錯 值得收藏 轉發
作者: zyy1100    時間: 2022-2-24 14:12
原理圖不是AD文件,是圖片格式的
作者: xeh073    時間: 2022-8-16 13:16
大體流程:
1.連接好傳感器及主板各部件,給系統通電
2.通電后,液晶顯示第一屏,包括學校、系部、專業、制作人以及作品名稱。
3.幾秒后,液晶顯示第二屏,大體格式是:
名稱數量:0000-00
重量:   0.000kg
單價:   0.00 元
金額:------- 元

4.名稱數量:0000-00,前面的0000表示商品代碼,如上面所示,后面00的代表數量。
例如:輸入0001-01,則先按1鍵,再按小數點,再按0,再按1即輸入了0001-01,然后按確定鍵,則顯示香蕉01.
注意:如果輸錯了,比如是0001-00,按確定鍵,即清零了,也就是你得重新輸入數據。
還有幾種情況,也是按確定鍵自動清零的。比如是0000-01,沒有這個商品編碼,則出錯。
再比如,我們設置的商品代碼范圍是1-10,則如果輸入的商品代碼不在范圍內,則按確定鍵即清零,需要重新輸入數據。
5.輸入完名稱數量,再按數字鍵,則是輸入單價,輸入單價后,按確定鍵,則計算出金額,并顯示出來。

6.如果不需要累計,下次稱重前,按一次清零即可。
如果需要累計,則在商品沒有拿下錢,按一次累計,然后拿下商品,再按一次清零即可進行下一次稱重。

7.清零前,必須在拿下商品的情況下才能準確回零。

8.去皮功能:先在傳感器支架上放上要去皮的,然后按一下去皮鍵,則重量那顯示0kg,表示去皮成功。這時,再放上商品,按操作順序進行操作。

9.總金額:當累計幾次后,需要算總金額時,按一下總金額鍵,即可算出總金額,并在屏幕顯示出來。
再按一次總金額即可清零,回到初始狀態。

10.輸入數字過程中,如果出錯,可以退格,也就類似電腦的backspace,向前刪除一位。

11.按鍵注意事項:按鍵時間不能過長,也不能過短,按鍵時間和按鍵壓力一定要適中,這樣才能正確讀取數據。
作者: gotodiy    時間: 2022-8-17 15:01
精度可以到0.1g嗎
作者: 我們159    時間: 2022-10-24 12:11
請問一下這個怎么和LCD12864連線呢,12864的引腳定義和這個有點不一樣啊?
作者: Alan_zcb    時間: 2023-4-26 13:31
雖然現在是2023年了,但還是好資料。
作者: 2470241036    時間: 2023-7-18 21:45
Alan_zcb 發表于 2023-4-26 13:31
雖然現在是2023年了,但還是好資料。

這個RW是什么玩意 怎么中間連起來了呢

作者: joyb    時間: 2023-7-19 10:46
丿長安月 發表于 2018-12-6 23:28
這個是驅動數碼管還是液晶屏啊

圖紙上有LCD12864




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产高清一区二区三区 | 国产成人精品一区二区 | 欧美视频精品 | 91av免费看 | 国产精品一区久久久 | 91视频电影 | www.婷婷| 日韩成人在线观看 | 综合另类| av毛片| 日韩在线小视频 | 三级免费毛片 | 久久国产婷婷国产香蕉 | 中文字幕久久精品 | 成人影院网站ww555久久精品 | 欧美一区二区免费 | 成人免费片| 在线午夜电影 | 久久久久久久久久久久91 | a成人| 91高清在线 | 一级毛片免费完整视频 | 91视频大全 | 搞黄网站在线观看 | 久久小视频 | 久久成人综合 | 日韩在线国产 | 欧美性受xxxx | 一区二区在线 | 久久精品国产一区二区电影 | 日日干日日操 | 九九亚洲 | 亚洲国产成人av好男人在线观看 | 欧美成人激情 | 久久精品一级 | 国产一区在线免费观看视频 | 成人久久久 | 国产激情偷乱视频一区二区三区 | 欧美一区二区三区日韩 | 涩涩视频网站在线观看 | 午夜寂寞网站 |