基于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,一经查实,立即删除!

相关文章

springCloud bean的加载流程

Spring Cloud是Spring的一个子项目,用于构建基于Spring Boot的分布式系统。在Spring Cloud中,Bean的加载过程与Spring框架的Bean加载过程相似,主要包括以下几个步骤: 1、读取配置文件:Spring Cloud从配置文件中加载Be…

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

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

飞书公式总结

文本处理函数 飞书中的表格&#xff0c;需要实现 内容内容1条件1内容2条件2内容3条件3今天是周一;可以出去玩今天是周一能今天天气不错不能可以出去玩能 条件1&#xff0c;2&#xff0c;3为能时&#xff0c;把对应的内容1&#xff0c;内容2&#xff0c;内容3复制到内容 TEX…

Golang项目实战(三)

Golang项目实战&#xff08;三&#xff09; 该项目是使用grpcgin来构建的一个电商微服务项目&#xff0c;使用consul来注册和发现微服务。 项目简介创建项目架构创建货币服务创建货币微服务处理器将货币微服务注册到consul下载安装consul并发布服务创建商品微服务准备商品数据…

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…

C#之位运算

符号&#xff1a;<< >> & | ^ ~ 作用&#xff1a;用于二进制数据的操作 表达式&#xff1a; 表达式 运算符 表达式 ~表达式或者是变量 优先级&#xff1a;~高于<< , >> 高于 & 高于 | ^ 结合性&#xff1a;左结合 说明&#xff1…

2024届校招-Java开发笔试题-S4卷

有三种题型&#xff1a;单项选择题&#xff08;10道&#xff09;、不定项选择题&#xff08;10道&#xff09;、编程题&#xff08;3道&#xff09; 下面是一些回忆的题目&#xff1a; 1.哪种设计模式将对象的创建与使用分离&#xff0c;通过工厂类创建对象 答&#xff1a;工…

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…

优漫动游 常见的AI视频生成网站的官方网站:

1、Lumen5 Lumen5是一款在线视频制作工具&#xff0c;利用人工智能技术能够迅速将文本、和音乐转换为视频。它可以帮助你把博客文章、社交媒体内容等转化为吸引人的视频&#xff0c;从而提高你的品牌曝光率和社交媒体的参与度。 2.Animoto Animoto是一个视频制作平台&…

使用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;发现单引号 包…

ssh总是很短时间自动断开连接

ssh断开连接 有时候使用ssh连接服务器&#xff0c;只是一会儿没用就自动断开连接了&#xff0c;又得重新连&#xff0c;很烦人&#xff0c;那么有没有办法可以让连接保持很久不断开呢&#xff1f;那肯定是有的 在/etc/ssh目录下的sshd_config就是用来配置ssh的&#xff0c;其对…

SpringAOP的使用总结

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

微服务系统面经之三: 以秒杀系统为例-多级缓存及其更新机制

22 多级缓存&#xff08;百度一面&#xff09; 22.1 你用了什么缓存 答&#xff1a;本地内存redis 22.2 内存标记是如何被使用被更新的 22.3 什么时候修改这个第一层缓存&#xff08;内存标记&#xff09;&#xff0c;把它改为false 答&#xff1a;当redis预减库存为0的时…

vmware设置桥接模式后ip设置

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

Vue2屎山代码大盘点

前言 相比其他的框架来说&#xff0c;Vue中更容易产出屎山代码&#xff1b;因为Vue中的options就是一个大对象&#xff0c;导致js本身的很多检测都失效了&#xff0c;比如一个函数没有用到的话会“变灰”&#xff0c;template中代码提示比较少&#xff0c;较多的mixins等等&…