单片机课程设计电子秤Word文档格式.docx

上传人:b****3 文档编号:17005280 上传时间:2022-11-27 格式:DOCX 页数:19 大小:537.86KB
下载 相关 举报
单片机课程设计电子秤Word文档格式.docx_第1页
第1页 / 共19页
单片机课程设计电子秤Word文档格式.docx_第2页
第2页 / 共19页
单片机课程设计电子秤Word文档格式.docx_第3页
第3页 / 共19页
单片机课程设计电子秤Word文档格式.docx_第4页
第4页 / 共19页
单片机课程设计电子秤Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机课程设计电子秤Word文档格式.docx

《单片机课程设计电子秤Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子秤Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

单片机课程设计电子秤Word文档格式.docx

接通电源时,数字电子秤进入欢迎界面“欢迎使用电子秤设计·

·

”。

数字电子秤上MCU开始工作,键盘不断进行扫描,同时通过ADC0832也不断进行外部称量数据采样,LCD上显示“实用电子秤名称单价·

当载物台上放有物体时,ADC0832立即将数据收集送给单片机处理。

在键盘输入对应商品的代码编号,在240*128的LCD上可以看到相应商品的名称,单价,总重,总价格等信息。

在称量的过程中,一旦物体自身的重量超出电子秤的称量范围,蜂鸣器立即会发出“滴滴·

”警报声告诉工作人员,所称量物品超重。

4硬件电路设计

整体电路图

数字电子秤采用AT89C51单片机作为微处理器,接口电路由晶振、LM4229显示电路、4*4按键电路、ADC0832电路、报警电路、存储器等组成。

控制器系统的硬件电路如图所示。

控制器系统硬件电路的工作过程是:

打开电源时,MCU及各个部分电路开始工作,MCU调用内部存储数据对各部分接口电路初始化。

200ms后LM4229进入欢迎界面,ADC0832不断对外部数据进行采样交给MCU进行处理,一旦有物品放入载物台,ADC0832立即发送中断请求,并将本次采集数据交给MCU处理,之后LM4229显示相应数据量。

在此过程中,键盘也在不断进行扫描,一旦有键按下,单片机也会对其数据进行相应处理,然后将对LM4229进行写操作。

图?

实用数字电子称的硬件电路图

压力传感器

本设计要求称量不超过5KG,误差不大于0.001KG。

考虑到秤台自重、振动和冲击分量,还要避免超重损坏传感器,所以传感器量程必须大于额定称重—。

我们选择的是L-PSIII型传感器,量程20Kg,精度为%,满量程时误差±

0.002Kg,可以满足本系统的精度要求。

其原理如图所示。

传感器电路工作原理

称重传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,输出信号电压可由下式给出:

数模转换系统

首先考虑用常用的模数转换芯片adc0809,由于本设计只需采集一路数据,adc0809为并行的8路数据采集芯片,且接线较复杂,因此考虑采用串行的AD转换芯片adc0832完成设计。

ADC0832与MCS-51单片机接口构成了串行的8位通道。

微处理器通过软件写入3位串行控制命令决定ADC0832的工作方式。

CH0单端输入,输入范围0-5V。

非调整误差为±

1LSB。

电路仅使用微处理器的两根控制线,两根数据线可方便进行光电隔离增强抗干扰能力。

适用于智能化信号检测仪器、仪表。

键盘显示电路的设计

本设计中采用4*4矩阵是键盘,又称行列式键盘。

它有4条I/O线作为行线,用4条作为列线。

用AT89S51的并行口P1接4×

4矩阵键盘,行线接口,列线接口。

在行线与列线每一个交叉点设置一个键,键盘设置了“0~15”个按键,其中的“0”键表示取消,其他键代表可供选择商品品种及价格。

液晶显示器电路的设计

LM4229通过CDWRITEREAD三个引脚的电平来确定是读数据还是读状态,或者是写数据还是写命令。

数据D0-D7连接到单片机的P0口,可以和单片机进行直接的数据交换,P2口为液晶显示的控制端。

5软件设计

本设计中的程序由主控制程序、LM4229液晶显示驱动程序、ADC0832采样程序和4*4键盘程序组成。

主控制程序

整个设计中采用由下向上的设计思路。

主程序中主要完成对LCM4229、ADC0832、及键盘扫描程序的调用。

在编写程序的过程中,各变量统一采用全局变量方式命名,同时考虑到电子秤对精度的要求,本设计中的价格及总量相关的变量全部采用浮点数。

主程序流程图如图所示。

图主程序流程图

LM4229液晶显示驱动程序

write_data(place&

0xff);

89CEX文件导入到AT89C51中,可在Proteus中单击全速仿真运行按钮,进行现象的查看,能清楚地观察到芯片上每一个引脚的电平变化,红色代表高电平,蓝色代表低电平。

实用电子秤初始化仿真

导入文件以后,进入仿真页面,先按开始,此时数字电子秤进入欢迎界面。

LM4229上显示"

欢迎使用电子秤·

"

图实用电子秤初始化仿真图

实用电子秤进入称重界面仿真

接下来调节压力传感模拟电路电压,将电压设为表示此时载物台上没有物体。

此时LM4229切换到称量画面,显示指示“实用电子秤单价:

元/千克总重量:

0.000千克总价:

元”。

如图所示

图实用电子秤进入称重界面仿真图

实用电子秤模拟商品选择及最大称量仿真

然后,上调压力传感电压表示已载有商品,同时按下“6”号键,表示选择6号商品“苹果”。

此时LM4229上显示“名称:

苹果单价:

3.496千克总价:

“元”(实际*=元)。

达到基本要求。

图模拟商品选择验证性称量仿真图

最后,上调压力传感电压使载重达到最大,同时按下“5”号键,表示选择5号商品“西瓜”。

液晶显示“名称:

西瓜单价:

4.980千克总价:

“元”.达到基本要求,最大称量重量4.980KG,如图。

图实用电子秤模拟商品最大称量仿真图

7使用说明

利用51系列单片机设计的电子秤不但可以满足并解决现实生活中提出的“快速、准确、连续、自动”称量要求,同时有效地避免人为误差。

当载物台上放有物体时,在键盘输入对应商品的代码编号,LCD液晶上可以看到相应商品的名称,单价,总重,总价格等信息。

在称量的过程中,一旦物体自身的重量超出电子秤的称量范围,蜂鸣器立即警报,告诉工作人员,所称量物品超重。

在称量过程中还可以通过键盘选择商品不同的价位。

8设计总结

这次课程设计是对前面所学知识非常系统全面的一次检验。

通过这次课程设计与仿真,让我更明确的了解了一些芯片的用途功能,也熟练了对它们的运用。

在这个设计的过程中,我需要不断地思考,不断地请教,不断地寻找资料以借鉴,不断的用对知识的深入掌握去解决设计中存在的一些问题和调试时出现的一些故障。

虽然说这样的设计很难很烦很累人,但是确实是充实的,是让人感到有意义的。

这次课程设计,不但让我了解了一个数字电子秤,更让我收获了专业知识以外的东西,那就是学会了坚信、坚持,同时也磨砺了我的意志和耐心。

真的,作为一个本来对这个专业不是很感兴趣的学生,让我收获了一份从来没有过的成就感。

虽然到现在我对这个设计的部分原理还是不能用很专业的语言讲述出来,但是当我最初做成功这个设计的时候,我有一种说不出的激动,我写下一句话:

“人很怪,上天给予每个人的都是公平的,没有谁没能力去做事,只是在于那个人愿不愿意去做,敢不敢去做,能不能坚持去做!

”是的,这就是我这次课程设计之后最大的收获!

虽然对这个专业依旧不是很感兴趣,但是我还是想通过这份设计报告来建议老师,希望以后能多搞一些像这样很实际的实践课程,我们作为学生,的确需要好的成绩,但更需要用这种对知识非常全面统一的检验来考察自己,证明自己,坚持自己。

参考文献

[1]郭天祥.51单片机C语言教程[M].北京:

电子工业出版社,2009:

342-354.

[2]李建忠.单片机原理及应用[M].西安:

西安电子科技大学出版,2002:

63-80.

[3]张俊谟.单片机中级教程[M].北京:

北京航空航天大学出版,2000:

36-44.

[4]陈东云,杜敬仓.单片机原理与开发指导[M].北京:

机械工业出版社,2006:

122-156.

[5]彭伟.单片机C语言程序设计实训100例[M].北京:

160-167.

附录A:

#include<

>

#include<

#defineucharunsignedchar

#defineuintunsignedint

sbitADCS=P3^5;

sbitADDI=P3^7;

sbitADDO=P3^7;

sbitADCLK=P3^6;

uintx1,y1,z1=0,w1;

ucharad_data,k,n,m,e,num,s;

//采样值存储

uinttemp1;

sbitbeep=P3^0;

charpress_data;

//标度变换存储单元

floatpress;

unsignedcharad_alarm,temp;

//报警值存储单元

unsignedcharabc[5]={48,46,48,48,48};

unsignedcharprice_all[6]={48,48,46,48,48,48};

floatprice_unit[10]={,,,,,,,,,0};

//商品初始单价

ucharprice_danjia[5]={48,46,48,48,48};

floatprice;

uintprice_temp1,price_temp2;

//商品总价

ucharAdc0832(unsignedcharchannel);

voidalarm(void);

voiddata_pro(void);

voiddelay(uintk);

voidkeyscan();

voiddisp_init();

voidprice_jisuan();

/************

主函数

************/

voidmain(void)

{

delay(500);

//系统延时500ms启动

//ad_data=0;

//采样值存储单元初始化为0

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

alarm();

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,"

设计学生:

0712201-23王超"

}

}

读ADC0832函数

//采集并返回

ucharAdc0832(unsignedcharchannel)//AD转换,返回结果

{

uchari=0;

ucharj;

uintdat=0;

ucharndat=0;

if(channel==0)channel=2;

if(channel==1)channel=3;

ADDI=1;

_nop_();

ADCS=0;

//拉低CS端

ADCLK=1;

//拉高CLK端

ADCLK=0;

//拉低CLK端,形成下降沿1

ADDI=channel&

0x1;

//拉低CLK端,形成下降沿2

ADDI=(channel>

1)&

//拉低CLK端,形成下降沿3

//控制命令结束

dat=0;

for(i=0;

i<

8;

i++)

dat|=ADDO;

//收数据

//形成一次时钟脉冲

dat<

<

=1;

if(i==7)dat|=ADDO;

}

j=0;

j=j|ADDO;

j=j<

7;

ndat=ndat|j;

if(i<

7)ndat>

ADCS=1;

//拉搞CS端

//拉低CLK端

ADDO=1;

//拉高数据端,回到初始状态

=8;

dat|=ndat;

return(dat);

//returnadk

voiddata_pro(void)

unsignedint;

if(0<

ad_data<

256)

{

intvary=ad_data;

press=*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;

//取压力值十分位

}

/*****************报警子函数*******************/

voidalarm(void)

if(ad_data>

=256)

beep=0;

//则启动报警

else

beep=1;

voiddelay(uintk)

uinti,j;

k;

for(j=0;

j<

100;

j++);

}

//开机欢迎界面

voiddisp_init()

欢迎使用电子秤"

write_lcd(16,0,"

write_lcd(28,0,"

王超"

write_lcd(44,0,"

班级学号:

0712201-23"

write_lcd(84,0,"

指导老师:

谭跃"

write_lcd(100,0,"

设计日期:

2010年6月29日"

//键盘服务程序

voidkeyscan()

P1=0xfe;

temp=P1;

temp=temp&

0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P1;

temp=temp&

while(temp!

{

temp=P1;

switch(temp)

{

case0xee:

num=1,price=price_unit[0],write_lcd(24,0,"

名称:

杏仁"

break;

case0xde:

num=2,price=price_unit[1],write_lcd(24,0,"

李子"

case0xbe:

num=3,price=price_unit[2],write_lcd(24,0,"

草莓"

case0x7e:

num=4,price=price_unit[3],write_lcd(24,0,"

葡萄"

}

{

temp=P1;

temp=temp&

}

}

P1=0xfd;

case0xed:

num=5,price=price_unit[4],write_lcd(24,0,"

西瓜"

case0xdd:

num=6,price=price_unit[5],write_lcd(24,0,"

苹果"

case0xbd:

num=7,price=price_unit[6],write_lcd(24,0,"

雪梨"

case0x7d:

num=8,price=price_unit[7],write_lcd(24,0,"

核桃"

P1=0xfb;

case0xeb:

num=9,price=price_unit[8],write_lcd(24,0,"

香蕉"

case0xdb:

num=10,price=price_unit[9],write_lcd(24,0,"

商品代码"

case0xbb:

num=11,price=price_unit[1];

case0x7b:

num=12,price=price_unit[2];

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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