电子秤应用C语言源程序

合集下载

基于单片机的电子秤系统设计(附程序代码)

基于单片机的电子秤系统设计(附程序代码)

基于单片机的电子秤系统设计摘要电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。

它与我们日常生活紧密结合息息相关。

电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。

电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。

本系统的设计主要从硬件电路设计,软件编程调试,实物焊接调试三部分进行详细阐述。

硬件电路主要是基于单片机AT89S52为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集,电子秤专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到单片机进行处理显示,数据显示由LCD1602液晶实现,液晶显示效果稳定无闪烁关键词:AT89S52单片机;电子秤;压力传感器;HX711WIRELESS TEMPERATURE DETECTING SYSTEM DESINGBASED ON MCUABSTRACTWith Intelligent electronic scale is the detection and conversion technology, computer technology, information processing, digital technology, an integrated modern technology of new weighing equipment.Ectronic scale takes SCM as its central controling unit,and achieves AD transform through weighting transducer,then adds keybord,display circuit and powerful softerwear. It is not only accurate,swift,and convenient, but also makes an important effect to people’s life by its automatic weightment and digital display, so it becomes more and more popular.The design of this system gives its eleboration from 3 parts: Hardwear circuit design,softwear programme debugging and entity weld debugging.Hardwear circuit reaches data processing by the controling unit which based on AT89S52,and gathers data by weighting transducer,then makes AD transform by HX711 to the data gathered, and the transformed data then transferred to AT89S52 for display prosessing, at last LCD1602 would show it out steadily without twinklingKey Words: AT89S52 MCU,Electrnoic Scale,Load sensor,HX711.目录摘要 (I)ABSTRACT (II)目录.......................................................................................................................................................................... I II 第1章绪论. (1)1.1课题背景与研究意义 (1)1.2 系统设计要求 (2)1.3系统设计方案 (3)1.4电子秤的主要组成 (5)1.4.1 电子秤的基本结构 (5)1.4.2 电子秤的工作原理 (6)1.4.3 电子秤的计量性能 (7)第2章系统硬件设计 (8)2.1 流系统元器件选型及参数介绍 (8)2.1.1 系统单片机选型 (8)2.1.2 系统传感器选型 (10)2.1.3 系统AD转换芯片选择 (13)2.1.4系统显示器选择 (14)2.1.5系统时钟芯片选择 (16)2.2 系统硬件电路设计 (17)2.2.1系统电源电路设计 (17)2.2.2系统单片机主控电路设计 (18)2.2.3系统显示部分电路设计 (20)2.2.4系统超重报警指示电路设计 (21)2.2.5系统按键输入电路设计 (21)2.3系统硬件电路的绘制与PCB线路板制作 (23)2.3.1 Protell 99 SE软件介绍 (23)2.3.2 系统原理图绘制与PCB印刷线路板制作 (23)第3章系统软件设计 (27)3.1 系统软件编程环境介绍 (27)3.2系统主程序流程图 (27)3.3系统显示部分流程图 (28)3.4系统按键调整部分流程图 (29)第四章系统的制作、安装与调试 (30)4.1电路的绘制与PCB板的制作 (30)4.2 系统的调试 (31)第五章总结与体会 (32)5.1 总结 (32)5.2 体会 (33)参考文献 (34)致谢 (35)第1章绪论1.1课题背景与研究意义电子秤作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。

电子称程序

电子称程序

#include "main.h"#include "LCD1602.h"#include "HX711.h"unsigned long HX711_Buffer = 0;unsigned long Weight_Maopi = 0,Weight_Shiwu = 0;char Price_Count = 0;unsigned char KEY_NUM = 0;unsigned char Price_Buffer[3] = {0x00,0x00,0x00};unsigned long Money = 0;bit Flag_OK = 0;//****************************************************//主函数//****************************************************void main(){Init_LCD1602(); //初始化LCD1602LCD1602_write_com(0x80); //指针设置LCD1602_write_word("Welcome to use! "); //开机画面第一行Delay_ms(2000); //延时2sloop:Price_Count = 0;Price_Buffer[0] = 0;Price_Buffer[1] = 0;Price_Buffer[2] = 0;Flag_OK = 0;LCD1602_write_com(0x80); //指针设置LCD1602_write_word("+WEI |PRI | MON ");LCD1602_write_com(0x80+0x40); //指针设置LCD1602_write_word("0.000| . | . ");Get_Maopi(); //称毛皮重量while(1){if( Flag_OK == 0){Get_Weight(); //称重//显示当前重量LCD1602_write_com(0x80+0x40);LCD1602_write_data(Weight_Shiwu/1000 + 0x30);LCD1602_write_data('.');LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);LCD1602_write_data(Weight_Shiwu%10 + 0x30);}KEY_NUM = KEY_Scan();if( KEY_NUM != 0x55) //当返回的不是初值时候,确认按键按下。

电子称C语言程序

电子称C语言程序

下面介绍主程序编写,其他程序略。

(1) 头文件和一些宏定义#include <>#include <>#include <>#include ""#include ""#include "";;int2str(j,str1);if (j<10){ display_GB2312_string(3,84,"00");display_GB2312_string(3,100,str1);}else if (j<100){ display_GB2312_string(3,84,"0");display_GB2312_string(3,92,str1);}else{ display_GB2312_string(3,84,str1);}};13(确定价格)void KeyPress(uchar keycode){ switch (keycode){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:..");To_Zero();display_GB2312_string(1,1,"电子秤初始化成功"); display_GB2312_string(3,1,"重量: kg");display_GB2312_string(5,1,"单价: 元");display_GB2312_string(7,1,"金额: 元");Display_Price();while(1){ //每秒称重一次if (FlagTest==1){//称重,得到重量值weight,单位为gAdVal=ReadCount();weight=FullScale-AdVal/1000;if (weight>0x8000) weight=0;weight=10000*weight/FullScale;weight=weight*RATIO;//如果超量程,则报警if (weight >= 10000){ beep = 0;alert = 0;display_GB2312_string(3,60,"------");display_GB2312_string(7,44,"--------");}//如果不超量程else{ beep = 1;alert = 1;//显示重量值Display_Weight();//如果单价设定好了,则计算价格if (FlagSetPrice == 1){ money = weight*price/1000; //money单位为分//显示总金额Display_Money();}else{ display_GB2312_string(7,44," ");}//清测试标志FlagTest = 0;}}//获取按键keycode = Getkeyboard();//有效键值0-15if ((keycode<16)&&(FlagKeyPress==0)){ FlagKeyPress = 1;KeyPress(keycode);FlagKeyPress = 0;}delay(20);}}。

单片机电子秤实训报告

单片机电子秤实训报告

一、实训目的本次实训旨在通过实践操作,了解单片机电子秤的工作原理和设计方法,掌握单片机在电子秤中的应用技术,提高动手能力和实际操作能力。

二、实训内容1. 硬件设计(1)硬件选型本次实训所选用的硬件主要包括:51单片机、LCD1602液晶显示屏、按键模块、HX711高精度AD转换芯片、压力传感器、电源模块等。

(2)电路设计根据选用的硬件,设计电子秤的电路原理图,包括单片机电路、显示屏电路、按键电路、传感器电路等。

电路图如下:2. 软件设计(1)程序设计采用C语言进行程序设计,主要包括以下功能模块:1)初始化模块:初始化LCD1602、按键、HX711等模块。

2)数据采集模块:通过HX711芯片读取压力传感器的数据,转换为重量值。

3)显示模块:将重量值显示在LCD1602液晶显示屏上。

4)按键控制模块:根据按键输入,实现计价、去皮、清零等功能。

5)数据处理模块:根据重量值和单价计算总价。

(2)程序流程程序流程如下:1)系统初始化。

2)检测按键状态,判断是否按下。

3)根据按键状态执行相应功能。

4)读取传感器数据,转换为重量值。

5)将重量值显示在LCD1602显示屏上。

6)根据单价计算总价。

7)返回步骤2)。

3. 调试与测试(1)调试在Proteus仿真软件中对程序进行调试,确保程序功能正常运行。

(2)测试将硬件电路连接到实际设备上,进行以下测试:1)重量测试:在电子秤上放置不同重量的物体,观察显示屏显示的重量值是否准确。

2)计价测试:设置不同的单价,观察计价功能是否正常。

3)去皮测试:在电子秤上放置物体,进行去皮操作,观察去皮功能是否正常。

4)清零测试:在电子秤上放置物体,进行清零操作,观察清零功能是否正常。

三、实训总结1. 通过本次实训,掌握了单片机电子秤的硬件设计和软件设计方法。

2. 熟悉了51单片机、LCD1602、按键、HX711等硬件模块的应用。

3. 提高了动手能力和实际操作能力,为以后从事电子技术相关领域的工作打下了基础。

51单片机电子秤程序设计

51单片机电子秤程序设计

51单片机电子秤程序设计概述本文档介绍了如何使用51单片机(AT89C51)设计一个简单的电子秤程序。

通过该程序,电子秤能够测量物体的重量并实时显示在液晶显示屏上。

硬件准备在开始编写程序之前,我们需要准备以下硬件设备:- AT89C51单片机开发板- 电子秤传感器模块- 16x2液晶显示屏- 连接线程序设计以下是该电子秤的主要程序设计步骤:1. 引入必要的头文件include <reg51.h>include <lcd.h>2. 定义端口和变量sbit DOUT = P3^7; // 电子秤传感器数据接口float weight = 0; // 测量到的重量3. 初始化液晶显示屏void lcd_init(){// 在这里初始化液晶显示屏的相关设置}4. 启动AD转换void start_conversion(){// 在这里启动AD转换,将传感器的模拟数据转换为数字数据}5. 读取AD转换结果float read_conversion(){// 在这里读取AD转换结果并返回}6. 主程序void main(){lcd_init(); // 初始化液晶显示屏while (1){start_conversion(); // 启动AD转换weight = read_conversion(); // 读取AD转换结果// 将重量显示在液晶显示屏上lcd_gotoxy(1, 1); // 设置光标位置lcd_print("Weight: %.2f kg", weight); // 显示重量delay(500); // 延时一段时间,以控制刷新速度}}总结通过以上步骤,我们可以设计一个简单的51单片机电子秤程序。

该程序可以实时获取电子秤传感器的数据,并将测量到的重量显示在液晶显示屏上。

我们可以根据实际需求进行进一步的功能扩展和优化。

请注意,本文档仅提供了程序设计的概述,并未包含具体的代码实现。

电子设计竞赛-多功能电子秤设计报告及源代码

电子设计竞赛-多功能电子秤设计报告及源代码

多功能数字电子计价秤(C题)摘要:基于对物体重量测量的多功能数字电子秤系统由主控制器部分、称重传感器部分、信号放大和模数(A/D)转换部分、显示部分及电源五部分组成,设计以单片机C8051F120为主控核心器件,A/D模块采集电阻应变式传感器将物体的重量转化的电信号,进行处理输送给单片机,同时单片机控制LCD液晶显示器实时显示物体的重量、单价、金额以及当前的时间等信息。

测试结果表明:系统整体运行稳定,人机界面友好。

关键词:C8051F120 称重传感器A/D采样LCD显示1引言分析赛题,我们认为本多功能数字电子计价秤装置系统需要实现如下任务:1)能用键盘设置单价,称重后能同时显示重量、单价和总额;电子计价秤:大称重为15.000公斤,重量误差不大于±0.1%;2)具有实时时钟显示并具有掉电保护,可显示日历时钟(年、月、日、时、分、秒);3)扩展高精度A/D转换器,提高电子计价秤测量精度,测量误差不大于±0.01%;能预存10种商品的单价,可以随意调出使用。

基于以上分析,系统采用模块设计的方案实现系统的各项功能,主要由主控制器部分、数据采集及放大部分、A/D转换部分和显示部分,具体的实现方案如系统主框图1所示:图1 系统主框图2系统方案设计与论证2.1主控制器的选择在主控制器的选择上有以下两种方案:采用FPGA(现场可编程逻辑门阵列)作为系统的控制核心和基于单片机技术的控制方案。

上述两种控制方式除在处理方式和处理能力(速度)上的差异外,实现效果及复杂程度等方面也有显著的区别。

FPGA将器件功能在一块芯片上,其外围电路较少,集成度高。

而单片机技术成熟,开发过程中可以利用的资源和工具丰富、价格便宜、成本低。

鉴于本设计中,需要采集传感器称重物体的电信号,并实时显示重量,单片机的资源已经能满足设计的需求,而FPGA的高速处理的优势在这里却得不到充分体现,因此本设计的控制方案模块选用基于单片机控制方案。

电子称课程设计(含流程图、代码)

电子称课程设计(含流程图、代码)

湖南理工学院课程设计报告课程名称:专业综合课程设计专业班级:学生姓名:指导教师:完成时间:报告成绩:目录摘要 (1)第一章绪论 (3)1.1引言: (3)第二章系统方案的设计 (3)2.1 电子秤的设计要求 (3)2.1.1 基本要求 (3)2.1.2 特色与创新 (4)2.2 设计作用与目的: (4)2.3 所用仪器与设备: (4)2.4 设计原理及设计基本思路: (5)2.4.1系统的原理: (5)2.4.2 系统的基本设计思路: (5)2.5 系统总体设计方案选择 (5)2.6单片机的选型:............................... 错误!未定义书签。

2.7输入输出设备指派: (5)2.7.1 键盘输入 (5)2.7.2 输出显示 (6)2.8系统电源 (6)第三章系统硬件设计 (9)3.1 基于AT89S52的主控电路 (9)3.1.1芯片介绍 (9)3.1.2 主控电路 (14)3.2 基于ICL7135的前端信号处理电路 (14)3.2.1 芯片介绍 (14)3.2.2 信号处理电路 (19)3.3 人机交互界面 (21)3.3.1 键盘控制电路 (21)3.3.2 液晶显示电路 (24)3.4 系统电源 (26)3.4.1 芯片介绍 (26)3.4.2 电源电路 (27)3.5 报警电路.................................... 错误!未定义书签。

第四章软件流程 (28)4.1 主程序流程图 (28)4.2 主要中断程序流程图 (29)第五章源程序 (32)第六章程序调试 (44)课程设计心得 (50)参考文献 (51)摘要该设计以51系列单片机AT89S52为控制核心,实现电子秤的基本控制功能。

在设计系统时,为了更好地采用模块化设计法,分步的设计各个单元功能模块,系统的硬件部分可以分为最小系统、数据采集、人机交互界面和系统电源四大部分。

C#实现连接电子秤串口自动称重

C#实现连接电子秤串口自动称重

C#实现连接电⼦秤串⼝⾃动称重⼀、界⾯设计⼆、核⼼代码123456789101112131415161718192021222324252627282930313233343536373839404142private SerialPort com;private void FormCheck_Load(object sender, EventArgs e){ //初始化COMListinitCOMList();}#region private void initCOMList(){ ManageCOM com = new ManageCOM(); List<string> s = com.AutoGetCOM();string[] comNames = s.ToArray();comboxCOM.Items.Clear();comboxCOM.Items.Add("请选择COM"); comboxCOM.SelectedIndex = 0; foreach (string portName in comNames) {//添加COM ⼝到界⾯下拉框comboxCOM.Items.Add(portName);}}#endregion private void btnStart_Click(object sender, EventArgs e){getWeightfromCOM();}#region private void getWeightfromCOM(){ int selectIndex= comboxCOM.SelectedIndex; if (selectIndex!=0) {string COM = comboxCOM.Items[selectIndex].ToString();42434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596com = new SerialPort(COM); //实例化SerialPort 并设置COM ⼝com.BaudRate = 9600;//波特率com.Parity = Parity.None;//⽆奇偶校验位com.StopBits = StopBits.Two;//两个停⽌位 com.Handshake = Handshake.RequestToSend;//控制协议 com.ReceivedBytesThreshold = 13;//设置 DataReceived 事件发⽣前内部输⼊缓冲区中的字节数,我这⾥是13字节为⼀组 com.Open(); //打开串⼝com.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived); //接受数据线程 }else { MessageBox.Show("请选择COM"); }}/// <summary>/// 监听串⼝数据线程/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e){Thread.Sleep(500);//线程休眠500毫秒,⽅便接收串⼝的全部数据 try {if (com.IsOpen){byte[] readBuffer = new byte[com.ReadBufferSize + 1];try{ int count = com.Read(readBuffer, 0, com.ReadBufferSize); //读取串⼝数据(监听) String SerialIn = System.Text.Encoding.ASCII.GetString(readBuffer, 0, count);//将字节数组解码为字符串 if (count != 0) { //这⾥强调⼀下,线程⾥不可以直接对UI 进⾏赋值,只能使⽤委托操作控件this.BeginInvoke(new System.Threading.ThreadStart(delegate (){rbResult.Text = SerialIn; })); } }catch (TimeoutException) { }}else{ TimeSpan waitTime = new TimeSpan(0, 0, 0, 0, 50); Thread.Sleep(waitTime); }}catch (Exception ex){MessageBox.Show(ex.ToString()); }}#endregion到此这篇关于C#实现连接电⼦秤串⼝⾃动称重的⽂章就介绍到这了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{char X,i; long int y; send7289(0x15); //接收数据 X=receive(); cs7289=1; X=X&0x1f; switch(X) {case 0xf : {zongjia=zongjia+jine; qingdan[qb][0]=sh; qingdan[qb][1]=danjia[sh]; qingdan[qb][2]=shizhong; qingdan[qb][3]=jine; qb++; sh=0;dot=0; danjia[0]=0; for(i=0;i<6;i++) jiage[i]=0; } break; //累加 case 0xe : pizhong=zhongliang; break; //去皮 case 0xd : {danjia[sh]=0;dot=0;} break; //清单价 case 0xc : {zongjia=0;jine=0;dot=0;list=0;qb=0;pizhong=0; if(sh==0) danjia[sh]=0;} break; //总清 case 0xa : dot=1;break; //点 case 0xb : list=1;break; //清单 case 0x19 : sh=10;break; case 0x18 : sh=9;break; case 0x17 : sh=8;break; case 0x16 : sh=7;break; case 0x15 : sh=6;break; case 0x14 : sh=5;break; case 0x13 : sh=4;break; case 0x12 : sh=3;break; case 0x11 : sh=2;break; case 0x10 : sh=1;break; case 0x1f : case 0x1e : case 0x1d : case 0x1c : case 0x1a : break; case 0x1b : dot=1;break; default :{ if(dot==0) {jiage[0]=jiage[1];jiage[1]=jiage[2];jiage[2]=X;} if(dot==1) {jiage[4]=X;dot++; } else if(dot==2) {jiage[5]=X; dot++;} else if(dot>2) break; // lcdi_send(0x84); y=jiage[0]; y=y*10+jiage[1]; y=y*10+jiage[2]; y=y*10+jiage[4]; danjia[sh]=y*10+jiage[5]; } } while(key7289==0); //等待键盘松开 } /* void ad(void) interrupt 2 using 1 {short x,y; x=ad_244; y=x; if(x&0x80) baojing(); else x=x>>4; y=y&0xf;
d_change(x); change(s2); s2[10]=s2[9];s2[9]='.'; if(s2[8]==32) s2[8]=0x30; lcdi_send(0x88); for(i=0;i<16;i++) lcdd_send(s2[i]); x=qingdan[0][3]; d_change(x); change(s3); lcdi_send(0x98); for(i=0;i<16;i++) lcdd_send(s3[i]); //以上为第一页 EA=0;EX0=0; //关键盘中断 for(j=1;j<qb;j++) {while(key7289); x=qingdan[j][2]; d_change(x); change(s2); //显示数据 s2[10]=s2[9]; s2[9]='.'; if(s2[8]==32) s2[8]=0x30; lcdi_send(0x90); for(i=0;i<16;i++) lcdd_send(s2[i]); x=qingdan[j][1]; d_change(x); change(s1); x=qingdan[j][0]; for(i=0;i<4;i++) s1[i]=shangpin[x][i]; lcdi_send(0x80); for(i=0;i<16;i++) lcdd_send(s1[i]); x=qingdan[j][3]; d_change(x); change(s3); lcdi_send(0x88); for(i=0;i<16;i++) lcdd_send(s3[i]); lcdi_send(0x98); for(i=0;i<16;i++) lcdd_send(0x20); lcdi_send(0x98); while(key7289==0); } while(key7289); d_change(zongjia); change(s4); lcdi_send(0x80); for(i=0;i<16;i++) lcdd_send(s4[i]); lcdi_send(0x90); for(i=0;i<16;i++) lcdd_send(bianhao[i]); lcdi_send(0x88); for(i=0;i<16;i++) lcdd_send(message5[i]); lcdi_send(0x98); for(i=0;i<16;i++) lcdd_send(riqi[i]); list=0; while(key7289==0); while(key7289==1); while(key7289==0); EA=1;EX0=1; } else{ y=0; /* duilie[2]=duilie[1]; //数字滤波 duilie[1]=duilie0]=y>>1; x=duilie[0]; x=x<<1; x=x+duilie[1]+duilie[2]; */ zhongliang=ad1(); shizhong=zhongliang-pizhong; //数据转换 x=danjia[sh]; jine1=shizhong*x; jine=jine1/1000; d_change(shizhong); change(s2); //显示数据 s2[10]=s2[9]; s2[9]='.'; if(s2[8]==32) s2[8]=0x30; lcdi_send(0x90); for(i=0;i<16;i++) lcdd_send(s2[i]); d_change(danjia[sh]); change(s1); for(i=0;i<4;i++) s1[i]=shangpin[sh][i]; lcdi_send(0x80); for(i=0;i<16;i++) lcdd_send(s1[i]); d_change(jine); change(s3); lcdi_send(0x88); for(i=0;i<16;i++) lcdd_send(s3[i]); d_change(zongjia); change(s4); lcdi_send(0x98); for(i=0;i<16;i++) lcdd_send(s4[i]); lcdi_send(0x98); //while(1); } } } void keyin(void) interrupt 0 using 0 //中断 0服务程序
电子秤的信号采集、处理、显示的程序 . #i nclude <reg52.h> #i nclude<absaCC.h> //ad控制线 #define ad_244 XBYTE[0xbfff]; sbit ad_stb=P3^3; sbit ad_start=P1^1; //LCD控制线 sbit lcd_di=P1^7; sbit lcd_rw=P1^2; sbit lcd_e=P1^0; //7289控制线 sbit cs7289=P1^3; sbit clk7289=P1^4; sbit dio7289=P1^5; //sbit key7289=P1^6; //7289查询方式 sbit key7289=P3^2; //7289中断方式 sbit baoj=P3^5; //7289子程序 void ini_7289(void); void send7289(short); short receive(void); void keyin(void); //lcd子程序 void ini_lcd(void); void lcdd_send(short); void lcdi_send(short); void chk_busy(void); //ad子程序 void ad(void); void baojing(void); void d_change(long); //初始化,编号,日期 void ini(); void error1(void); void nop1() {} void change(s) int dealy; //全局变量 short sh=0; //商品号 short dot=0; //小数点标志 bit list=0; short qb=0; char xdata shuju[7]=""; short xdata bcd[5]; char xdata s1[16]="单价 :元 "; char xdata s2[16]="重量 : Kg"; char xdata s3[16]="金额 :元 "; char xdata s4[16]="累计 :元 "; char code message0[]="信息学院山东大学 "; char code message1[]="输入收银员代号 :";
相关文档
最新文档