1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于STM32的智能电子秤原理图PCB程序设计

基于STM32的智能电子秤原理图PCB程序设计

时间:2022-02-23 10:35:31

相关推荐

基于STM32的智能电子秤原理图PCB程序设计

硬件设计

(末尾附文件)

本次设计以STM32单片机为核心,利用压力传感器监测货物的压力并转换成电流输出给AD芯片,HX711转换模块将模拟量转换成数字量并输出给单片机,STM32单片机通过公式计算出具体的货物重量,采用按键矩阵对结果进行加减乘除,得出总价或者其他的结果。LCD1602液晶屏上显示检测到的货物重量、单价和总价。

设计思路

以STM32为中央处理器,通过压力传感器监测货物对其造成的压力,并以电流变化输出给HX711AD模块,hx711AD芯片将模拟量转换成数字量并发送给单片机,经单片机计算后,得到当前的重量。通过安检矩阵设置货物的单价,通过加减乘除操作,算的货物的总价。LCD1602液晶显示屏上显示检测到的货物重量,设置的商品单价以及最后算出的货物总价。

程序设计

#include "hx711.h"unsigned long ReadCount(void){unsigned long Count;unsigned char i;ADSK=0;Count=0;while(ADDO);for (i=0;i<24;i++){ADSK=1;Count=Count<<1;ADSK=0;if(ADDO) Count++;}ADSK=1;Count=Count^0x800000;ADSK=0;return(Count);}#include "keyboard.h"//按键扫描函数 : //功能;只扫描一个按键,按键为号小优先 //返回键值:// 7 8 9 10// 4 5 6 11// 1 2 3 12// 14 0 15 13unsigned char Getkeyboard(void){unsigned char number = 0;unsigned char i;//行输入低电平ROW1=ROW2=ROW3=ROW4=0;//如果列输出不全为高,则说明有键按下if ((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1)){//输入0111ROW1=0;ROW2=ROW3=ROW4=1;for (i=0;i<20;i++);if (COL1==0) return 1;// 7else if (COL2==0) return 2; // 8else if (COL3==0) return 3; // 9else if (COL4==0) return 10; // 10//输入1011ROW2=0;ROW1=ROW3=ROW4=1;for (i=0;i<20;i++);if (COL1==0) return 4;//4else if (COL2==0) return 5; // 5else if (COL3==0) return 6; // 6else if (COL4==0) return 11; // 11//输入1101ROW3=0;ROW1=ROW2=ROW4=1;for (i=0;i<20;i++);if (COL1==0) return 7; //1else if (COL2==0) return 8; // 2else if (COL3==0) return 9; // 3else if (COL4==0) return 12; // 12//输入0111ROW4=0;ROW1=ROW2=ROW3=1;for (i=0;i<20;i++);if (COL1==0) return 14;else if (COL2==0) return 0;else if (COL3==0) return 15;else if (COL4==0) return 13;//没有检测到列低电平return 99;}return 99;}#include "LCD1602.h"//****************************************************//MS延时函数(12M晶振下测试)//****************************************************void LCD1602_delay_ms(unsigned int n){unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<123;j++);}//****************************************************//写指令//****************************************************void LCD1602_write_com(unsigned char com){LCD1602_RS = 0;LCD1602_delay_ms(1);LCD1602_EN = 1;LCD1602_PORT = com;LCD1602_delay_ms(1);LCD1602_EN = 0;}//****************************************************//写数据//****************************************************void LCD1602_write_data(unsigned char dat){LCD1602_RS = 1;LCD1602_delay_ms(1); LCD1602_PORT = dat;LCD1602_EN = 1;LCD1602_delay_ms(1);LCD1602_EN = 0;}//****************************************************//连续写字符//****************************************************void LCD1602_write_word(unsigned char *s){while(*s>0){LCD1602_write_data(*s);s++;}}void Init_LCD1602(){LCD1602_EN = 0;LCD1602_RW = 0; //设置为写状态LCD1602_write_com(0x38); //显示模式设定LCD1602_write_com(0x0c); //开关显示、光标有无设置、光标闪烁设置LCD1602_write_com(0x06); //写一个字符后指针加一LCD1602_write_com(0x01); //清屏指令}#include <reg52.h>#include <intrins.h>#include <string.h>#include "LCD1602.h"#include "hx711.h"#include "keyboard.h"#include "eeprom52.h"#define uchar unsigned char#define uint unsigned int//定义量程系数#define RATIO 4000/1000//1574/1000 //2114/1623

.

链接:/s/1Yi7LHfzInUBkjVrzMqM_yQ

提取码:it0s

.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。