基于51单片机电子称—串口显示

基于51单片机电子称设计

(仿真+程序)

功能介绍

具体功能:

1.矩阵键盘组成按键,输入价格结算、打印;

2.用滑动变阻器和ADC0832模拟称重;

3.LCD1602可以显示重量、单价和总价;

4.接串口可以打印信息;

​演示视频:

基于51单片机电子称—串口显示 

添加图片注释,不超过 140 字(可选)

程序

/****智能电子称系统设计第一行显示:  weigh:		 Kg第二行显示:  Price:按下结算按键:可以计算总价总价:Sum:**********************************************/
#include<reg52.h>
#include "lcd.h"
#include"weigh.h"
#define uchar unsigned char
#define uint unsigned int
uint TIM=0;
uchar dis[10],mydata[6];
uchar open=0;
sbit beep=P2^0;
extern unsigned long wei_true;
unsigned long all_in=0,sum;
unsigned char point=0,dis_n=0;
unsigned char end=0;
extern unsigned char wei_h[5];
unsigned char alarm_en=0;
unsigned char down_n,sum_all[6],sum_n=0,sen1[6];
struct key
{uchar down; //输入次数
}key={0};
unsigned char code KEYTAB[16] ={0x7e,0xBE,0XBD,0xBB,0xDE,0xDD,0xDB,0xEE,0xED,0xEB,0x7D,0x7B,0x77,0xb7,0xd7,0xe7};
void clear_all();//
/*******************************************
*函数名称:delay(uint t)延时函数
*函数作用:延时1ms左右
*
*********************************************/
void delay(uint t)
{uint i,j;for(i=0;i<t;i++)for(j=0;j<110;j++);
}
void sen(unsigned char  r_byte)
{SBUF = r_byte;  while( TI == 0 );				//查询法TI = 0;  
}   
void send_print1()
{	 	unsigned char i=0;sen('W');sen('e');sen('i');sen('g');sen('h');sen(':');sen(wei_h[0]+48);sen(wei_h[1]+48);sen(wei_h[2]+48);sen(wei_h[3]+48);sen(' ');sen('P');sen('r');sen('i');sen('c');sen('e');sen(':');for(i=0;i<down_n;i++){sen(sen1[i]);}sen('S');sen('u');sen('m');sen(':');for(i=0;i<sum_n;i++){sen(sum_all[sum_n-i-1]);}
}
/*******************************************
*函数名称:keyscan( ) 键盘扫描函数
*函数作用: 1、扫描键盘,获得键值2、显示输入键值(*号),并保存3、读取功能按键,并执行相应的功能
按键的功能划分如下:|  7  |  8  |  9   |  clear	    |---------------------------------------|  4  |  5  |  6   |  键 |---------------------------------------|  1  |  2  |  3   |  没有使用       |---------------------------------------|     |point| 	    ||  0  |	 |   	|  没有使用       |---------------------------------------
*********************************************/
unsigned char keyscan(void)
{unsigned char i=0,j,t;unsigned char s=0,init_n;unsigned char point_wei=0;unsigned char redat;unsigned char keynum=0;P3=0XFF;P1=0XF0;redat=P3&0XF0;if(redat!=0xF0){	  delay(12);redat=P3&0XF0;//再次延时检测if(redat!=0xF0){keynum=redat;//获得第四位P1=0XFF;//看来这个地方是必须的P3=0X0F;//开始读取高四位delay(1);redat=P1&0X0F;keynum|=redat;for(i=0;i<16;i++){if(keynum==KEYTAB[i]){	 //这个地方发送出去if(i<10){sen1[down_n]=i+48;down_n++;}else if(i==10){sen1[down_n]='.';down_n++;}if(i<10) //如果输入键值小于10即0-9{if(key.down==1){if(mydata[0]>0){//这个时候才读取新的数据,否则等待按下小数点mydata[key.down]=i; //	保存按键lcd_pos(key.down+70);	 //lcd_wdat(i+48);key.down++; //按键次数加1 }							}else{if(point==0){mydata[key.down]=i; //	保存按键}else{mydata[key.down-1]=i; }mydata[key.down]=i; //	保存按键lcd_pos(key.down+70);	 //lcd_wdat(i+48);key.down++; //按键次数加1  						}				   	} 					else if(i==10){if(key.down>0){if(point==0) //一次运行过程中,只能输入一个小数点{lcd_pos(key.down+70);	 //lcd_wdat('.');key.down++; //按键次数加1 point=key.down;//保存当前出现位置 							}  //记录小数点出现的位置}}else if(i==11){end=1;//结算	   					  //得到实际值//先不讨论小数点的问题,最后在分析小数点问题sum=0;if(point>0) key.down=key.down-1;for(j=0;j<key.down;j++){//计算单价sum=sum*10+mydata[j];//						  }all_in=wei_true*sum;	//把这个数据显示出来的lcd_wcmd(0x01);// 清除屏幕	lcd_pos(0);lcd_wdat('S');lcd_pos(1);lcd_wdat('u');lcd_pos(2);lcd_wdat('m');lcd_pos(3);lcd_wdat(':');	for(j=0;j<10;j++){dis[j]=all_in%10;							 all_in=all_in/10;if(all_in==0) {dis_n=j;break;}}if(point==0){point_wei=0;}else{point_wei=key.down-point+1;}//这个地方出现了问题了sum_n=dis_n;for(j=0;j<=dis_n;j++){if(j==0) sum_n=0;if((j==point_wei)&&(point_wei>0)){lcd_pos(15-j);lcd_wdat('.');sum_all[sum_n]='.';sum_n++;s=1;									lcd_pos(15-(j+s));lcd_wdat(dis[j]+48);sum_all[sum_n]=dis[j]+48;sum_n++;}else{lcd_pos(15-(j+s));lcd_wdat(dis[j]+48);sum_all[sum_n]=dis[j]+48;sum_n++;}							  }						}else if(i==15){//保存clear_all();	down_n=0;//清除0for(t=0;t<6;t++){mydata[t]=0;							  }key.down=0;end=0;point=0; 					}else if(i==14){send_print1();sum_n=0;}/*****如果按下清除键******/delay(900);//键盘延时}}}	  }return 0;	 
}/*******************************************
*函数名称:init_timer( )	定时器初始化函数
*函数作用:定时器定时时间1ms*********************************************/	
void init_timer() //
{SCON = 0x50;       //REN=1允许串行接受状态,串口工作模式2 TMOD|= 0x21;//TH0 = 0xEC;TL0 = 0x78;ET0=1;TH1  = 0xFD;     //baud*2  /* reload value 19200、数据位8、停止位1。效验位无(11.0592)     TL1 = 0xFD; TR1  = 1;        //开启定时器1 TR0  = 1; //关闭                                                      ES   = 1;        //开串口中断    	EA=1;		}/*******************************************
*函数名称:clear( )	 清除函数
*函数作用:只清除按下的次数,以及初始化字符显示
*********************************************/	  
void clear() reentrant
{key.down=0;init_char();
}
/*******************************************
*函数名称:clear_all( )	  清除所有的标志变量
*函数作用
*********************************************/	
void clear_all()  //所有的变量清零
{clear();  
}
void sys_init()
{lcd_init();init_char();init_timer();}/*******************************************
*函数名称:main( )	 主函数
*函数作用:这个函数必须有的*********************************************/	
void main()//
{beep=1;sys_init();while(1){keyscan();if(!end) {get_wei();if(alarm_en) {beep=0;}else{beep=1;}}delay(700);}   
}  /*******************************************
*函数名称:TI_int1( )	定时器1中断处理函数
*函数作用:*********************************************/	
void T0_int1(void) interrupt 1//定时器中断 
{TH0 = (65536-10000)/256;	TL0 = (65536-10000)%256;	TIM++;if(TIM>100){TIM=0; open=1;}    
}

硬件设计

使用元器件:

单片机:AT89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计资料

        资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件等。具体内容如下,全网最全!!

 

可以关注下方公众号!

点赞分享一起学习成长。

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

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

相关文章

家用洗地机十大品牌什么牌子好用?2024十大爆款洗地机分享

在快节奏的生活中&#xff0c;清洁家居成为了一项繁琐却必不可少的任务。而洗地机的出现&#xff0c;无疑给忙碌的都市人带来了福音。选择一款优质的洗地机可以大大提升我们清洁的效率&#xff0c;改善我们的生活品质。那么&#xff0c;哪家洗地机清洁力最强&#xff0c;更适合…

ONLYOFFICE 桌面编辑器 8.1 版发布:全面提升文档处理效率的新体验

文章目录 什么是ONLYOFFICE &#xff1f;ONLYOFFICE 桌面编辑器 8.1 发布&#xff1a;新功能和改进功能强大的 PDF 编辑器幻灯片版式功能从右至左语言支持多媒体功能增强无缝切换工作模式其他改进和优化总结 什么是ONLYOFFICE &#xff1f; https://www.onlyoffice.com/zh/off…

JavaScript的学习之图片的切换

目录 一、寻找素材 二、编写简单的静态html页面 代码示例 效果展示 三、JS功能的实现 JS代码 完整代码 效果展示 一、寻找素材 随便去网上找几张图片素材 二、编写简单的静态html页面 代码示例 <!doctype html> <html><head><meta charset"…

svn明明都在环境变量中添加了,但还是无法在cmd中生效

svn明明都在环境变量中添加了&#xff0c;但还是无法在cmd中生效 cmd显示原因问题解决 cmd显示 svn不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 原因 安装svn一直点下一步下一步…&#xff0c;没有勾选command line client。 问题解决 1.按下winx&…

如何加密电脑文件?电脑重要文件怎么加密?

在电脑中&#xff0c;我们会存储很多重要文件&#xff0c;包括个人隐私视频、照片&#xff0c;企业机密数据&#xff0c;工作数据等。为了避免重要文件泄露&#xff0c;我们需要加密保护电脑文件。下面我们就来了解一下电脑文件怎么加密&#xff1f; 超级加密3000 当需要加密电…

vue 实现 word/excel/ppt/pdf 等文件格式预览操作

效果图&#xff1a; 问题描述&#xff1a;一般情况下使用iframe标签就可以实现文件预览&#xff0c;但是这个标签只针对于ppt和pdf是有效的。对于doc文件就需要借助第三方插件&#xff08;vue-office/docx&#xff09;来实现预览了。下面介绍使用方法。 安装插件&#xff1a;n…

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)

力扣爆刷第155天之TOP100五连刷41-45&#xff08;下一个排列、正序数组中位数、归并排序链表&#xff09; 文章目录 力扣爆刷第155天之TOP100五连刷41-45&#xff08;下一个排列、正序数组中位数、归并排序链表&#xff09;一、31. 下一个排列二、4. 寻找两个正序数组的中位数三…

量化交易策略:定义及其重要性

量化交易是华尔街和硅谷的秘密结合点&#xff0c;在这里数学和算法与金钱和市场相遇。虽然它曾经是金融巨头的专属领域&#xff0c;但现在它比以往任何时候都更易于接触。 但不要被愚弄&#xff0c;量化交易仍然是一种高速、高压的游戏&#xff0c;在毫秒间可以赚到或失去财富…

STM32CubeIDE复制工程文档

目录 1. 粘贴复制2. 重命名 1. 粘贴复制 复制粘贴 重命名&#xff0c;别重名&#xff0c;点击- copy 结果 2. 重命名 重命名 ioc文件 编译 OK

IDEA 安装与激活详细教程最新(附最新激活码)2099年亲测有效!

我们先从 IDEA 官网下载 IDEA 2024.1 版本的安装包&#xff0c;下载链接如下&#xff1a; https://www.jetbrains.com/idea/download/ 点击下载(下载Ultimate版)&#xff0c;静心等待其下载完毕即可。 激活方式&#xff1a; 正版专属激活码领取

手机越用越慢?试试这4个秘籍,让手机流畅如新

智能手机作为日常生活的得力助手&#xff0c;最初总是以惊人的速度和流畅性给我们留下深刻印象。 但你有没有发现&#xff0c;随着时间的推移&#xff0c;手机似乎开始变得不那么敏捷&#xff0c;甚至出现了反应迟缓和卡顿的情况&#xff1f; 别让这个问题困扰你,下面是四个关…

Linux关闭swap分区操作[适用于CDH报警等]

1.查看swap分区挂载路径(没卵用) swapon -s 2.设置配置文件的swap配置 echo “vm.swappiness 0” > /etc/sysctl.conf 3.设置内存中的swap状态。有时候配置文件为0&#xff0c;但集群或服务仍然使用了swap分区&#xff0c;可能原因就是内存没有同步配置 echo “0” > …

step5:“串口设置”逻辑(下)

文章目录 文章介绍效果图SerialPort.qml代码v1代码v2代码v3 文章介绍 文章qml/c&#xff1a;基础界面的“串口设置”逻辑1实现了 1、串口连接&#xff0c;连接成功的弹窗提示 2、读取数据。 本篇文章需要实现的功能是 1&#xff09;接收数据后更新“已接收”的行数 效果图 Se…

文本分类-RNN-LSTM

1.前言 本节介绍RNN和LSTM&#xff0c;并采用它们在电影评论数据集上实现文本分类&#xff0c;会涉及以下几个知识点。 1. 词表构建&#xff1a;包括数据清洗&#xff0c;词频统计&#xff0c;词频截断&#xff0c;词表构建。 2. 预训练词向量应用&#xff1a;下载并加载Glove的…

鸿蒙星河NEXT学习笔记

1.1 字符串 // 变量的存储和修改&#xff08;string number boolean&#xff09; // 1. 变量存储 // 1.1 字符串 string 类型 // 注意点1&#xff1a;字符串需要用引号引起来&#xff08;单引双引号&#xff09;字符串 "字符串" // 注意点2&#xff1a;存储的时候&a…

Elasticsearch开启认证|为ES设置账号密码|ES账号密码设置|ES单机开启认证|ES集群开启认证

文章目录 前言单节点模式开启认证生成节点证书修改ES配置文件为内置账号添加密码Kibana修改配置验证 ES集群开启认证验证 前言 ES安装完成并运行&#xff0c;默认情况下是允许任何用户访问的&#xff0c;这样并不安全&#xff0c;可以为ES开启认证&#xff0c;设置账号密码。 …

FPGA无网络芯片实现千兆TCP/IP协议栈,基于1G/2.5G Ethernet PCS/PMA or SGMII方案,提供18套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我这里已有的以太网方案网络芯片版本-->千兆网 TCP-->服务器 方案网络芯片版本-->千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案1G/2.5G Ethernet PCS/PMA or SGMII 方案AXI 1G/2.5G Ethernet Subs…

AI大模型安全挑战和安全要求解读

引言 随着人工智能技术的飞速发展&#xff0c;大模型技术以其卓越的性能和广泛的应用前景&#xff0c;正在重塑人工智能领域的新格局。然而&#xff0c;任何技术都有两面性&#xff0c;大模型在带来前所未有便利的同时&#xff0c;也引发了深刻的安全和伦理挑战。 大模型&…

vscode安装lean4

本教程演示在Windows系统下如何安装Lean 4正式版。Linux和MacOS版本请参考Lean Manual。 如果你身在中国&#xff0c;在运行安装程序前需要做如下准备&#xff1a; 在系统目录C:\Windows\System32\drivers\etc文件夹下找到hosts文件。对于其它系统用户也都是找到各自系统的host…

字节码编程ASM之两数之和

写在前面 源码 。 看下如何使用ASM来写如下的类&#xff1a; package com.dahuyou.demo.asm;public class AsmSumOfTwo {public AsmSumOfTwo() {}public static void main(String[] var0) {int var1 (new AsmSumOfTwo()).sum(1, 2);System.out.println(var1);}public int su…