找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC12系列单片机语音电子秤PCB工程文件 无代码

[复制链接]
跳转到指定楼层
楼主
自己做出来的电子秤
模块包含HX711,LCD1602,最大称重200kg,支持语音播报(语音播报模块是BY8301-自带功放)


部分单片机代码如下:
  1. #include "main.h"
  2. #include "LCD1602.h"
  3. #include "HX711.h"
  4. #include "BY8301.h"
  5. #include "uart.h"

  6. //定义变量
  7. unsigned char KEY_NUM = 0;   //用来存放按键按下的键值
  8. unsigned long HX711_Buffer = 0;  //用来存放HX711读取出来的数据
  9. unsigned long Weight_Maopi = 0; //用来存放毛皮数据
  10. long Weight_Shiwu = 0;          //用来存放实物重量
  11. long Weight_Shiwu_ADD = 0;          //用来存放实物重量
  12. long Max_Value = 0;             //用来存放设置最大值
  13. unsigned char maxValueTable[6];
  14. unsigned char state = 0;    //用来存放设置状态
  15. unsigned char Blink_Speed = 0;
  16. #define Blink_Speed_Max 6          //该值可以改变设置指针闪烁频率

  17. //校准参数
  18. //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
  19. //当发现测试出来的重量偏大时,增加该数值。
  20. //如果测试出来的重量偏小时,减小改数值。
  21. //该值可以为小数
  22. #define GapValue 18.5

  23. //报警值,单位是g
  24. #define AlarmValue 200000            
  25. #define filter_num 10
  26. float recursive_average_filter(float filter_object)
  27. {   
  28.     float sum = 0;         
  29.     float temp = 0;
  30.     char i;   
  31.     static float filter_buf[filter_num + 1];
  32.     filter_buf[filter_num] = filter_object;
  33.     for(i = 0; i < filter_num; i++){
  34.         filter_buf[i] = filter_buf[i + 1]; // ??????,????
  35.         sum += filter_buf[i];
  36.     }
  37.     temp = ((float)sum / filter_num);
  38.     return temp;
  39. }
  40. //****************************************************
  41. //主函数
  42. //****************************************************
  43. void main()
  44. {
  45.     KEY1=1;
  46.     KEY2=1;
  47.     KEY3=1;
  48.     KEY4=1;
  49.   Buzzer_Di();
  50.    
  51.     Init_LCD1602();                        //初始化LCD1602

  52.     LCD1602_write_com(0x80);            //设置LCD1602指针
  53.     LCD1602_write_word("Welcome to use!");
  54.    
  55.     Get_Maopi();
  56.     Get_Maopi();
  57.     Delay_ms(2000);         //延时2s
  58.     Get_Maopi();
  59.     Get_Maopi();                //称毛皮重量    //多次测量有利于HX711稳定
  60.     LCD1602_write_com(0x01);    //清屏
  61.    
  62.         uart_int_init();
  63.         BY8301_MP3(Weight_Shiwu);
  64.         
  65.     while(1)
  66.     {
  67.         
  68.         Scan_Key();
  69.     Get_Weight();        
  70.     Weight_Shiwu=recursive_average_filter(Weight_Shiwu);
  71.         //显示当前重量
  72.         LCD1602_write_com(0x80);
  73.     LCD1602_write_word("Weight=");
  74.     LCD1602_write_data(Weight_Shiwu/100000 + 0x30);
  75.     LCD1602_write_data(Weight_Shiwu%100000/10000 + 0x30);
  76.         LCD1602_write_data(Weight_Shiwu%10000/1000 + 0x30);
  77.         LCD1602_write_data('.');
  78.         LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);
  79.          LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);
  80.         LCD1602_write_data(Weight_Shiwu%10 + 0x30);           
  81.         LCD1602_write_word("Kg");
  82.         
  83.         LCD1602_write_com(0x80+0x40);
  84.     LCD1602_write_word("Total=");
  85.     LCD1602_write_data(Weight_Shiwu_ADD/100000 + 0x30);
  86.     LCD1602_write_data(Weight_Shiwu_ADD%100000/10000 + 0x30);
  87.         LCD1602_write_data(Weight_Shiwu_ADD%10000/1000 + 0x30);
  88.         LCD1602_write_data('.');
  89.         LCD1602_write_data(Weight_Shiwu_ADD%1000/100 + 0x30);
  90.          LCD1602_write_data(Weight_Shiwu_ADD%100/10 + 0x30);
  91.         LCD1602_write_data(Weight_Shiwu_ADD%10 + 0x30);           
  92.         LCD1602_write_word("Kg");

  93.     }
  94. }

  95. //****************************************************
  96. //称重
  97. //****************************************************
  98. void Get_Weight()
  99. {
  100.     Weight_Shiwu = HX711_Read();
  101.     Weight_Shiwu = Weight_Shiwu - Weight_Maopi;        //获取净重
  102.     if(Weight_Shiwu >= 0)            
  103.     {   
  104.         Weight_Shiwu = (unsigned long)((float)Weight_Shiwu/GapValue);     //计算实物的实际重量
  105.     }
  106.     else
  107.     {
  108.         Weight_Shiwu = 0;
  109.     }
  110.    
  111. }

  112. //****************************************************
  113. //获取毛皮重量
  114. //****************************************************
  115. void Get_Maopi()
  116. {
  117.     Weight_Maopi = HX711_Read();   
  118. }


  119. //****************************************************
  120. //MS延时函数(12M晶振下测试)
  121. //****************************************************
  122. void Delay_ms(unsigned int n)
  123. {
  124.     unsigned int  i,j;
  125.     for(i=0;i<n;i++)
  126.         for(j=0;j<123;j++);
  127. }

  128. //****************************************************
  129. //蜂鸣器程序
  130. //****************************************************
  131. void Buzzer_Di()
  132. {
  133.     Buzzer = 0;
  134.     Delay_ms(500);
  135.     Buzzer = 1;
  136.     Delay_ms(10);
  137. }

  138. //****************************************************
  139. //按键扫描程序
  140. //****************************************************
  141. unsigned char Scan_Key()
  142. {   
  143.     if( KEY1 == 0 )                        //按键扫描
  144.     {
  145.         Delay_ms(10);                    //延时去抖
  146.         if( KEY1 == 0 )
  147.         {
  148.             Buzzer_Di();
  149.             Weight_Shiwu_ADD+=Weight_Shiwu;
  150.             while(KEY1 == 0);            //等待松手
  151.             return 1;
  152.         }
  153.     }
  154.     if( KEY2 == 0 )                        //按键扫描
  155.     {
  156.         Delay_ms(10);                    //延时去抖
  157.         if( KEY2 == 0 )
  158.         {
  159.             Weight_Shiwu_ADD=0;
  160.             Buzzer_Di();
  161.             while(KEY2 == 0);            //等待松手
  162.             return 2;
  163.         }
  164.     }
  165.     if( KEY3 == 0 )                        //按键扫描
  166.     {
  167.         Delay_ms(10);                    //延时去抖
  168.         if( KEY3 == 0 )
  169.         {
  170.             Buzzer_Di();
  171.             Get_Maopi();   
  172.             while(KEY3 == 0);            //等待松手
  173.             return 3;
  174.         }
  175.     }
  176.     if( KEY4 == 0 )                        //按键扫描
  177.     {
  178.         Delay_ms(10);                    //延时去抖
  179.         if( KEY4 == 0 )
  180.         {
  181.             Buzzer_Di();
  182.             while(KEY4 == 0);            //等待松手
  183.             return 4;
  184.         }
  185.     }
  186.     return 0;
  187. }
复制代码



附件内只包含上图的PCB文件:
PCB文件.7z (6.97 MB, 下载次数: 32)
为防止有人直接复制粘贴.代码暂不分享,请自行编写

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1018775 发表于 2022-4-25 21:29 | 只看该作者
想看看语音部分怎么操作
回复

使用道具 举报

板凳
ID:972785 发表于 2022-10-16 16:57 | 只看该作者
18424027 发表于 2022-4-25 21:29
想看看语音部分怎么操作

常用的串口驱动就可以
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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