带LCD显示的电子秤.docx
- 文档编号:24206672
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:17
- 大小:760.09KB
带LCD显示的电子秤.docx
《带LCD显示的电子秤.docx》由会员分享,可在线阅读,更多相关《带LCD显示的电子秤.docx(17页珍藏版)》请在冰豆网上搜索。
带LCD显示的电子秤
浙江海洋学院
设计题目带LCD显示的电子秤
年级专业
目录
1.引言(字体4号,黑体,居中)3
2.方案设计(字体4号,黑体,居中)3
2.1.设计要求(字体小4号,黑体)3
2.2.设计方案(字体小4号,黑体)4
3.硬件设计(字体4号,黑体,居中)4
3.1.单片机最小系统4
3.2.显示驱动部分5
3.3.按键部分6
4.软件设计(字体4号,黑体,居中)7
4.1.子程序模块7
5.实验结果与讨论(或实验仿真与讨论)12
5.1.结果讨论12
5.2.实物图12
6.心得体会13
7.附录A;源程序(字体4号,黑体,居中)15
8.附录B;AD芯片和单片机的通信波形17
带LCD显示的电子秤
引言
质量是测量领域中的一个重要参数,称重技术自古以来就被人们所重视。
公元前,人们为了对货物交换量进行估计,起初采用木材或陶土制作的容器对交换货物进行计量。
以后,又采用简单的秤来测定质量。
据考证,世界上最古老的计量器具出土于中东和埃及,最古老的衡器和砝码出自于埃及。
秤是最普遍、最普及的计量设备,电子秤取代机械秤是科学技术发展的必然规律。
低成本、高智能化的电子秤无疑具有极其广阔的市场前景。
21世纪,电子产品变得越来越丰富,给人们带来了很多很多的方便,其中电子秤成了人们生活中不可缺少的一部分。
大大小小的市场电子秤能够完成许多工作,为人们节省了时间,提高了工作效率。
利用MC9S12XS128MAL和质量传感器就能设计出一款简单实用的电子秤。
方案设计
设计要求
按系统要实现功能,设计必须达到以下的几个步骤的要求
(1)测量量程为5kg。
(2)“确定”按钮后,lCD显示结果例如“4.15kg”,若超则“ERROR”。
(3)有清零按钮
2、发挥部分
(1)有键盘输入价格并在LCD上显示,按钮确认后称重
(2)称重数据实时显示,按钮确认后,显示结果
例如“P:
2.00W:
5.00kg”
Total:
10.00
设计方案
2.1.1单片机芯片的选择
本设计选用MC9S12XS128单片机,MC9S12XS128是16位单片机,由16位中央处理单元(CPU12X)、128KB程序Flash(P-lash)、8KB RAM、8KB数据Flash(D-lash)组成片内存储器。
主要功能模块包括:
内部存储器 内部PLL锁相环模块 2个异步串口通讯 SCI 1个串行外设接口 SPI MSCAN 模块
1个8通道输入/输出比较定时器模块 TIM 周期中断定时器模块 PIT 16通道A/D转换模块 ADC 1个8通道脉冲宽度调制模块 PWM 输入/输出数字I/O口
2.1.2总体设计及系统原理
LCD显示电子秤的整体设计较简单,包括单片机、传感器、自动复位电路、键盘电路、显示电路、驱动与指示电路。
在确定系统的大体形式之后,画出本系统的总体结构布局,电路原理如图2-1所示
显示器用的是诺基亚5110LCD,该显示器模块具有以下特点:
84x48 的点阵LCD,可以显示4 行汉字,
●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9 条。
支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。
●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。
●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。
●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。
图2-1系统设计
硬件设计
单片机最小系统
单片机最小系统选用MC9S12XS128,包含上电自动复位电路和手动复位电路,可对单片机进行复位操作
显示驱动部分
本设计使用诺基亚5110LCD液晶屏,该液晶屏与其他液晶屏不一样,是通过导电胶链接驱动模块和印刷电路板,而不采用电缆连接。
用模块上的金属钩可将模块固定在印刷电路板上,因而非常便于安装和更换。
另外,LCD控制器/驱动器芯片已绑定到LCD晶片上,是的模块本身就小的体积显得更小巧了。
电路图如下所示。
图3-1显示电路
按键部分
按键设定部分比较简单,因为本系统按键少,所以在设计上采用了独立按键方式,程序的编制上也采用了简单的扫描方式。
按下操作键K3-K8动作如下:
操作键K3:
数据清零;
操作键K4:
单价+1$;
操作键K5:
单价+0.01$;
操作键K6:
单价-1$;
操作键K7:
单价-0.01$;
操作键K8:
启动初始化/去皮。
图3-3按键电路
软件设计
子程序模块
主要控制子程序说明如下:
按键模块:
voidButton_Scan(void)
AD读取模块:
voidRead_AD(void)
显示屏初始化模块:
voidInit_OLED(void)
16位数显模块:
voidOLED_Print_Uint16_Variable(uint8x,uint8y,uint16display,uint8mode)
字符显示模块:
voidOLED_Print(uint8x,uint8y,uint8ch[],uint8mode)
价格显示模块:
voidOLED_Print_yuan_Variable(uint8x,uint8y,uint16display,uint8mode)
实验结果与讨论
结果讨论
本设计以MC9S12XS128MAL单片机为系统的控制核心,由于采用了动态扫描的方式实现对点阵式LED电子显示屏的控制,使系统能够稳定、清晰地显示文字。
实物图
心得体会
单片机是我所学专业的主要课程之一,因此我认为单片机课程设计是十分必要而且十分重要的。
尽管刚刚拿到课程设计题目时有点迷惘,不知道如何着手,但通过上网和图书馆查阅相关资料,自己认真钻研以及虚心询问同学,终于解决了一个又一个的困难和障碍,成功完成了任务。
通过本次的单片机课程设计,不仅大大地丰富了我的理论知识,而且在实践过程中更令我学会了坚持、耐心和努力。
此次单片机课程设计需要运用到许多之前所学过的知识,令我认识到自己以前学习的一些不足之处,例如对以前所学知识的理解不够深刻,掌握得不够牢固,运用不够灵活。
这让我懂得了认真学习的重要性,以及要孜孜不倦地钻研所学过的知识,做得融会贯通,不能一览而过,不求甚解。
在边学习边动手的过程中,我对电子时钟的构造以及原理有了进一步的了解,同时也加深和巩固了我对单片机语言的认识。
除此之外,由于是第一次做单片机,因此在此次课程设计的过程中,无论是电路绘制还是汇编语言编写都难免遇到了不少困难和障碍,例如C语言编写出错、电路元件无从入手等。
在面对困难和障碍时,我庆幸自己没有退缩和逃避,而是通过各种方法,迎难而上,以坚持、耐心和努力勇敢无畏地面对困难,克服困难,解决困难。
让我发现问题、分析问题、解决问题以及动手实践的能力都有了很大的提高,并了解到理论知识与实践相结合的重要意义。
附录A;源程序
源程序代码(主要语句要有注释)。
#include
#include"derivative.h"/*derivative-specificdefinitions*/
#include"oled.h"
#defineADDO_IN()DDRS_DDRS1=0
#defineADDO_OUT()DDRS_DDRS1=1
#defineADDOPTS_PTS1
#defineADSK_OUT()DDRS_DDRS0=1
#defineADSKPTS_PTS0
#ifndefuint8_t
typedefunsignedcharuint8_t;
#endif
#ifndefuint16_t
typedefunsignedintuint16_t;
#endif
longCount,chu,s,jiage,jiage1;
unsignedchara,buttonValue,b;
uint8shuju[8];
uint16_tl=267,zhong,yuan;
voidInit_Button(void)
{
DDRH=0x00;//设置为输入
PERH=0xff;//上下拉使能
PPSH=0x00;//上拉使能,下降沿触发中断
}
voidButton_Scan(void)
{
if(PTH!
=0xff)
{
if(PTH_PTH0==0)
{
Delay_1ms
(2);
if(PTH_PTH0==0)
{
buttonValue=0;
while(!
PTH_PTH0);
}
}
if(PTH_PTH1==0)
{
Delay_1ms
(2);
if(PTH_PTH1==0)
{
buttonValue=1;
while(!
PTH_PTH1);
}
}
if(PTH_PTH2==0)
{
Delay_1ms
(2);
if(PTH_PTH2==0)
{
buttonValue=2;
while(!
PTH_PTH2);
}
}
if(PTH_PTH4==0)
{
Delay_1ms
(2);
if(PTH_PTH4==0)
{
buttonValue=4;
while(!
PTH_PTH4);
}
}
if(PTH_PTH5==0)
{
Delay_1ms
(2);
if(PTH_PTH5==0)
{
buttonValue=5;
while(!
PTH_PTH5);
}
}
if(PTH_PTH6==0)
{
Delay_1ms
(2);
if(PTH_PTH6==0)
{
buttonValue=6;
while(!
PTH_PTH6);
}
}
}
else
{
buttonValue=ERROR;
}
}
voidRead_AD(void)
{
ADDO_OUT();
ADSK_OUT();
ADDO=1;
ADSK=0;
Count=0;
ADDO_IN();
while(ADDO);
for(a=0;a<24;a++){
ADSK=1;
Count=Count<<1;
ADSK=0;
if(ADDO)Count++;
}
ADSK=1;
Count=Count^0x800000;
ADSK=0;
}
voidmain(void){
Init_Button();
Init_OLED();
EnableInterrupts;
for(;;){
Button_Scan();
Read_AD();
if(buttonValue==6)chu=Count;
s=chu-Count;
if((chu-Count)<0)s=0;
s=s/100;
zhong=s*l/100;
if((zhong%10)<5)zhong=zhong/10;
elsezhong=zhong/10+1;
switch(buttonValue)
{
case0:
yuan=0;
break;
case1:
yuan=yuan+100;
if(yuan>1000)yuan=1000;
break;
case2:
yuan=yuan+1;
if(yuan>1000)yuan=1000;
break;
case4:
if(yuan<2)yuan=1;
yuan=yuan-1;
break;
case5:
if(yuan<101)yuan=100;
yuan=yuan-100;
break;
}
jiage=yuan*zhong;
OLED_Print(4,2,"Weight:
",NORMAL_DISPLAY);
OLED_Print_Uint16_Variable(60,2,zhong,NORMAL_DISPLAY);
OLED_Print(100,2,"g",NORMAL_DISPLAY);
OLED_Print_yuan_Variable(60,4,yuan,NORMAL_DISPLAY);
OLED_Print(100,0,"$/g",NORMAL_DISPLAY);
OLED_Print(4,4,"Price:
",NORMAL_DISPLAY);
jiage1=jiage/100;
OLED_Print_Uint16_Variable(60,4,jiage1,NORMAL_DISPLAY);
_FEED_COP();/*feedsthedog*/
}/*loopforever*/
/*pleasemakesurethatyouneverleavemain*/
}
//0.2673
附录B;AD芯片和单片机的通信波形
参考文献
[1]来清明编,传感器与单片机接口及实例[M],北京航天航空大学出版社[J]2008
[2]楼然苗、李光飞编,单片机课程设计指导[M],北京航天航空大学出版社[J]2007
[3]兰吉昌编,51单片机应用设计百例[M],化学工业出版社[J]2009
[4]冯铁成编,单片机应用技术[M],人民邮电出版社2009
[5]网站
[7]网站
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LCD 显示 电子秤