北邮小学期电子秤实验报告.docx
《北邮小学期电子秤实验报告.docx》由会员分享,可在线阅读,更多相关《北邮小学期电子秤实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
北邮小学期电子秤实验报告
2015年小学期单片机设计实验报告
题目:
计价电子秤
班级:
20
班内序号:
实验组号:
学生姓名:
指导教师:
期中检查
教师评语
指导教师签字:
年月日
计价电子秤
——2013211119班曾霜霜
实验摘要
本次我们制作的是基于压力传感器的既可显示重物质量又可输入单价计算总价的计价电子秤。
整个系统中,微控制器采用了Microchip公司的PIC16F877A,软件设计中涉及PORTA0作为模拟量输入端;用PORTB作为数字量输入端,连接键盘输入重物的单价;PORTA1-3作为数字输出端口连接液晶屏使能端,PORTC作为数字输出端口连接液晶屏,最终显示重物的种类,单价和总价。
概括的说,本实验是通过压力传感器形变后产生的模拟信号经过数模转换、量化、显示获得重物质量,然后输入单价后进行乘法运算的过程。
Abstract
Inthisexperiment,wemadeadenominatedelectronicscalebasedonthepressuresensor,whichcanautomaticallydisplaytheweightoftheheavy,inputtheunitpriceandevencalculatethetotalpriceoftheheavy.Throughoutthesystem,theproductionoftheMicrochipcord--PIC16F877Aisusedasthemicrocontroller.SoftwaredesigninvolvesPORTA0assimulationinputport,theanalogsignaltothemicrocontrolleranddigitaltoanalogconversion,asadigitalenableoutputporttocontrolthescreenwithPORTA1-PORTA3,usingPORTBasthedigitalinputport,connectthe4*4keyboardinputweightunit,PORTCasthedigitaloutputportisconnectedwiththeLCDscreen,displaytheweightcategories,unitpriceandtotalvalue.
Insummary,thisexperimentwascarriedoutbytheanalogsignalgeneratedbythepressuresensordeformationafterdigitaltoanalogconversion,quantizationtogettheweightdisplayquality,andthenentertheunitpriceafterthemultiplicationprocess.
关键字
单片机——microcontroller芯片——CMOSchip计价——pricecalculating
压力传感器——pressuresensor模数转换——analog-digitalconversion
一.实验论证与比较
1.压力传感器模块
1.1设计思想
压力传感器是本实验的核心部分。
压力传感器利用形变先将压力信号转化为模拟电信号输出到单片机,再由单片机自身的A\D转换功能将其转化为数字电信号,从而显示出重物的质量。
1.2具体实现
1.2.1压力传感器
此次选用的是外购的电阻应变式压力传感器,电源电压为5V。
使用时,将压力传感器一端固定在万用板上,将重物放在它的另一端,使压力传感器内部的电阻应变片发生形变,从而改变压力传感器的电阻大小,进而改变通过压力传感器的电流大小,获得随重物质量而改变的模拟电信号。
1.2.2差分放大电路
由于压力传感器输出电压过小,为mV级,于是增加了差分放大电路来将输出电压放大到V级,该电路由一个LM324作为差分放大装置,需用±12V的直流电作为驱动,最终放大后的模拟信号从LM324的8管脚传送到PIC16F877A的RA0端口进行模数转换。
此外,该电路通过一个1M的电位计对电源电压进行分压以达到调零的目的,另有一个1K的电位计通过调整LM324的放大倍数以达到压力传感器的校准功能。
1.2.3数模转换及量化
经单片机A\D转换后,0~5V的模拟电信号被量化成了0~255的八位二进制数。
对应电子秤的量程5.000kg,将5000分成256份,于是分度值取20g.
2.键盘模块
2.1设计思想
矩阵键盘的操作分为两个部分:
一是检测是否有键被按下;二是识别被按下的键是哪一只。
我们采用“反转扫描法”同时实现上述两个部分。
基本思想是:
先让行线全部输出逻辑0,接着读取列线,得到与按键横向位置对应的4位列码。
如果有键被按下,对应的列线必然会读回逻辑0,;若无键按下,则读取的列码必定为全1。
当有键按下时,将从列线上读取的列码,再从列线输出,然后再读取行线,得到与按键纵向位置对应的4位行码。
最后,将先后两次读到的行码和列码组合到一起,构成可以准确确定按键位置的位置码。
2.2具体实现
我们利用小键盘的0~9以及A、B这12个按键。
数字按键用来输入单价,键A和键B两个按键分别用来清除已输入的单价和确定已输入的单价。
键盘工作的原理是先将键盘所用的按键每个赋予一个键位码,存在从40H开始的连续地址单元中。
在无按键按下时,键盘输出低电平,而当有按键按下时,对应的输出对应高电平。
利用取反扫描法,检测键盘是否有按键按下,一旦有按键按下,查找其键位码对应的地址,利用间接寻址法,减去40H即可获得输入的按键,再转而输入到LCD上。
3.液晶显示屏模块
3.1程序设计思想
通常所说的12864LCD显示块是所说的点阵液晶显示模块,就是由128*64个液晶显示点组成的一个128列*64行的阵列,所以也就叫成了12864。
每个显示点都对应着有一位二进制数,0表示灭,1表示亮。
存储这些点阵信息的RAM被称为显示数据存储器。
如果要显示某个图形或汉字就是将相应的点阵信息写入到对应的存储单元中。
图形或汉字的点阵信息是由自己设计,这时候问题的关键是显示点在液晶屏上的位置与其在存储器中的地址之间的关系。
3.2具体实现
本实验采用128*64LCD显示屏显示重物的重量、单价、以及计算后的总价。
RS,R/W,E分别为命令数据选择控制端口,读写控制端口,使能控制端口,将这三个管脚分别连接到单片机的端口PORTA1-PORTA3,从而实现单片机对LCD12864的控制,并口数据DB0-DB7连接到单片机的PORTC0-PORTC7口,实现相互通信。
二.系统总体设计框图
系统模块总体框图如下:
三.软件设计介绍
1.A\D转换及量化
由于压力传感器输出的是模拟信号,需要通过单片机自身的ADC模块将其转换成数字信号。
在开始A\D转换前,选取PORTA0为模拟输入通道。
只有当模拟信号采集过程完成之后,A\D转换才能开始。
获取到数字信号后,再进行量化进行BCD码存储。
1.1流程图
1.2代码分析
1.2.1数模转换部分
ADtrans
NOP
NOP
BSFADCON0,GO;开始A\D\转换,在A\D转换后,ADIF位被置1
ADWAIT
BTFSCADCON0,GO;等待A\D转换过程结束
GOTOADWAIT;如果没有转换完毕,则返回继续检测
MOVFADRESH,W;如果转换完毕,则把A\D结果读到W
MOVWFRESULT;将A\D转换的结果用一个字节存起来
CALLBCD;进行量化
1.2.2量化部分
BCD
CLRFBAI
CLRFSHI
CLRFGE;三位数量化准备
MOVFRESULT,F
SKPNZ;RESULT不为0,则跳到QIUBAI
RETURN
QIUBAI
MOVLWD'100';对百位进行量化
SUBWFRESULT,0
BTFSSSTATUS,C;判断量化是否完成
GOTOQIUSHI;已完成则量化十位
MOVWFRESULT
INCFBAI;百位加一
GOTOQIUBAI;量化十位以及个位同理
QIUSHI
MOVLWD'10'
SUBWFRESULT,0
BTFSSSTATUS,C
GOTOQIUGE
MOVWFRESULT
INCFSHI
GOTOQIUSHI
QIUGE
MOVFRESULT,0
MOVWFGE
RETURN
2.键盘输入模块框图
系统默认输入的单价为0~99之间的整数(即两位整数),当输入单价后,按A键可清除之前输入的数字,按B键则为确认,表示输入单价结束。
2.1流程图
2.2代码分析
;-------------------------------检查输入------------------------------
CHECK
CALLKEYSCAN
COMFVALUE,0;位置码取反送W
BTFSCSTATUS,2;测试有按键按下否?
有,跳过下条指令
GOTOCHECK
CALLDELAY1
CALLKEYSCAN
COMFVALUE,0
BTFSCSTATUS,2
GOTOCHECK
CALLTRANSLATE;有按键按下,调用键值翻译子程序
RETURN
;------------------------扫描键盘和按键识别子程序-------------------------
有按键按下时寄存器VALUE=按键位置码;无按键按下时VALUE=0FFH
KEYSCAN
BCFSTATUS,RP1
BSFSTATUS,RP0
BCFOPTION_REG,7;启动B口上拉电阻
MOVLW0FH
MOVWFTRISB;将端口B设为高4位输出,低4位输入
BCFSTATUS,RP0;
MOVLW00H;行线全部输出0(高4位)
MOVWFPORTB
NOP
NOP
MOVFPORTB,0
ANDLW0FH
MOVWFVALUE
XORLW0FH;列码是否全为1?
BTFSCSTATUS,Z
GOTONOKEY;是,无按键按下
BSFSTATUS,RP0
MOVLW0F0H
MOVWFTRISB;将端口B设为高4位输入,低4位输出
BCFSTATUS,RP0
MOVFVALUE,0
MOVWFPORTB
NOP
NOP
MOVFPORTB,0
ANDLW0F0H;屏蔽掉低4位
IORWFVALUE,1;行码和列码组合起来并放入VALUE
RETURN
NOKEY
MOVLW0FFH
MOVWFVALUE
RETURN
;------------------------扫描键盘和按键识别子程序-------------------------
有按键按下时寄存器VALUE=按键位置码;无按键按下时VALUE=0FFH
KEYSCAN
BCFSTATUS,RP1
BSFSTATUS,RP0
BCFOPTION_REG,7;启动B口上拉电阻
MOVLW0FH
MOVWFTRISB;将端口B设为高4位输出,低4位输入
BCFSTATUS,RP0;
MOVLW00H;行线全部输出0(高4位)
MOVWFPORTB
NOP
NOP
MOVFPORTB,0
ANDLW0FH
MOVWFVALUE
XORLW0FH;列码是否全为1?
BTFSCSTATUS,Z
GOTONOKEY;是,无按键按下
BSFSTATUS,RP0
MOVLW0F0H
MOVWFTRISB;将端口B设为高4位输入,低4位输出
BCFSTATUS,RP0
MOVFVALUE,0
MOVWFPORTB
NOP
NOP
MOVFPORTB,0
ANDLW0F0H;屏蔽掉低4位
IORWFVALUE,1;行码和列码组合起来并放入VALUE
RETURN
NOKEY
MOVLW0FFH
MOVWFVALUE
RETURN
;------------------------将键盘位置码翻译成对应的数字-------------------
TRANSLATE
MOVLW40H;地址指针FSR设置表头地址
MOVWFFSR;通过寻址访问存放对应字符的码表
LOOPT1
MOVF0,0
XORWFVALUE,0
BTFSCSTATUS,2
GOTOLOOPT2
INCFFSR,1
BTFSSFSR,4
GOTOLOOPT1
RETURN
LOOPT2
BCFFSR,6
RETURN
3.计价功能模块
3.1关键思想阐述
计价功能的实现,是软件设计的关键。
此过程涉及到的关键量包括量化后的重物的质量、键盘输入的单价以及最后输出在显示屏的总价。
其间关键的算法就是乘法计算。
对于重物的质量,获得的是5.000以内的小数,在此做去小数点处理,即为四位整数,转成BCD码后用四个地址分别存储四位。
对于输入的单价,先将输入的数码转成对应的数值,然后和重物的质量进行乘法计算获取总价。
3.2流程图
3.2.1总价计算
3.2.2乘法运算
数字都是通过BCD码的形式逐位存储的。
由于本实验最多只会涉及四位数和两位数的乘法计算,故所有乘法计算都是通过循环累加来实现的。
3.3代码分析
;-----------------------------------BCD量化----------------------------------
ZHUAN
MOVLW.19;分度值为20
MOVWFMULTI2
;19次累加完成*20的整数乘法运算
B2;逐位累加的过程
MOVFGE,0
ADDWFGE2,0
MOVWFGE2
MOVLW.10
SUBWFGE2,0
BTFSCSTATUS,C
CALLGEJINYI
MOVFSHI,0
ADDWFSHI2,0
MOVWFSHI2
MOVLW.10
SUBWFSHI2,0
BTFSCSTATUS,C
CALLSHIJINYI
MOVFBAI,0
ADDWFBAI2,0
MOVWFBAI2
MOVLW.10
SUBWFBAI2,0
BTFSCSTATUS,C
CALLBAIJINYI
MOVFQIAN,0
ADDWFQIAN2,1
DECFSZMULTI2,1
GOTOB2
RETURN
;----------------------------------进位处理------------------------------------
GEJINYI
MOVWFGE2
INCFSHI2
RETURN
SHIJINYI
MOVWFSHI2
INCFBAI2
RETURN
BAIJINYI
MOVWFBAI2
INCFQIAN2
RETURN
(算总价的乘法运算与称重部分的同理,在此不再赘述)
4.LCD液晶显示模块
4.1流程图
4.2代码分析
;-------------------------------------初始化LCD-------------------------------------
INITIALLCD
;调用延时,刚上电LCD复位不一定有PIC(196MS)
CALLDELAY
;清屏命令,数据指针清零,所有显示清零
MOVLW01H
MOVWFPORTC
;调用写命令程序
CALLENABLE
MOVLW38H
MOVWFPORTC
CALLENABLE
MOVLW0CH
MOVWFPORTC
CALLENABLE
MOVLW06H
MOVWFPORTC
CALLENABLE
RETURN
;---------------------------------显示要求输入的信息---------------------------------
SHOWREQUEST
MOVLW80H
MOVWFPORTC
CALLENABLE
CALLWRITE
MOVLW90H
MOVWFPORTC
CALLENABLE
CALLWRITE1
MOVLW88H
MOVWFPORTC
CALLENABLE
CALLWRITE2
MOVLW98H
MOVWFPORTC
CALLENABLE
CALLWRITE3
RETURN
;------------------------------------显示欢迎界面----------------------------------
WELCOME
MOVLW91H
MOVWFPORTC
CALLENABLE
CALLWRITE11
MOVLW89H
MOVWFPORTC
CALLENABLE
CALLWRITE22
RETURN
;--------------------------------------显示第三行----------------------------------
WRITE3
CLRFCOUNT
WRITE3_A
MOVFCOUNT,W
BSFPCLATH,4
CALLT3
BCFPCLATH,4
MOVWFTMP1;送暂存器
INCFCOUNT,1;偏移地址加1
MOVFTMP1,W
;判断是否显示完所有数据(约定表格做后一个00H做为结束标志)
XORLW00H
BTFSCSTATUS,Z
GOTOET3;全部显示完成
MOVFTMP1,W
BSFPCLATH,3
BSFPCLATH,4
;没有显示完,把当前查表所得数据送LCD显示
CALLSEND_INSGOTOWRITE3_A;调用显示程序
ET3
NOP
RETURN;子程序返回
四.硬件系统设计
1.系统总体设计
1.1管脚分布图
1.2系统总体连接
1.3硬件设计电路连接图
2.压力传感器模块
2.1压力传感器与单片机的连接问题
压力传感器内部有电阻应变片,其阻值大小会随形变大小而改变,从而产生随压力而变的电信号,再通过差分放大电路放大电信号。
因此,压力传感器输出的是模拟信号。
想要能够得到数字信号,必须利用PIC16F877A自身的RA端口所带的模数转换功能。
经过查阅,决定选取PORTA0为模拟端口。
另外在接PORTA0之前必须接一个分压电路,来决定模拟信号的分度值,使输出的数字信号能在想要的范围内。
2.2差分放大电路图
3.LCD液晶显示模块
2.1液晶显示模块
液晶显示模块由LCD板(液晶显示板),PCB板(印刷电路板)和控制驱动电路三部分组成。
2.2与单片机的连接
LCD显示屏与单片机的连接较为复杂,使用时,1、15、20管脚均接地;2、17、19管脚接电源电压,4、5、6管脚分别接RA1~RA3,7~14管脚分别接RC0~RC7;3管脚用来调节液晶屏亮度,需要在3端口接两个电阻分别接电源和地进行分压,在实际操作时先用电位计调节到合适阻值后用定值电阻代替,最后选取接电源和接地的电阻分别为6.8kΩ和3.3kΩ。
具体连接图如下:
4.键盘模块
4.1键盘行列键值的确定
当无键按下时,各行线和各列线相互断开,各列线保持高电平,当有键按下时,则相应的行线和列线相连,识别是哪一个键被按下,通常用行扫描法,即依次对每一行进行扫描,先使被扫描的行为低电平,其它所有的行均为高电平,接着检测各列线的状态(称为列码)。
若各列均为高电平,则所按的键不在此行,继续扫描下一行,若列线不全为高电平,则被按的键在此行。
根据行码和列码,就可知被按的键的坐标值(又称位置码),根据位置码通过查表就可得到它的键值。
4.2与单片机的连接图
五.调试过程
本实验是由小组成员分工合作完成的。
无论是分块编写还是整合后的整体运行,都伴随着不断地调试。
在调试的过程中,虽然遇到了许多的问题,但是也正是这些解决问题的过程,加深了我们对于单片机各模块以及汇编语言的连接。
下面列举出一些在调试过程中所遇到的问题。
1.LCD液晶显示屏的显示问题
1.1时延不一致导致的冲突
LCD显示屏上电复位需要时间,但是未等到显示屏复位完成单片机就将下一指令传输给LCD屏幕,那么LCD液晶屏就会显示乱码。
起初,面对此问题我们毫无头绪,多次单步调试都能正常显示,然而运行却会出现乱码。
因为单步调试的过程中或有充足的时延,并不会引起冲突。
我们在图书馆里借的书中有对于LCD液晶屏的介绍,了解到液晶屏上电复位的属性之后,就在程序中添加一个196ms时延,从而解决了冲突的问题,屏幕能够正常显示。
1.2按键后显示屏显示乱码
由于实验中涉及到键盘输入显示数字的部分,期间出现了很多问题。
起初,由于是直接参考课外书中关于LCD液晶屏控制的代码,并没有搞懂代码的意义,尤其是对于使能端的控制,错误的“搬运”