当前位置: 首页 > news >正文

基于单片机商用电子计价秤电子秤系统Proteus仿真(含全部资料)

 全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等

资料下载:

通过网盘分享的文件:资料分享
链接: 百度网盘 请输入提取码 提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、Keil c语言程序源代码


项目功能:

基于51单片机的商用电子计价秤设计
具体功能:
(1)通电源时,数字电子秤进入欢迎界面“欢迎使用电子秤 设计••••••”;
(2)当载物台上放有物体时,ADC0832立即将数据转换发送给单片机处理,并由LCD液晶显示屏显示;
(3)当用按键输入对应商品的代码编号,在LCD上可以看到相应商品的名称,单价,总重,总价格等信息。
(4)在称量的过程中,一旦物体自身的重量超出电子秤的称量范围,蜂鸣器立即会发出“滴滴••••”警报声告诉工作人员,所称量物品超重(测量范围0—9.99KG)。


项目文件:

一、Proteus仿真源文件

​​

二、AD原理图文件

二、报告说明书

三、系统流程图

​​

四、器件清单

DescriptionDesignatorFootprintLibRef
CapacitorC1, C2RAD-0.3Cap
Polarized Capacitor (Surface Mount)C3CC2012-0805Cap Pol3
蜂鸣器LS1BELL
Header, 20-PinP1HDR1X20Header 20
Header, 3-PinP2HDR1X3Header 3
NPN General Purpose AmplifierQ1BCY-W3/E42N3904
Isolated Resistor NetworkR1SO-G16/Z8.5Res Pack3
ResistorR2, R3AXIAL-0.4Res2
Switch

S1, S2, S3, S4, S5,

S6, S7, S8, S9, S10,

S11, S12, S13, S14,

S15, S16, S17

SPST-2SW-PB
U187C51
A/D Peripheral with Serial ControlU2P008ADC0832AP
Crystal OscillatorY1BCY-W2/D3.1XTAL

五、Keil c语言程序源代码(部分)

#include<reg51.h>
#include<intrins.h>
#include <absacc.h>
#include <math.h>
#include<lm4229.h>
#define uchar unsigned char
#define uint   unsigned int
sbit ADCS =P3^5; 
sbit ADDI =P3^7;  
sbit ADDO =P3^7;  
sbit ADCLK =P3^6;  
uint x1,y1,z1=0,w1;
uchar ad_data,k,n,m,e,num,s;                              //采样值存储
uint temp1;
sbit beep =P3^0;                                           
char press_data;                                  //标度变换存储单元
float  press;
unsigned char ad_alarm,temp;                           //报警值存储单元
unsigned char abc[5]={48,46,48,48,48};
unsigned char price_all[6]={48,48,46,48,48,48};
float price_unit[10]={5.5,2.8,3.6,4.5,5.8,6.8,7.9,8.0,9.5,0};       //商品初始单价
uchar price_danjia[5]={48,46,48,48,48};
float price;
uint price_temp1,price_temp2;                             //商品总价       
uchar Adc0832(unsigned char channel);															
void alarm(void);
void data_pro(void);
void delay(uint k);
void keyscan();
void disp_init();
void  price_jisuan();
/************
主函数
************/
void main(void)
{ delay(500);                        //系统延时500ms启动//ad_data=0;                       //采样值存储单元初始化为0lcd_init();                        //显示初始化disp_init();        				  //开始进入欢迎界面delay(1000);						  //延时进入称量画面clear_lcd(0,4,40);clear_lcd(16,0,100);clear_lcd(28,0,40);clear_lcd(44,0,100);clear_lcd(56,0,40);clear_lcd(72,0,100);clear_lcd(84,0,40);clear_lcd(100,0,100);clear_lcd(112,0,40);write_lcd(0,8,"实用电子秤");              while(1){ad_data =Adc0832(0);	   //采样值存储单元初始化为0alarm();data_pro(); //读取重量keyscan();  //查询商品种类write_lcd(40,0,"------------------------------");write_lcd(56,0,"单  价:");write_lcd(56,11,price_danjia);write_lcd(56,20,"元/千克");write_lcd(72,0,"总重量:");write_lcd(72,11,abc);write_lcd(72,20,"千克");write_lcd(88,0,"总  价:");price_jisuan();           //计算出价格write_lcd(88,10,price_all);write_lcd(88,20,"元");write_lcd(112,0,"设计学生: XXX");}
}
/************
读ADC0832函数
************/
//采集并返回
uchar Adc0832(unsigned char channel)     //AD转换,返回结果
{uchar i=0;uchar j;uint dat=0;uchar ndat=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCLK=1;//拉高CLK端_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();dat=0;for(i=0;i<8;i++){dat|=ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();dat<<=1;if(i==7)dat|=ADDO;}  for(i=0;i<8;i++){j=0;j=j|ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();j=j<<7;ndat=ndat|j;if(i<7)ndat>>=1;}ADCS=1;//拉搞CS端ADCLK=0;//拉低CLK端ADDO=1;//拉高数据端,回到初始状态dat<<=8;dat|=ndat;return(dat);            //return ad k         
}void data_pro(void)
{unsigned int;	   		  if(0<ad_data<256)			              {			    int vary=ad_data;									press=(0.019531*vary);			temp1=(int)(press*1000);	                //放大1000倍,便于后面的计算abc[0]=temp1/1000+48;			     	//取压力值百位abc[1]=46;abc[2]=(temp1%1000)/100+48;		    	//取压力值十位abc[3]=((temp1%1000)%100)/10+48;	    	//取压力值个位abc[4]=((temp1%1000)%100)%10+48;			//取压力值十分位}	    }
/*****************报警子函数*******************/void alarm(void)
{if(ad_data>=256)                        beep=0;          //则启动报警elsebeep=1; 		  
}void delay(uint k)
{uint i,j;for(i=0;i<k;i++)for(j=0;j<100;j++);
} 
//开机欢迎界面
void disp_init()
{write_lcd(0,8,"欢迎使用电子秤");write_lcd(16,0,"------------------------------");write_lcd(28,0,"设计学生:XXX");write_lcd(44,0,"------------------------------");write_lcd(56,0,"班级学号:xxx");write_lcd(72,0,"------------------------------");write_lcd(84,0,"指导老师: xxx");write_lcd(100,0,"------------------------------");write_lcd(112,0,"设计日期: 2020年04月11日");}//键盘服务程序
void keyscan()
{P1=0xfe;temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P1;temp=temp&0xf0;while(temp!=0xf0){temp=P1;switch(temp){																		 case 0xee:num=1,price=price_unit[0], write_lcd(24,0,"名  称:   杏    仁");break;case 0xde:num=2,price=price_unit[1],write_lcd(24,0,"名  称:   李     子");break;case 0xbe:num=3,price=price_unit[2],write_lcd(24,0,"名  称:   草     莓");break;case 0x7e:num=4,price=price_unit[3],write_lcd(24,0,"名  称:   葡     萄");break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P1;temp=temp&0xf0;while(temp!=0xf0){temp=P1;switch(temp){case 0xed:num=5,price=price_unit[4],write_lcd(24,0,"名  称:   西     瓜");break;case 0xdd:num=6,price=price_unit[5],write_lcd(24,0,"名  称:   苹     果");break;case 0xbd:num=7,price=price_unit[6],write_lcd(24,0,"名  称:   雪     梨");break;case 0x7d:num=8,price=price_unit[7],write_lcd(24,0,"名  称:   核     桃");break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfb;temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P1;temp=temp&0xf0;while(temp!=0xf0){temp=P1;switch(temp){case 0xeb:num=9,price=price_unit[8],write_lcd(24,0,"名  称:   香     蕉");break;case 0xdb:num=10,price=price_unit[9],write_lcd(24,0,"名  称:    商品代码");break;case 0xbb:num=11,price=price_unit[1];break;case 0x7b:num=12,price=price_unit[2];break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P1;temp=temp&0xf0;while(temp!=0xf0){temp=P1;switch(temp){case 0xe7:num=13,price=price_unit[3];break;case 0xd7:num=14,price=price_unit[4];break;case 0xb7:num=15,price=price_unit[5];break;case 0x77:num=16,price=price_unit[6];break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}price_temp1=(int)(price*1000);price_danjia[0]=price_temp1/1000+48;			     	//取单价个位price_danjia[1]=46;price_danjia[2]=(price_temp1%1000)/100+48;		    	//取单价十分位price_danjia[3]=((price_temp1%1000)%100)/10+48;	    	//取单价百分位price_danjia[4]=((price_temp1%1000)%100)%10+48;			//取单价千分位
}

六、全套资料包含

​​

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复“资料”!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

http://www.xdnf.cn/news/1403569.html

相关文章:

  • 图解LLM(AI大模型)的工作原理
  • Redis 测试:过期 key 内存释放情况
  • 深入理解shared_ptr与循环引用问题
  • node.js ---文件读写(FS模块)
  • 用【Coze】实现文案提取+创作
  • 蓓韵安禧活性叶酸独立包装日期标注
  • 加密软件哪个好用?加密软件-为数据共享提供安全保障
  • 【基础-单选】例如现在要实现一个广告弹窗,包含图片和文本等信息,使用下面那种弹窗可以实现
  • ROS 2 机器人开发$2
  • 项目管理方法论有哪些流派
  • basic_ostream
  • Linux网络基础1(三)之网络与协议栈and网络传输基本流程
  • Yolov8损失函数:回顾Yolov8-Loss
  • 6.1 Update不能写复杂的逻辑
  • HarmonyOS Router 基本使用详解:从代码示例到实战要点
  • 【随笔】【Debian】【ArchLinux】基于Debian和ArchLinux的ISO镜像和虚拟机VM的系统镜像获取安装
  • 4-ATSAM3X8E-FLASH写入
  • Docker(自写)
  • MEM课程之物流与供应链管理课程经典案例及分析-个人原创内容放在此保存
  • 数据结构(C语言篇):(七)双向链表
  • 三重积分从入门到入土
  • 【C++】string
  • Selenium 实战项目:电子商务网站自动化测试
  • Dify的搭建
  • MinerU本地化部署
  • 如何使用 DeepSeek 帮助自己的工作?—— 从效率工具到能力延伸的实战指南
  • kind集群应用
  • 【从零开始java学习|第十篇】面向对象
  • 【前端教程】MIUI 官网界面设计与实现全解析
  • 函数(2)