找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 32843|回复: 34
打印 上一主题 下一主题
收起左侧

HX711电子称完整单片机程序和原理图

  [复制链接]
跳转到指定楼层
楼主
HX711电子称原理图:


HX711电子秤使用说明:
商品代码:
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.按键注意事项:按键时间不能过长,也不能过短,按键时间和按键压力一定要适中,这样才能正确读取数据。

HX711电子称部分源程序:
  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.                          //如果不超量程
  731.                          else
  732.                          {
  733.                             beep = 1;
  734.                                 alert = 1;
  735.                                 //显示重量值
  736.                         Display_Weight();                 
  737.                                  //如果单价设定好了,则计算价格
  738.                    

  739. …………余下代码请下载附件…………
复制代码


电子秤的完整程序代码和原理图等资料下载:
HX711完整单片机程序.rar (206 KB, 下载次数: 610)



评分

参与人数 3黑币 +109 收起 理由
LT81041667 + 5 很给力!
qjzyx + 4 赞一个!
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏23 分享淘帖 顶2 踩1
回复

使用道具 举报

沙发
ID:200153 发表于 2017-5-12 23:57 | 只看该作者
厉害了,我的哥
回复

使用道具 举报

板凳
ID:105804 发表于 2017-5-13 06:36 | 只看该作者
感谢分享,正需要
回复

使用道具 举报

地板
ID:216505 发表于 2017-7-25 11:11 | 只看该作者
谢谢楼主分享,学习下
回复

使用道具 举报

5#
ID:52857 发表于 2017-7-27 11:25 | 只看该作者
看看学习一下
回复

使用道具 举报

6#
ID:157057 发表于 2017-7-27 11:57 | 只看该作者
谢谢楼主分享,学习下
回复

使用道具 举报

7#
ID:128121 发表于 2017-7-27 15:11 | 只看该作者
很不错
回复

使用道具 举报

8#
ID:229863 发表于 2017-8-29 14:11 | 只看该作者
谢谢分享,多谢楼主
回复

使用道具 举报

9#
ID:238525 发表于 2017-10-11 10:51 | 只看该作者
谢谢分享,多谢楼主
回复

使用道具 举报

10#
ID:249717 发表于 2017-11-30 08:16 | 只看该作者
感谢分享
回复

使用道具 举报

11#
ID:128518 发表于 2018-2-8 09:32 | 只看该作者
非常好,正需要!
回复

使用道具 举报

12#
ID:283967 发表于 2018-2-13 16:16 | 只看该作者
感谢分享
回复

使用道具 举报

13#
ID:266116 发表于 2018-2-13 20:44 | 只看该作者
谢谢分享
回复

使用道具 举报

14#
ID:284326 发表于 2018-2-17 20:21 | 只看该作者
谢谢大佬
回复

使用道具 举报

15#
ID:304591 发表于 2018-4-9 17:14 | 只看该作者
学习中
回复

使用道具 举报

16#
ID:310828 发表于 2018-4-18 13:53 | 只看该作者
楼主很强
回复

使用道具 举报

17#
ID:312831 发表于 2018-4-21 08:36 | 只看该作者
很厉害
回复

使用道具 举报

18#
ID:345291 发表于 2018-6-5 11:26 | 只看该作者
感谢楼主分享,多谢多谢,
回复

使用道具 举报

19#
ID:314218 发表于 2018-6-30 11:53 | 只看该作者
感谢楼主分享   
回复

使用道具 举报

20#
ID:348594 发表于 2018-7-21 21:20 | 只看该作者
这个精度多少啊
回复

使用道具 举报

21#
ID:375092 发表于 2018-7-30 11:00 | 只看该作者
楼主,不知道为什么,我用不了,管脚单片机都是和你一样的,上电之后重量那点一直显示0.000kg,不知道是不是我的HX711的问题还是怎么回事,我这个是称5KG的称

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

22#
ID:382431 发表于 2018-8-3 10:04 | 只看该作者
不错,真给力,赞一个
回复

使用道具 举报

23#
ID:384477 发表于 2018-9-1 15:49 | 只看该作者
楼主,为啥我照你的接好后只显示第一屏的制作人什么的,12864不能跳转到第二屏显示重量啊
回复

使用道具 举报

24#
ID:397804 发表于 2018-9-17 16:39 | 只看该作者
回复

使用道具 举报

25#
ID:410353 发表于 2018-11-1 16:00 | 只看该作者
好东西,感谢楼主
回复

使用道具 举报

26#
ID:409457 发表于 2018-11-20 23:05 | 只看该作者
如果用stm32的怎么弄呢
回复

使用道具 举报

27#
ID:80618 发表于 2019-5-25 14:57 | 只看该作者
支持下 非常不错
回复

使用道具 举报

28#
ID:468272 发表于 2020-1-4 00:21 | 只看该作者
很棒!很给力!
回复

使用道具 举报

29#
ID:609520 发表于 2020-1-5 09:08 | 只看该作者
论坛真好 什么东西都能找到
回复

使用道具 举报

30#
ID:709089 发表于 2020-3-15 21:41 | 只看该作者
支持下 非常不错
回复

使用道具 举报

31#
ID:719591 发表于 2020-3-31 17:56 | 只看该作者
上层大哥,你proteus文件 有吗?能不能借我看下
回复

使用道具 举报

32#
ID:688460 发表于 2020-4-1 07:10 | 只看该作者
好好学习天天向上!感谢大师们的奉献精神!
回复

使用道具 举报

33#
ID:1099882 发表于 2023-11-15 20:46 | 只看该作者
nb,学习一下,谢楼主
回复

使用道具 举报

34#
ID:345562 发表于 2023-11-17 08:09 | 只看该作者
楼主好样的,学习了
回复

使用道具 举报

35#
ID:1095017 发表于 2024-3-26 16:27 | 只看该作者
刚好需要,多谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表