找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 48727|回复: 83
收起左侧

HX711电子秤完整单片机程序+原理图

  [复制链接]
ID:191079 发表于 2017-6-29 08:52 | 显示全部楼层 |阅读模式
电子秤HX71模块的资料,C51完整源码
电子秤原理图.jpg
0.png
电子秤使用说明:

商品代码:
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, 下载次数: 1249)

评分

参与人数 5黑币 +25 收起 理由
1485616516 + 5 很给力!
673745472 + 5 很给力!
LT81041667 + 5 共享资料的黑币奖励!
1263558620 + 5 赞一个!
WangYM68 + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2017-6-30 03:29 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:140183 发表于 2017-6-30 07:19 | 显示全部楼层
下载看看.
回复

使用道具 举报

ID:216045 发表于 2017-6-30 11:25 | 显示全部楼层
很好的学习资料,谢谢分享
回复

使用道具 举报

ID:232586 发表于 2017-9-12 10:59 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:260378 发表于 2017-12-11 20:52 | 显示全部楼层
文章很好
回复

使用道具 举报

ID:102963 发表于 2018-1-18 11:04 | 显示全部楼层
不错,把我的设计资料给分享了!
回复

使用道具 举报

ID:309745 发表于 2018-4-17 00:42 | 显示全部楼层
文章很好!!!!!!!!!!
回复

使用道具 举报

ID:295991 发表于 2018-4-17 11:13 | 显示全部楼层
确实是好东西啊,值得分享。
回复

使用道具 举报

ID:310828 发表于 2018-4-19 22:01 | 显示全部楼层
好东西
回复

使用道具 举报

ID:308858 发表于 2018-4-27 15:09 | 显示全部楼层
下载下来打不开,是怎么回事
回复

使用道具 举报

ID:107906 发表于 2018-5-10 19:56 | 显示全部楼层
不能显示啊  显示乱码
回复

使用道具 举报

ID:317482 发表于 2018-5-15 23:46 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:251318 发表于 2018-5-16 11:04 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:328790 发表于 2018-5-17 11:19 来自手机 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:292874 发表于 2018-6-7 14:44 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:264608 发表于 2018-7-2 18:25 | 显示全部楼层
楼主辛苦
回复

使用道具 举报

ID:264608 发表于 2018-7-4 08:59 | 显示全部楼层
想知道仿真有HX711传感器么    没找到啊
回复

使用道具 举报

ID:368941 发表于 2018-7-10 19:20 | 显示全部楼层
感谢分享


回复

使用道具 举报

ID:73182 发表于 2018-7-11 09:44 | 显示全部楼层
谢谢分享 ,mark下
回复

使用道具 举报

ID:371269 发表于 2018-7-14 09:28 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:380589 发表于 2018-7-29 19:14 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:368940 发表于 2018-7-30 00:53 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:377382 发表于 2018-8-4 14:09 | 显示全部楼层
确实是好东西啊,值得分享。
回复

使用道具 举报

ID:404947 发表于 2018-10-2 22:23 | 显示全部楼层
不错
很好
太棒了
回复

使用道具 举报

ID:352626 发表于 2018-10-3 14:20 来自手机 | 显示全部楼层
很实用
回复

使用道具 举报

ID:427766 发表于 2018-11-16 15:38 | 显示全部楼层
很好的学习资料,谢谢分享
回复

使用道具 举报

ID:199458 发表于 2018-11-27 11:19 | 显示全部楼层
感谢,,,,,
回复

使用道具 举报

ID:428060 发表于 2018-11-28 11:22 | 显示全部楼层
请问楼主为什么下载下来的程序用keli打不开
回复

使用道具 举报

ID:439735 发表于 2018-12-6 23:28 来自手机 | 显示全部楼层
ptlantu 发表于 2018-7-11 09:44
谢谢分享 ,mark下

这个是驱动数码管还是液晶屏啊
回复

使用道具 举报

ID:290141 发表于 2018-12-9 20:12 | 显示全部楼层
coldfire 发表于 2018-5-10 19:56
不能显示啊  显示乱码

你的乱码解决了吗
回复

使用道具 举报

ID:420735 发表于 2018-12-10 11:14 | 显示全部楼层
好资料,
回复

使用道具 举报

ID:443864 发表于 2018-12-11 11:07 | 显示全部楼层
感谢楼主,最近正在做这个电子秤,给了我很好的学习资料。
回复

使用道具 举报

ID:443129 发表于 2018-12-11 14:43 | 显示全部楼层
感谢楼主大大!
回复

使用道具 举报

ID:444237 发表于 2018-12-11 16:59 | 显示全部楼层
很给力
回复

使用道具 举报

ID:443255 发表于 2018-12-17 13:56 | 显示全部楼层
谢谢分享,很好的资料
回复

使用道具 举报

ID:51503 发表于 2019-1-15 16:11 | 显示全部楼层
下载学习下,谢谢楼主
回复

使用道具 举报

ID:475714 发表于 2019-2-11 15:18 | 显示全部楼层
感谢分享!
回复

使用道具 举报

ID:276761 发表于 2019-2-11 16:37 | 显示全部楼层
学习下      
回复

使用道具 举报

ID:465554 发表于 2019-2-27 10:49 | 显示全部楼层
谢谢分享与制作
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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