原创 APT32F1023单片机HX711_HX720称重传感器源代码

2023-4-27 20:08 594 6 6 分类: MCU/ 嵌入式
APT32F1023H8S6(SSOP-24封装)MCU是由爱普特微电子推出的基于平头哥半导体RISC-V内核开发的32位高性能、低成本单片机,现特将基于APT32F1023H8S6单片机的HX711_H720称重传感器原理图和源代码(3位数码管显示)
单片机源程序如下:
  1. /*******************************************************************************
  2. 文件名: HX711/HX720称重显示模块主控程序
  3. 修  改:
  4. 版  本: V1.0
  5. 备  注:
  6.         1.时钟选择MCU内部48M RC振荡器;
  7.             2.接口说明:
  8.                   APT32F1023-24PIN              -----                 外部设备
  9.               ******************           轻触按键          ******************
  10.                          PB0.3(Key_1)               -----                  清零键
  11.                          PA0.0(Key_2)               -----                  设置键
  12.                          PA0.15(Key_3)              -----                  去皮键
  13.                          PA0.1(Key_4)               -----                   加键
  14.               ******************         3位共阴数码管       ******************
  15.                         PA0.5                   -----              SG12(SEG1_COM)
  16.                                 PA0.12                  -----               SG9(SEG2_COM)
  17.                                 PA0.13                  -----               SG8(SEG3_COM)
  18.                                 PB0.4                   -----                 SG11(SEG_A)
  19.                                 PA0.14                  -----                  SG7(SEG_B)
  20.                                 PA0.8                   -----                  SG4(SEG_C)
  21.                                 PA0.10                  -----                  SG2(SEG_D)
  22.                                 PA0.11                  -----                  SG1(SEG_E)
  23.                                 PB0.5                   -----                 SG10(SEG_F)
  24.                                 PB0.2                   -----                  SG5(SEG_G)
  25.                                 PA0.9                   -----                 SG3(SEG_DP)
  26.                   ******************            HX720            ******************
  27.                         PB0.1                   -----                 HX720_SCK
  28.                                 PB0.0                   -----                 HX720_DOT
  29.         
  30. *******************************************************************************/
  31. //加载头文件
  32. #include "sys_clk.h"
  33. #include "iostring.h"
  34. #include "ifc.h"
  35. #include "csp.h"
  36. #include
  37. #include
  38. #include
  39. #include
  40. #include
  41. #include "led_display_weight.h"                 //加载LED数码管显示称重数值头文件
  42. #include "hx720_drive.h"                        //加载24位ADC称重芯片HX720驱动程序头文件

  43. //宏定义
  44. /*** 变量类型 ***/
  45. #define uchar unsigned char
  46. #define uint unsigned int
  47. #define ushort unsigned short
  48. #define ulong unsigned long
  49. /*** 按键IO口 ***/
  50. #define Key1_Input csi_gpio_port_read(GPIOB0,0x0008)//读取PB0.3端口高低电平值(Key1/清零键输入)

  51. //外部函数
  52. /*** 系统启动 ***/
  53. extern void system_init(void);
  54. extern void board_init(void);

  55. //外部变量

  56. //主函数标志位

  57. //主函数变量
  58. float Weight_Test = 0;                          //定义、保存测得的重量值(大于0)
  59. ulong Weight_24Bit_ADC_Now = 0;                 //定义、保存当前读取到的HX720称重芯片24位ADC转换值
  60. ulong Weight_24Bit_ADC_Zero = 0;                //定义、保存零点重量24位 ADC转换值(实测大约为8752222左右)

  61.                            /********** GPIO口初始化操作 ***********/
  62. /*******************************************************************************
  63. 函数名: GPIO_Init()
  64. 功  能: GPIO口初始化
  65. 参  数: 无
  66. 返回值: 无
  67. *******************************************************************************/
  68. void GPIO_Init(void)
  69. {
  70.         //按键
  71.         csi_pin_set_mux(PB03, PB03_INPUT);          //配置PB0.3端口为输入模式(Key_1键)
  72.         csi_pin_pull_mode(PB03, GPIO_PULLUP);       //上拉输入
  73.         
  74.         //HX720称重芯片
  75.         csi_pin_set_mux(PB01, PB01_OUTPUT);                //配置PB0.1端口为输出模式(HX720_SCK)
  76.         csi_pin_output_mode(PB01, GPIO_PUSH_PULL);        //推挽输出
  77.         csi_pin_set_mux(PB00, PB00_INPUT);          //配置PB0.0端口为输入模式(HX720_DOT)
  78.         csi_pin_pull_mode(PB00, GPIO_PULLNONE);     //浮空输入
  79.         
  80.         /*** 数码管 ***/
  81.         //SG12(SEG1_COM)
  82.         csi_pin_set_mux(PA05, PA05_OUTPUT);                //配置PA0.5端口为输出模式
  83.         csi_pin_output_mode(PA05, GPIO_PUSH_PULL);        //推挽输出
  84.         //SG9(SEG2_COM)
  85.         csi_pin_set_mux(PA012, PA012_OUTPUT);            //配置PA0.12端口为输出模式
  86.         csi_pin_output_mode(PA012, GPIO_PUSH_PULL);        //推挽输出
  87.         //SG8(SEG3_COM)
  88.         csi_pin_set_mux(PA013, PA013_OUTPUT);            //配置PA0.13端口为输出模式
  89.         csi_pin_output_mode(PA013, GPIO_PUSH_PULL);        //推挽输出
  90.         //SG11(SEG_A)
  91.         csi_pin_set_mux(PB04, PB04_OUTPUT);                //配置PB0.4端口为输出模式
  92.         csi_pin_output_mode(PB04, GPIO_PUSH_PULL);        //推挽输出
  93.         //SG7(SEG_B)
  94.         csi_pin_set_mux(PA014, PA014_OUTPUT);            //配置PA0.14端口为输出模式
  95.         csi_pin_output_mode(PA014, GPIO_PUSH_PULL);        //推挽输出
  96.         //SG4(SEG_C)
  97.         csi_pin_set_mux(PA08, PA08_OUTPUT);                //配置PA0.8端口为输出模式
  98.         csi_pin_output_mode(PA08, GPIO_PUSH_PULL);        //推挽输出
  99.         //SG2(SEG_D)
  100.         csi_pin_set_mux(PA010, PA010_OUTPUT);            //配置PA0.10端口为输出模式
  101.         csi_pin_output_mode(PA010, GPIO_PUSH_PULL);        //推挽输出
  102.         //SG1(SEG_E)
  103.         csi_pin_set_mux(PA011, PA011_OUTPUT);            //配置PA0.11端口为输出模式
  104.         csi_pin_output_mode(PA011, GPIO_PUSH_PULL);        //推挽输出
  105.         //SG10(SEG_F)
  106.         csi_pin_set_mux(PB05, PB05_OUTPUT);                //配置PB0.5端口为输出模式
  107.         csi_pin_output_mode(PB05, GPIO_PUSH_PULL);        //推挽输出
  108.         //SG5(SEG_G)
  109.         csi_pin_set_mux(PB02, PB02_OUTPUT);                //配置PB0.2端口为输出模式
  110.         csi_pin_output_mode(PB02, GPIO_PUSH_PULL);        //推挽输出
  111.         //SG3(SEG_DP)
  112.         csi_pin_set_mux(PA09, PA09_OUTPUT);                //配置PA0.9端口为输出模式
  113.         csi_pin_output_mode(PA09, GPIO_PUSH_PULL);        //推挽输出
  114.         //主频CLO输出
  115. //        csi_pin_set_mux(PA02, PA02_CLO);            //设置主频输出引脚为PA0.2脚
  116. //  csi_clo_config(CLO_SYSCLK, CLO_DIV8);       //CLO分频系数为8,输出频率=主频48MHz/8=6MHz
  117. }

  118. //主函数
  119. int main()
  120. {
  121.         uint i;                                     //定义临时变量,方便后续程序使用
  122.         //系统、GPIO口等初始化
  123.         system_init();                              //系统时钟、TICK等配置(系统时钟48MHz 1分频)
  124. //        board_init();                               //UART2硬件串口配置(系统参数、信息打印用)
  125.         GPIO_Init();                                //GPIO口初始化
  126.         
  127.         //主循环
  128.         while(1)
  129.         {
  130.                 //按下“清零”键,标定零点重量ADC转换值,并对称重值清零
  131.                 if(Key1_Input==0x0000)                  //按下“清零”键
  132.                 {
  133.                         Weight_24Bit_ADC_Now = HX720_Read();//读取当前HX720称重芯片24位ADC转换值
  134.                         Weight_24Bit_ADC_Zero = Weight_24Bit_ADC_Now;//赋值零点重量24位ADC转换值
  135.                         Weight_Test = 0;
  136.                 }
  137.                 //当前没有按下“清零”键
  138.                 else
  139.                 {
  140.                     //获取当前重量24位ADC转换值
  141.                         Weight_24Bit_ADC_Now = HX720_Read();//先读取当前HX720称重芯片24位ADC转换值
  142.                     //计算重量值
  143.                     if(Weight_24Bit_ADC_Now
  144.                         {
  145.                                                                                                 //空操作,称重出现错误(也可以做负数显示处理,本案则不显示负数称重)
  146.                     }
  147.                         else                                //当前ADC转换值大于等于零点重量ADC转换值
  148.                     {
  149.                                 Weight_Test = (Weight_24Bit_ADC_Now - Weight_24Bit_ADC_Zero)/106.5;//单位:g
  150.                                 //(106.5数值和使用的传感器线性度有关,可以多次用标准砝码测量、计算获取)
  151.                                 Weight_Test = Weight_Test/1000; //单位:Kg
  152.                     }
  153.                 }
  154.                 //延时并显示称重值
  155.                 for(i=0;i<100;i++)                      //循环多次显示重量值,并延时
  156.                 {
  157.                         Display_Weight(Weight_Test);        //数码管显示当前称重值
  158.                 }
  159.         }
  160.         
  161.     return 0;
  162. }
复制代码

作者: 小羡, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-4026945.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条