电子秤原理及电子秤原理图打印版文档格式.docx

上传人:b****6 文档编号:20820065 上传时间:2023-01-25 格式:DOCX 页数:21 大小:38.74KB
下载 相关 举报
电子秤原理及电子秤原理图打印版文档格式.docx_第1页
第1页 / 共21页
电子秤原理及电子秤原理图打印版文档格式.docx_第2页
第2页 / 共21页
电子秤原理及电子秤原理图打印版文档格式.docx_第3页
第3页 / 共21页
电子秤原理及电子秤原理图打印版文档格式.docx_第4页
第4页 / 共21页
电子秤原理及电子秤原理图打印版文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

电子秤原理及电子秤原理图打印版文档格式.docx

《电子秤原理及电子秤原理图打印版文档格式.docx》由会员分享,可在线阅读,更多相关《电子秤原理及电子秤原理图打印版文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

电子秤原理及电子秤原理图打印版文档格式.docx

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();

//初始页面,收银员编号,日期

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];

//商品名单价

4;

i++)s1[i]=shangpin[x][i];

x=qingdan[0][1];

d_change(x);

change(s1);

lcdi_send(0x90);

i++)lcdd_send(s1[i]);

x=qingdan[0][2];

//显示重量

change(s2);

s2[10]=s2[9];

s2[9]='

.'

if(s2[8]==32)s2[8]=0x30;

lcdi_send(0x88);

i++)lcdd_send(s2[i]);

x=qingdan[0][3];

change(s3);

lcdi_send(0x98);

i++)lcdd_send(s3[i]);

//以上为第一页

EA=0;

EX0=0;

//关键盘中断

for(j=1;

j<

qb;

j++)

{while(key7289);

x=qingdan[j][2];

//显示数据

if(s2[8]==32)s2[8]=0x30;

x=qingdan[j][1];

x=qingdan[j][0];

lcdi_send(0x80);

x=qingdan[j][3];

i++)lcdd_send(0x20);

while(key7289==0);

while(key7289);

d_change(zongjia);

change(s4);

i++)lcdd_send(s4[i]);

i++)lcdd_send(bianhao[i]);

i++)lcdd_send(message5[i]);

i++)lcdd_send(riqi[i]);

list=0;

while(key7289==1);

else{y=0;

/*duilie[2]=duilie[1];

//数字滤波

duilie[1]=duilie[0];

y=ad1();

duilie[0]=y>

>

1;

x=duilie[0];

x=x<

<

x=x+duilie[1]+duilie[2];

*/

zhongliang=ad1();

shizhong=zhongliang-pizhong;

//数据转换

x=danjia[sh];

jine1=shizhong*x;

jine=jine1/1;

d_change(shizhong);

s2[9]='

d_change(danjia[sh]);

i++)s1[i]=shangpin[sh][i];

d_change(jine);

//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;

6;

i++)jiage[i]=0;

break;

//累加

case0xe:

pizhong=zhongliang;

break;

//去皮

case0xd:

{danjia[sh]=0;

}break;

//清单价

case0xc:

{zongjia=0;

jine=0;

qb=0;

pizhong=0;

if(sh==0)danjia[sh]=0;

//总清

case0xa:

dot=1;

//点

case0xb:

list=1;

//清单

case0x19:

sh=10;

case0x18:

sh=9;

case0x17:

sh=8;

case0x16:

sh=7;

case0x15:

sh=6;

case0x14:

sh=5;

case0x13:

sh=4;

case0x12:

sh=3;

case0x11:

sh=2;

case0x10:

sh=1;

case0x1f:

case0x1e:

case0x1d:

case0x1c:

case0x1a:

case0x1b:

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];

//等待键盘松开

/*

voidad(void)interrupt2using1

{shortx,y;

x=ad_244;

y=x;

if(x&

0x80)baojing();

elsex=x>

y=y&

0xf;

bcd[x]=y;

}*/

//初始页面

voidini()//输入收银员编号,日期

charX;

//提示输入收银员编号

i=0;

while(message1[i])lcdd_send(message1[i++]);

for(i=8;

12;

i++)

{

bianhao[i]=X+0x30;

lcdi_send(0x93);

for(j=8;

j++)lcdd_send(bianhao[j]);

//提示输入日期

while(message2[i])lcdd_send(message2[i++]);

10;

i++)//输入日期

{if(i==4||i==7)i++;

riqi[i]=X+0x30;

j=0;

lcdi_send(0x9a);

for(j=0;

j++)lcdd_send(riqi[j]);

nop1();

//LCD子程序

voidini_lcd()//LCD初始化子程序

lcdi_send(0x30);

lcdi_send(0xc);

lcdi_send(0x2);

//光标右移,AC+1

voidlcdd_send(shortX)//LCD发送数据子程序

{chk_busy();

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发送指令子程序

lcd_di=0;

voidchk_busy()

{shorti=0xff;

while(i&

0x80)

{lcd_di=0;

lcd_rw=1;

i=P0;

voidini_7289()

{shorti;

key7289=1;

dio7289=1;

//7289初始化子程序

50;

//延时25ms

send7289(0xa4);

cs7289=1;

voidsend7289(shortX)//7289发送数据子程序

{shorti,j=1;

cs7289=0;

//延时50us

for(i=7;

i>

=0;

i--)

{j=j<

i;

dio7289=X&

j;

j=1;

clk7289=1;

dealy++);

//延时10us

clk7289=0;

dio7289=0;

shortreceive()//7289接收数据子程序

{shorti,X=0;

dio7289=1;

=7;

{clk7289=1;

X=X<

if(dio7289)X++;

return(X);

//ad

//AD子程序

intad1()

{shortk,x;

intad_zhi=0,xz;

ad_start=1;

for(k=0;

k<

k++)

{while(ad_stb);

x=x&

ad_zhi=ad_zhi*10+x;

ad_start=0;

ad_zhi=ad_zhi>

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()

{baoj=0;

baoj=1;

摘要

本系统采用单片机AT89S52为控制核心,实现电子秤的基本控制功能。

系统的硬件部分包括最小系统板,数据采集、人机交互界面三大部分。

最小系统部分主要是扩展了外部数据存储器,数据采集部分由压力传感器、信号的前级处理和A/D转换部分组成。

人机界面部分为键盘输入,128

64点阵式液晶显示,可以直观的显示中文,使用方便。

软件部分应用单片机C语言实现了本设计的全部控制功能,包括基本的称重功能,和发挥部分的显示购物清单的功能,可以设置日期和重新设定10种商品的单价,具有超重报警功能,由于系统资源丰富,还可以方便的扩展其应用

第一部分:

方案论证与比较

一、控制器部分

本系统基于51系列单片机来实现,因为系统需要大量的控制液晶显示和键盘。

不宜采用大规模可编程逻辑器件:

CPLD、FPGA来实现。

(因为大规模可编程逻辑器件一般是使用状态机方式来实现,即所解决的问题都是规则的有限状态转换问题。

本系统状态较多,难度较大。

)另外系统没有其它高标准的要求,我们最终选择了AT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1