电子秤原理及电子秤原理图打印版.docx
- 文档编号:7694992
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:21
- 大小:38.74KB
电子秤原理及电子秤原理图打印版.docx
《电子秤原理及电子秤原理图打印版.docx》由会员分享,可在线阅读,更多相关《电子秤原理及电子秤原理图打印版.docx(21页珍藏版)》请在冰豆网上搜索。
电子秤原理及电子秤原理图打印版
电子秤原理及电子秤原理图
一、名词解释
利用作用于物体上的重力来测量该物体质量(重量)的计量仪器,装有电子装置的秤为电子秤。
二、工作原理
秤重物品经由装在机构上的重量传感器,将重力转换为电压或电流的模拟讯号,经放大及滤波处理后由A/D处理器转换为数字讯号,数字讯号由中央处理器(CPU)运算处理,而周边所须要的功能及各种接口电路也和CPU连接应用,最后由显示屏幕以数字方式显示。
电子秤原理图:
三、主要组成组件
1.重量传感器2.放大器电路3.滤波器电路4.模拟数字转换器5.中央处理器6.电源供应电路7.按键8.外壳9.机构10.秤盘
电子秤设计2(2006-05-0509:
08:
26)
第五部分:
附录
电子秤的信号采集、处理、显示的程序.
#include
#include
//ad控制线
#definead_244XBYTE[0xbfff];
sbitad_stb=P3^3;
sbitad_start=P1^1;
//lcd控制线
sbitlcd_di=P1^7;
sbitlcd_rw=P1^2;
sbitlcd_e=P1^0;
//7289控制线
sbitcs7289=P1^3;
sbitclk7289=P1^4;
sbitdio7289=P1^5;
//sbitkey7289=P1^6;//7289查询方式
sbitkey7289=P3^2;//7289中断方式
sbitbaoj=P3^5;
//7289子程序
voidini_7289(void);
voidsend7289(short);
shortreceive(void);
voidkeyin(void);
//lcd子程序
voidini_lcd(void);
voidlcdd_send(short);
voidlcdi_send(short);
voidchk_busy(void);
//ad子程序
voidad(void);
voidbaojing(void);
voidd_change(long);
//初始化,编号,日期
voidini();
voiderror1(void);
voidnop1()
{}
voidchange(s)
intdealy;//全局变量
shortsh=0;//商品号
shortdot=0;//小数点标志
bitlist=0;
shortqb=0;
charxdatashuju[7]="";
shortxdatabcd[5];
charxdatas1[16]="单价:
元";
charxdatas2[16]="重量:
Kg";
charxdatas3[16]="金额:
元";
charxdatas4[16]="累计:
元";
charcodemessage0[]="信息学院山东大学";
charcodemessage1[]="输入收银员代号:
";
charcodemessage2[]="输入日期:
";
charcodemessage3[16]="--山东大学--";
charcodemessage5[16]="垃圾公司欢迎您!
!
";
charxdatabianhao[16]="收银员:
";
charxdatariqi[16]="--";
longintxdatazongjia=0,jine=0,jine1=0;
intxdatashizhong=0,pizhong=0,zhongliang=0;
longintxdataqingdan[20][4];
charcodeshangpin[11][4]={{"单价"},{"苹果"},{"梨"},{"花生"},{"大米"},
{"桃子"},{"塑料"},{"瓜子"},{"桔子"},{"香蕉"},{"玉米"}};
longintxdatadanjia[11]=
{0,2,3635,5502,0,3320,5502,660,3210,6600,5600};
charxdatajiage[6]={0x0,0x0,0x0,0xfe,0x0,0x0};//0.00
shortxdataxiuzheng[]={0,2,5,6,7,8,9,12,13};
chars[16];
{s[6]=shuju[0];
s[7]=shuju[1];
s[8]=shuju[2];
s[9]=shuju[3];
s[10]=shuju[4];
s[11]=shuju[5];
s[12]=shuju[6];
}
//****************************************************************
voidmain()
{shorti,j;
longintx,z;
inty;
intxdataduilie[3]={0};
P1=0xff;
ini_lcd();//初始化LCD
lcdi_send(0x8a);
while(message0[i])lcdd_send(message0[i++]);
ini_7289();//初始化7289
pizhong=ad1();
lcdi_send(0x1);//总清屏
ini();//初始页面,收银员编号,日期
lcdi_send(0x1);//总清屏
EA=1;EX0=1;//中断
//EX1=1;
//ad_start=1;
while
(1)
{if(list){lcdi_send(0x80);//显示单位名称
for(i=0;i<16;i++)lcdd_send(message3[i]);
x=qingdan[0][0];//商品名单价
for(i=0;i<4;i++)s1[i]=shangpin[x][i];
x=qingdan[0][1];
d_change(x);change(s1);
lcdi_send(0x90);
for(i=0;i<16;i++)lcdd_send(s1[i]);
x=qingdan[0][2];//显示重量
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 {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]=duilie[0]; y=ad1(); duilie[0]=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/1; 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); } } } voidkeyin(void)interrupt0using0//中断0服务程序 {charX,i; longinty; send7289(0x15);//接收数据 X=receive(); cs7289=1; X=X&0x1f; switch(X) {case0xf: {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;//累加 case0xe: pizhong=zhongliang;break;//去皮 case0xd: {danjia[sh]=0;dot=0;}break;//清单价 case0xc: {zongjia=0;jine=0;dot=0;list=0;qb=0;pizhong=0; if(sh==0)danjia[sh]=0;}break;//总清 case0xa: dot=1;break;//点 case0xb: list=1;break;//清单 case0x19: sh=10;break; case0x18: sh=9;break; case0x17: sh=8;break; case0x16: sh=7;break; case0x15: sh=6;break; case0x14: sh=5;break; case0x13: sh=4;break; case0x12: sh=3;break; case0x11: sh=2;break; case0x10: sh=1;break; case0x1f: case0x1e: case0x1d: case0x1c: case0x1a: break; case0x1b: 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++;} elseif(dot==2){jiage[5]=X;dot++;} elseif(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);//等待键盘松开 } /* voidad(void)interrupt2using1 {shortx,y; x=ad_244; y=x; if(x&0x80)baojing(); elsex=x>>4; y=y&0xf; bcd[x]=y; }*/ //初始页面 voidini()//输入收银员编号,日期 {shorti,j; charX; lcdi_send(0x80);//提示输入收银员编号 i=0; while(message1[i])lcdd_send(message1[i++]); for(i=8;i<12;i++) { while(key7289); send7289(0x15);//接收数据 X=receive(); cs7289=1; bianhao[i]=X+0x30; lcdi_send(0x93); for(j=8;j<16;j++)lcdd_send(bianhao[j]); while(key7289==0); } lcdi_send(0x88);//提示输入日期 i=0; while(message2[i])lcdd_send(message2[i++]); for(i=0;i<10;i++)//输入日期 {if(i==4||i==7)i++; while(key7289==1); send7289(0x15);//接收数据 X=receive(); cs7289=1; riqi[i]=X+0x30; j=0; lcdi_send(0x9a); for(j=0;j<10;j++)lcdd_send(riqi[j]); while(key7289==0); } while(key7289); nop1(); while(key7289==0); nop1(); lcdi_send(0x1); } //LCD子程序 voidini_lcd()//LCD初始化子程序 { lcdi_send(0x30); lcdi_send(0x1);//总清 lcdi_send(0xc); lcdi_send(0x2);//光标右移,AC+1 } voidlcdd_send(shortX)//LCD发送数据子程序 {chk_busy(); nop1(); lcd_di=1;lcd_rw=0;lcd_e=0; P0=X; for(dealy=0;dealy<5;dealy++);// lcd_e=1;X=X; P0=0xff; } voidlcdi_send(shortX)//LCD发送指令子程序 {chk_busy(); nop1(); lcd_di=0;lcd_rw=0;lcd_e=0; P0=X; for(dealy=0;dealy<5;dealy++);// lcd_e=1;X=X; P0=0xff; } voidchk_busy() {shorti=0xff; while(i&0x80) {lcd_di=0; lcd_rw=1; lcd_e=0; i=P0; lcd_e=1; } } //7289子程序 voidini_7289() {shorti; cs7289=1;key7289=1;dio7289=1;//7289初始化子程序 for(i=0;i<50;i++) for(dealy=0;dealy<5;dealy++);//延时25ms send7289(0xa4);cs7289=1; } voidsend7289(shortX)//7289发送数据子程序 {shorti,j=1; cs7289=0; for(dealy=0;dealy<6;dealy++);//延时50us for(i=7;i>=0;i--) {j=j< dio7289=X&j; j=1;j=1;clk7289=1; for(dealy=0;dealy<1;dealy++);//延时10us clk7289=0; for(dealy=0;dealy<1;dealy++);//延时10us } dio7289=0; } shortreceive()//7289接收数据子程序 {shorti,X=0; dio7289=1; for(dealy=0;dealy<6;dealy++);//延时50us for(i=0;i<=7;i++) {clk7289=1; for(dealy=0;dealy<1;dealy++);//延时10us X=X<<1; if(dio7289)X++; clk7289=0; for(dealy=0;dealy<1;dealy++);//延时10us } dio7289=0; return(X); } //ad //AD子程序 intad1() {shortk,x; intad_zhi=0,xz; EA=0; ad_start=1; for(k=0;k<5;k++) {while(ad_stb); x=ad_244; x=x&0xf; ad_zhi=ad_zhi*10+x; } ad_start=0; EA=1;EX0=1; ad_zhi=ad_zhi>>1; xz=ad_zhi-50; xz=xz/100; ad_zhi=ad_zhi+xiuzheng[xz]; return(ad_zhi); voidd_change(longX) {charqian,bai,shi,ge,shifen,baifen; longintyu; if(X>)error1(); qian=X/100;yu=X%100; bai=yu/10;yu=yu%10; shi=yu/1;yu=yu%1; ge=yu/100;yu=yu%100; shifen=yu/10; baifen=yu%10; qian=qian+0x30; bai=bai+0x30; shi=shi+0x30; ge=ge+0x30; shifen=shifen+0x30; baifen=baifen+0x30; if(qian==0x30) {qian=0x20; if(bai==0x30) {bai=0x20; if(shi==0x30)shi=0x20; } } shuju[0]=qian; shuju[1]=bai; shuju[2]=shi; shuju[3]=ge; shuju[4]='.'; shuju[5]=shifen; shuju[6]=baifen; } voidbaojing() {shorti; for(i=0;i<50;i++) {baoj=0; for(dealy=0;dealy<10;dealy++); baoj=1; for(dealy=0;dealy<10;dealy++); } } 摘要 本系统采用单片机AT89S52为控制核心,实现电子秤的基本控制功能。 系统的硬件部分包括最小系统板,数据采集、人机交互界面三大部分。 最小系统部分主要是扩展了外部数据存储器,数据采集部分由压力传感器、信号的前级处理和A/D转换部分组成。 人机界面部分为键盘输入,128 64点阵式液晶显示,可以直观的显示中文,使用方便。 软件部分应用单片机C语言实现了本设计的全部控制功能,包括基本的称重功能,和发挥部分的显示购物清单的功能,可以设置日期和重新设定10种商品的单价,具有超重报警功能,由于系统资源丰富,还可以方便的扩展其应用 第一部分: 方案论证与比较 一、控制器部分 本系统基于51系列单片机来实现,因为系统需要大量的控制液晶显示和键盘。 不宜采用大规模可编程逻辑器件: CPLD、FPGA来实现。 (因为大规模可编程逻辑器件一般是使用状态机方式来实现,即所解决的问题都是规则的有限状态转换问题。 本系统状态较多,难度较大。 )另外系统没有其它高标准的要求,我们最终选择了AT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子秤 原理 原理图 打印
![提示](https://static.bdocx.com/images/bang_tan.gif)