基于51单片机的称重电子秤proteus仿真设计

一、设计背景

          随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化、人性化用在了电子秤重的控制系统中。本系统主要由单片机来控制,测量物体重量部分使用称重传感器,加上显示单元,此电子秤俱备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。
       本系统以AT89C51单片机为主控芯片,外围附以称重电路、显示电路、键盘电路、时钟电路、复位电路等构成智能称重系统电路板,从而实现自动称重系统的各种控制功能。可以说,此设计所完成的电子秤很大程度上满足了应用需求。其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在KEIL5中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。

二、实现功能

        以51单片机为控制核心,设计一种称重电子称。整个系统包括MCU、晶振电路、时钟电路、功能按键以及LCD显示。该系统称重传感器部分是模拟传感器的工作原理而画的,利用外部中断统计称重传感器传来的脉冲数,经过单片机后,LCD1602上显示重量(两位整数,三位小数),由矩阵键盘输入价格(三位整数,两位小数),同时在LCD1602上显示,在计算出总价。可具体实现以下功能:

       (1) 测量量程:0-12kg;

       (2) 测量精度:1g;

       (3) 显示:LCD1602;键盘:4*4矩阵键盘;

       (4) LCD1602上显示重量,键盘输入价格,同时LCD1602价格,总价。

     (5)按下修改键后,进入单价修改界面,默认单价为1.5元/kg。

三、仿真演示

初始化界面,模拟称重传感器脉冲频率1KHz,默认单价1.5元/kg,测得重量1.062kg,计算的总价为1.59元。

按下修改按键,进入单价修改界面,输入单价,完成后按下确定按键返回测量界面。

改变模拟称重传感器脉冲频率至12KHz,测得重量12.740kg,计算的总价为127.48元。

四、源程序

#include "reg52.h"//单片机头文件
#include "1602.h" //调用1602.h  用于控制1602液晶
#include "datatype.h" uint64 fre,count,time;
uint8 flag=0;
uint8 flag1=0,flag2=0,flag3=0,flag4=0;
uint8 temp;
uint8 k; //按键值读取
fp32 Unitprice=1.5;//单价
fp32 Weight=0;//重量f
fp32 Currency;
uint64 Money;
uint8 buf[6]="--.---";uint8 KeyScans(void);//按键检测
void DisplayScreen(void);//压力转换  计算金额  显示金额和单价
void ModifyPrice(void);//修改单价
void Timer0Init(void); //定时器0初始化
void ExitInit(void);  //外部中断0初始化void main()  //主函数
{ Timer0Init();ExitInit();lcd_init();//1602液晶初始化while(1)//主循环{	 if(flag==1){flag=0;  write_str(0x80,"Weight=");//显示重量write_com(0x87);write_dat(table[fre%100000/10000]);write_dat(table[fre%10000/1000]); write_dat('.');write_dat(table[fre%1000/100]);write_dat(table[fre%100/10]);write_dat(table[fre%10]);write_str(0x8e,"Kg");}DisplayScreen();//压力转换k=KeyScans();if(k==12){k=16;write_com(0x01);ModifyPrice();//修改单价write_com(0x01);}}
}void t0() interrupt 1
{TH0=0x30; TL0=0xb0;time++;if(time==20)                //定时1s时间到{   EX0=0;//关中断、停止计数time=0;                 //计时清0fre=count;      //计算脉冲总数    	 flag=1;     count=0;                //清零计数器1计数  EX0=1;}
}/*------------------------------------------------外部中断程序
------------------------------------------------*/
void ISR_Key(void) interrupt 0 using 1
{count++;  
}	uint8 KeyScans(void)
{ uint8 num=16;	 P1=0xfe;if(flag1==0){flag1=1;temp=P1;if(temp!=0xfe){delay(5);if(temp!=0xfe){ temp=temp&0xf0;switch(temp){  case 0x70:num=0;break;case 0xb0:num=1;break;case 0xd0:num=2;break;case 0xe0:num=3;break;}}}}//if flag1if(P1==0xfe)flag1=0;  P1=0xfd;if(flag2==0){ 	flag2=1;temp=P1;if(temp!=0xfd){delay(5);if(temp!=0xfd){ temp=temp&0xf0;switch(temp){case 0x70:num=4;break;case 0xb0:num=5;break;case 0xd0:num=6;break;case 0xe0:num=7;break;}}}}//if flag1if(P1==0xfd)flag2=0;	 P1=0xfb;if(flag3==0){   	flag3=1;temp=P1;if(temp!=0xfb){delay(5);if(temp!=0xfb){ temp=temp&0xf0;switch(temp){case 0x70:num=8;break;case 0xb0:num=9;break;case 0xd0:num=10;break;case 0xe0:num=11;break;}}}}//if flag1if(P1==0xfb)flag3=0;P1=0xf7;if(flag4==0){ flag4=1;temp=P1;if(temp!=0xf7){delay(5);if(temp!=0xf7){ temp=temp&0xf0;switch(temp){case 0x70:num=12;break;case 0xb0:num=13;break;case 0xd0:num=14;break;case 0xe0:num=15;break;}}}}//if flag1if(P1==0xf7)flag4=0;	return num;
}	
void DisplayScreen(void)//压力转换  计算金额  显示金额和单价
{Weight=fre/1000.0;Currency=Unitprice*Weight;Money=(uint64)(Currency*100);write_com(0x80+0x40);	  //显示单价write_dat(buf[0]);   write_dat(buf[1]); write_dat('.');write_dat(buf[3]);write_dat(buf[4]);write_dat(buf[5]);write_com(0x89+0x40);		//显示金额write_dat(table[Money/100000]);write_dat(table[Money%100000/10000]);	write_dat(table[Money%10000/1000]); write_dat(table[Money%1000/100]);write_dat('.');write_dat(table[Money%100/10]);write_dat(table[Money%10]);
}void ModifyPrice(void)//修改单价
{uint8 ent=0;write_str(0x80,"Unitprice=--.---");while(1){write_str(0x8a,buf);   //显示单价k=KeyScans();	if((k==0)||(k==1)||(k==2)||(k==3)||(k==4)||(k==5)||(k==6)||(k==7)||(k==8)||(k==9))	  //数字按键{ ent++;switch(ent){case 0:break;case 1: buf[0]=k+0x30;break;case 2: buf[1]=k+0x30;break;case 3: buf[3]=k+0x30;break;case 4: buf[4]=k+0x30;break;case 5: buf[5]=k+0x30;break;case 6: buf[0]='-',buf[1]='-',buf[3]='-',buf[4]='-',buf[5]='-',ent=0;break;} k=16;}  if(k==14)//返回{k=16;break;}//确认if(k==15)//确定{k=16;Unitprice=(buf[0]-0x30)*10+(buf[1]-0x30)+(buf[3]-0x30)/10.0+ (buf[4]-0x30)/100.0+(buf[5]-0x30)/1000.0;break;}//确认}
}void Timer0Init(void)
{TMOD=0x01;TH0=0x30; TL0=0xb0;ET0=1;TR0=1;EA=1;
}void ExitInit(void)
{EX0=1;         //外部中断0开IT0=1;         //边沿触发 
}

仿真源文件及完整程序百度网盘链接:https://pan.baidu.com/s/1RpnFS1wal21L6_nmMdAy-g 
提取码:1bc9 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/76552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Activiti7工作流引擎:在线流程编辑器Activiti Modoler5.x

一&#xff1a;简介 有的时候我们的流程图需要业务人员自己绘制&#xff0c;然后使用自己绘制的流程图&#xff0c;此时就需要一个在线流程图编辑器需要集成到我们的web系统中。Activiti Modoler是Activiti官方推出的在线流程编辑器。 二&#xff1a;pom.xml <dependency…

HNU小学期工训-STC15单片机模型大作业实验报告

STC15单片机模型大作业实验报告 全称&#xff1a;基于STC15单片机与OLED显示模块&PC端演示的多功能声光温振时钟智能手表模型 计科210X 甘晴void 202108010XXX 【请注意&#xff1a;本作业入选优秀范例&#xff0c;直接照抄源码有很大风险】 【建议理解原理之后作改动】 …

基于SSM框架的德云社票务系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Linux入门教程||Linux系统目录结构

登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 树状目录结构&#xff1a; 以下是对这些目录的解释&#xff1a; /bin&#xff1a; bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot&#xff1a; 这里存放的是启动Linux时…

RP9学习-1

一.基础 1.10个面板位置示意图&#xff1a; 2.常用英文 1.鼠标点击&#xff1a;click or tap 3.工作区 1.恢复默认工作区&#xff1a; view-->reset view 2.自定义工作区&#xff1a; 可以用鼠标左键拖动面板到独立的位置或者吸附到其他面板上 3.自定义工具栏 view-->T…

使用element-ui导航,进入对应的三级页面菜单保持点击状态

1.注意事项 01.路由中使用了keepAlive属性&#xff0c;要用keepAlive&#xff1a;true&#xff0c;不能等于false&#xff0c;使用false页面会刷新 2.使用的方法 NavMenu 导航菜单 3.项目实例 <template><div class"policy-home"><div class"…

【Linux】工具Gdb调试轻度使用(C++)

目录 一、Gdb背景 二、Gdb基本命令 【2.1】list | l 【2.2】break | b 【2.5】delete | d 【2.6】disable 【2.7】enable 【2.3】info 【2.4】info locals 【2.6】run | r 【2.7】next | n 【2.8】step | s 【2.9】 continue | c 【2.10】bt 【2.11】finish 三…

docker镜像详解

目录 什么是docker镜像镜像相关命令docker pulldocker imagesdocker searchdocker rmi导出 / 导入镜像 镜像分层镜像摘要镜像摘要的作用分发散列值 什么是docker镜像 Docker镜像是Docker容器的基础组件&#xff0c;它包含了运行一个应用程序所需的一切&#xff0c;包括代码、运…

sqli第一关

1.在下使用火狐访问sqlilabs靶场并使用burpsuite代理火狐。左为sqlilabs第一关&#xff0c;右为burpsuite。 2.输入?id1 and 11 与?id1 and 12试试 可以看出没有变化哈&#xff0c;明显我们输入的语句被过滤了。在?id1后面尝试各种字符&#xff0c;发现单引号 包…

SpringAOP的使用总结

B站 【尚硅谷新版SSM框架全套视频教程&#xff0c;Spring6SpringBoot3最新SSM企业级开发】https://www.bilibili.com/video/BV1AP411s7D7?p47&vd_source726decf3eb63273901caae35ad437124 AOP即面向切面编程,通过使用一定的技术将非核心方法抽离出来,放入统一的类中进行…

vmware设置桥接模式后ip设置

网络连接方式设置 找到虚拟机里机器的网络设置 左边是宿主机&#xff0c;右边是虚拟机&#xff0c;按照这个设置就可以上网了(IP指定一个没有占用的值&#xff0c;子网掩码和网关设置成一样的)就可以联网了。 over~~

mobaXterm使用pycharm

首先去pycharm的官网PyCharm: the Python IDE for Professional Developers by JetBrains 下载pycharm&#xff08;选择linux的community版本即可&#xff09; 下载后的压缩包拖拽到mobaXterm如下位置&#xff1a; 进入压缩包所在的文件夹&#xff08;图中这个位置是root目录&…

记一次线程堵塞(挂起)导致消息队列积压

1 背景 A服务作为生产者&#xff0c;每天发送上千万的mq消息&#xff0c;每一个消息包含500个用户ids数据。B服务作为消费者&#xff0c;接受MQ消息并通过http调用第三方请求进行业务处理&#xff0c;消费组启用了rabbitmq的多线程消费组&#xff0c;一个实例并发40个mq消费者…

Prompt Tuning训练过程

目录 0. 入门 0.1. NLP发展的四个阶段&#xff1a; Prompt工程如此强大&#xff0c;我们还需要模型训练吗&#xff1f; - 知乎 Prompt learning系列之prompt engineering(二) 离散型prompt自动构建 Prompt learning系列之训练策略篇 - 知乎 ptuning v2 的 chatglm垂直领域训练记…

读高性能MySQL(第4版)笔记05_优化服务器设置

1. 除非遇到异常情况&#xff0c;否则不需要调整配置 1.1. 不要“调优”服务器&#xff0c;不要使用比率、公式或“调优脚本”作为设置配置变量的基础 1.1.1. 在互联网上搜索配置建议并不总是一个好主意&#xff0c;你会在博客、论坛等找到很多糟糕的建议 1.1.2. 很难判断谁…

SpringBoot+Vue 整合websocket实现简单聊天窗口

效果图 1 输入临时名字充当账号使用 2 进入聊天窗口 3 发送消息 &#xff08;复制一个页面&#xff0c;输入其他名字&#xff0c;方便展示效果&#xff09; 4 其他窗口效果 代码实现 后端SpringBoot项目&#xff0c;自行创建 pom依赖 <dependency><groupId…

uni-app 使用uCharts-进行图表展示(折线图带单位)

前言 在uni-app经常是需要进行数据展示&#xff0c;针对这个情况也是有人开发好了第三方包&#xff0c;来兼容不同平台展示 uCharts和pc端的Echarts使用差不多&#xff0c;甚至会感觉在uni-app使用uCharts更轻便&#xff0c;更舒服 但是这个第三方包有优点就会有缺点&#xf…

vue 部署到本机IIS 部署 SPA 应用

安装 URL Rewrite Works With: IIS 7, IIS 7.5, IIS 8, IIS 8.5, IIS 10 URL Rewrite : The Official Microsoft IIS Site 目前电脑IIS是6版本的&#xff0c;以下的方法不太合适操作。目前用Nginx部署&#xff0c;够用了。 nginx配置参考&#xff1a; uni-app 前面项目&am…

Segment Anything Model(SAM)论文解读

一、引言 在这项工作中&#xff0c;作者的目标是建立一个图像分割的基础模型。也就是说&#xff0c;寻求开发一个提示模型&#xff0c;并使用一个能够实现强大泛化的任务在广泛的数据集上对其进行预训练。有了这个模型&#xff0c;使用即时工程解决新数据分布上的一系列下游分…

Nacos docker实现nacos高可用集群项目

目录 Nacos是什么&#xff1f; Nacos在公司里的运用是什么&#xff1f; 使用docker构建nacos容器高可用集群 实验规划图&#xff1a;​编辑 1、拉取nacos镜像 2、创建docker网桥&#xff08;实现集群内的机器的互联互通&#xff08;所有的nacos和mysql&#xff09;&#x…