




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 2012211120班6号尹航单片机设计实验报告2012年小学期单片机设计实验报告题目:基于压力传感器的可计算价格电子称班 级: 班内序号: 实验组号: 学生姓名: 指导教师: 期中检查教师评语指导教师签字: 年 月 日基于压力传感器的可计算价格电子称2012211120班 尹航实验摘要 本次我们制作的基于压力传感器的可计算价格电子称除可以称出重物重量外还可以对其输入单价并计算其总价格。整个系统中,微控制器采用了Microchip公司的PIC16F877A,软件设计中涉及PORTA0作为模拟输入端口,将模拟电信号传给单片机并进行数模转换,用PORTA1-PORTA3作为数字输出端口控制显示屏
2、的使能,用PORTB作为数字输入端口,连接4*4键盘输入重物的单价,PORTC作为数字输出端口连接液晶屏,显示重物的种类,单价和总价。 本系统的核心是压力传感器,将其因为压力而产生的模拟电信号传输给PIC16F877A后利用其自身的数模转换功能进行得到重物的重量。Abstract In this experiment, we made a electric scale based on the pressure sensor. It can automatically get the weight of the heavy on it,and calculate the whole price
3、 of the heavy according to the weight and the single price we decided for the heavy.The system uses the production of the Microchip cord-PIC16F877 as the microcontroller. Software design involves PORTA0 as simulation input port, the analog signal to the microcontroller and digital to analog conversi
4、on, as a digital enable output port to control the screen with PORTA1-PORTA3, using PORTB as the digital input port, connect the 4*4 keyboard input weight unit, PORTC as the digital output port is connected with the LCD screen, display the weight categories, unit price and total value.The core of th
5、is system is the pressure sensor, the pressure for analog signal transmission to the PIC16F877A after the use of digital to analog of its own to get the weight conversion function.关键字单片机microcontroller 芯片CMOS chip 压力传感器pressure sensor 模数转换analog-digital conversion一.实验论证与比较1.压力传感器模块电子称利用压力传感器先将压力信号转化
6、为模拟电信号,再借由单片机自身的功能将其转化为数字电信号并进行输出以达到显示重物重量的功能。压力传感器MPX2100是压力传感器模块的核心,要用5V的电压进行供电。初次之外,压力传感器还要用一个LM324作为差分放大装置将获得的mV为单位的电信号放大到以V为单位的模拟电信号,要用±12V的直流电作为驱动。最终得到的模拟信号从LM324的8管脚传送到PIC16F877A的PORTA0进行模数转换。最后通过一个1M的电位计对电源电压进行分压以达到调零的目的,另有一个1K的电位计调整LM324的放大倍数以达到压力传感器的校准功能。图1为压力传感器模块的内部电路。图1 压力传感器模块电路在电
7、子称工作时,将压力传感器一端固定在万用板上,将重物放在它的另一端,使压力传感器内部的电阻应变片发生形变,从而改变压力传感器的电阻大小,进而改变通过压力传感器的电流大小,获得随重物质量而改变的模拟电信号。但是由于压力传感器的量程有限,只能称重03kg的重量,同时8位二进制数只能表示0255,所以必须还要对获得的数字信号进行量化后进行输出。我们选取的分度值为12。2.键盘模块 我们利用了小键盘的09以及A、B这12个按键。数字按键用来输入单价,而A、B两个按键分别用来清除已输入的单价和确定已输入的单价。键盘工作的原理是先将键盘所用的按键每个赋予一个键位码,存在从40H开始的连续地址单元中。在无按键
8、按下时,键盘输出均为低电平,而当有按键按下时,对应的输出将会对应高电平。在工作时利用取反扫描法,检测键盘是否有按键按下,一旦有按键按下,查找其键位码对应的地址,利用间接寻址法,减去40H即可获得输入的按键,再转而输入到LCD上。图2为4*4键盘电路图。图2 4*4键盘电路图3.LCD显示屏模块 我们用128*64LCD显示屏显示重物的重量、单价、以及计算后的总价。显示屏的输出不仅要用8条地址线传输输出输入内容,还要利用其RS、RW、E三个端口控制其输入输出。因为传输的内容有可能是数据也有可能是指令,所以先要用RS来设定传输的内容;LCD与液晶屏之间是双向传输的,所以要用RW来决定LCD的输入输
9、出;最后的E相当于使能端,决定何时传输内容。在此程序中,LCD屏只用来输出,所以可以将RW直接接地,而RS、E要连接对应的端口。二.系统总体设计 系统模块总体框图如下:键盘模块框图 我们默认的设置单价为两位数,所以当输入数字时系统会自动检测已经输入的数字的个数,另外如果想单价为一位数,那么可以在输入一个数字后按下B键确认。另外,在每按下一个数字时,都会先检测是否按下的为A,如果是,则清空已经输入的数字,再重新输入单价。图3为键盘模块流程图。开始是否有按键按下找到对应的键位码转换成对应的数字的代码在LCD屏幕输出是否已输入两次是否u按下是否为A是是按下是否为B否u否u是否u图3 键盘输入流程图总
10、价的计算 计算总价时,要先将储存单价的8421码转化成8421BCD码。计算总价时用的为乘法计算,我们选择将乘法分解成加法并循环计算的方式。并且在显示总价时,会先检测总价的不是零的第一位再开始显示总价,避免了像000.000元这样的数字出现。我们的总价最多可以计算4位数乘2位数,结果可达6位数。 图4为计算总价的流程图。图4 总价计算流程图三.硬件连接压力传感器模块连接 压力传感器内部有电阻应变片,其阻止大小会随形变的多少而改变,从而产生随压力而变的电信号,再通过查分放大电路放大电信号。因此,压力传感器输出的是模拟信号。想要能够得到数字信号,必须利用PIC16F877A自身的A端口所带的模数转
11、换功能。因此,必须先设置PORTA的一个端口为模拟端口。又由于我们要用LCD液晶屏必须令PORTA有三个数字端口,经过查阅,决定另PORTA0为模拟端口。另外在接PORTA0之前必须接一个分压电路,来决定模拟信号的分度值,使输出的数字信号能在想要的范围内。 键盘和单片机连接 在使用键盘时,必须接上拉电阻。单片机的PORTB端口有自带的弱上拉功能,所以选取PORTB作为键盘的输入端口。同时为保险起见,在键盘和PORTB相连之前,也接了4个上拉电阻。3.LCD屏和单片机连接 LCD显示屏的连接较为复杂。其管脚如图5所示。使用时,1、15、20管脚均接地;2、17、19管脚接电源电压,4、5、6管脚
12、分别接PORTA1、PORTA2、PORTA3;714管脚分别接PORTB0PORTB7;3管脚用来调节液晶屏亮度,需要在3端口接两个电阻分别接电源和地进行分压,在实际操作时先用电位计调节到合适阻值后用定值电阻代替,最后选取接电源盒地的电阻分别为6.8komega和3.3komega。整个系统连接模块如下:单片机PIC16F877LCD显示屏压力传感器模块 小键盘PORTCRA0PORTBRA1RA3 四.调试过程程序开始就进入main,设置各端口的输入输出,单片机将“重量”“单价”“总价”这几个字及其对应的单位显示在LCD屏幕上,当得到了重物的重量后,将重量显示在上面,在输入单价并确认后显示
13、单价并自动计算、显示总价。在调试阶段,遇到了好多大家都遇到的问题,大多数通过自己独立解决,并且将方法告诉了其他遇到相同问题的同学。小键盘键位码的确定书上虽然有介绍小键盘的使用和相关代码,但是书上的小键盘的行和列与试验箱上的行列是相反的,在反复尝试了之后,我发现了这一问题并通过参照原理,更改了键盘的位置码,并将其分享给了班级里的很多同学。小键盘按下按键后LCD屏幕显示乱码有些时候当在小键盘上按下按键后液晶屏上不会出现对应的数字而是显示乱码。这个问题困扰了我很久,并且发现其实很多同学也会遇到这样的问题。当我仔细检查了几遍程序后,终于发现了问题。由于开始的时候是参考的网上的代码,并不理解其含义,边用
14、边学,所以有的语句用的并不准确。在程序中,控制像液晶屏传输数据和传输指令的程序是不同的,RS分别设置为1和0,如果错用便会产生出乎意料的结果。在检查的过程中,我发现许多地方在调用了像液晶屏送数据显示的程序后又不小心加上了向LCD显示屏送指令的语句,这样造成的后果就是把数字对应的编码作为指令传输给了LCD屏幕,如果正巧数据对应的八位二进制数存在相应的LCD显示屏控制指令,便会发生意想不到的结果。删除调用的第二个函数即可解决这一问题。在查看遇到类似问题的同学的代码后,果然都存在这些问题,并且都可以用相同的方法解决。时延不一致导致出现乱码 LCD显示屏上电复位需要时间,而如果这一时间还没到单片机就将
15、指令传输给LCD屏幕,那么传给LCD屏幕的指令显然就会出现错误,因而出现乱码。 这一问题不好检测和调试。因为在调试过程中可以一条一条语句分步执行,自然就会有充足的延时,在调试时根本不会出现问题,但是在运行时候就会出现问题了。对于这种问题只能不断的在将向LCD屏幕传送数据之前人工加一个时延程序或者适当执行几条NOP指令,直到最后不再有乱码出现为止,过程较为繁琐。其实我最后也没有很好的解决这个问题,对于一些地方不好控制时延长度,我最后就采取了加一个196ms时延的方法解决,导致程序效率不够高,这一点上我仍需改进。PORTA的几个管脚的设定 在我们的电子称中,既需要用到PORTA的数模转换功能有需要
16、借助它的几个端口给控制LCD显示屏。这就需要合理的设置PORTA的I/O端口。由于数模转换部分开始由同组的王威学习,他写的程序所利用的PORTA的端口和我写显示屏程序时所利用的PORTA的端口存在严重冲突,所以最开始把两个程序合在一起时并没有成功。我在仔细查看了程序后发现了这一问题。我又去看了“提高篇”中关于AD部分的介绍,查看了ADCON1和ADCON0在取不同值时对应的PORTA的各IO端口的不同,最后选取了合适的组合,另除RA0外所有的PORTA的端口均为数字信号,只有RA0为模拟信号,修改后就成功的解决了问题。 分页问题的解决由于程序过长,当我信心满满的以为只要把之前写的每个模块的代码
17、放在一起就能写出整个代码时,却发现程序执行到一半就突然重新执行,在用监视窗观察了之后,发现时PCL指针自动回到了第一句。经过翻书看PCL指针的相关介绍,我断定,应该是程序过长第一页不够用了,这就需要换页写程序。 我开始靠自己的理解尝试着在其他的页内写程序,但是因为没有给PCLATH指针赋值,并没有成功翻页。 当时还有很多同学也遇到了这个问题。有人在书上找到了一个程序的例子解决分页问题,但是去发现并不能解决问题。当我仔细阅读了程序后发现,翻页第一步需要将PCLATH指针的第3第4位的值加以改变,然后才能跳转到新的一页中。但是在书上的例子里,当PCLATH指针的第3、4位值改变跳转到新的一页后,指
18、针的值并没有恢复,所以不能从新的一页中跳回去。我在从新的一页跳回去之前将PCLATH指针的值赋回原值,果然就能实现了分页的功能,并且也将这一发现告诉了许多也遇到相同问题的同学。软硬件联合调试我们最后并没有成功是实现电子称的称重功能,问题就是出现在这一部分。在开始的几天里,我们组一直处于班级中的领先速度。为了能有充足的时间使用电烙铁,我和王威经常在饭点不去吃饭,中午不休息,早上7点半就来,因此我们很快就焊接好了电路。并且自主分析LCD显示屏的接线方法,最早能实现在小键盘上按键显示在LCD屏上并且还顺便帮助了一些同学。我们也很快就把压力传感器的模块焊接好了。但是压力传感器的有4根导线,分别接VDD
19、,VSS,S+和S-,但是并没有标明哪一根线对应着哪个功能,只是以不同颜色区分开了。我们于是拿出在软件调试时用的压力传感器模块,对照着它的电路图,仔细研究了一下,确定了四色线的功能。但是当调零后,压力传感器输出的数值一直是0,没有变化。我们百思不得其解。一个偶然的机会,我没有调好零,却发现当有重物放上后,获得的压力值竟然变小了。这时候我以为是因为接S+和S-的MPX2100的两根线接反了,给差分放大电路的信号正好相反,所以会出现这样的状况。于是我们把两根线对调,果然能用了。这时我们十分开心,以为已经做出来了,并且邱老师也看到了我们的调试过程,以为只要把零和精度调好就可以结束了。在之前的调试中,
20、我们有一段电路后来取消了,只是单纯的把导线剪断,但是并没有这段电路从板子上拿下来,于是我们想把这段电路去了就去验收。可是当去掉这段电路后,发现压力传感器不能工作了。我们非常费解,一个下午和晚上都没能解决。看到别的组开始完成了,我们非常着急第二天上午,一个意外,我发现了问题所在。原来由于长时间使用,原来的14V电源已经只能输出9V,而我们的查分放大电路必须要12V的电压才能工作,这就导致输出的模拟电信号值非常小,因而无法识别其变化。我们又找到了一个14V的电源,终于解决了这一问题。可是又出现了当放上重物后压力变小的问题。在前一天我们已经又把压力传感器的四条线按照压力传感器模块上的接法接了回来,我
21、以为是又反了,反反复复试了很多次,可还是不可以。最后我们恍然大悟,原来压力传感器上贴着的压力按下的方向是反的。我们于是把压力传感器上下颠倒,果然得到了正常的现象。此时是午休时间,没有老师,我们只好自己调试。结果当下午,我们的压力传感器模块突然又不能用了。这一次,由于校准的电位计并没有起作用,我分析还是差分放大电路没有将模拟电信号放大。差分放大电路本应该使用12V和-12V的电压源,可是由于设备有限,-12V电压我们用接地代替,这一次我决定用稳压源输出-12V电压接在电压的负极。果然,这一次校准电位计可以起作用,就是说我们的差分放大电路正常了。可是,压力传感器的输出确极不稳定,时而变化时而不变化
22、,并且和压力不成正比。在经过一下午的调试后,我不能在想出调试和解决的办法,决定放弃了,这时我们已从原来班级进度最快的组变成了最慢的一组。但是后来我经过冷静下来,其实想出了问题的所在和调试的方法。王老师在验收时说可能是我给RA0的数模转换电路焊接的不对(这段电路就是我曾经想去掉的电路),但是这里的电位计确实起了作用,可以调节输出数字信号的范围。而这时我想到,19班做电子称的那组没有焊接这段电路,而他们最后的问题就是秤不能调零,这就是这段电路的作用,所以我们的数模转换调节电路并没有问题。虽然没有亲手测量,但我几乎能肯定,一定是我的压力传感器除了问题。压力传感器输出不稳定,所以才会使获得的重物重量不
23、稳定。有时当重物拿走后,压力传感器的示数还是不会立刻回复为0,而是慢慢的恢复。这正证明了我的判断。应该是我在调试的时候,有时候为了获得较为明显的现象,我直接用手对压力传感器施压,应该是超出了其弹性形变范围,导致电阻应变片不能正常工作。其实只要用电压表测量一下压力传感器输出的模拟电压会不会随压力改变就可以证明我的猜想是否合理,可惜为时已晚,现在想来,这是我这次小学期唯一后悔的地方。五.参考文献:PIC单片机实用教程基础篇 (五号 宋体)李学海北京航空航天大学出版社使用说明:通过这本书,我学习了PIC16F877A的基本工作原理和指令,帮助我从本质上学会了PIC16F877A的使用。里面的一些例子
24、令我受益匪浅。PIC单片机实用教程提高篇李学海北京航空航天大学出版社使用说明:主要在这本书中学习了怎么数模转换和小键盘怎么使用,但是还是需要自己理解了其工作原理并把书上的代码改变后才使这两个模块正常工作。六.实验心得体会这次小学期无论是从知识的获取,还是学习能力的提升,亦或是交流能力的改善,自己真的感受颇多。 首先,在上大学以来,一直没干过什么项目,也没做过什么东西,总是很羡慕那些能够去找老师或者自己做项目的同学,觉得他们很厉害,每次和他们说听起来你们做的好高端啊,他们却会说很简单的。但是自己性格原因,却不敢去找老师或去到处找同学一起做项目做东西,对那些都只是向往。但是这个小学期虽然内容不是很
25、复杂,但是却给了我一个自己动手实践接触单片机的机会,让我学到了单片机的一些基本知识,让我有机会自己亲手做点属于自己的原创的东西。在知识上丰富了自己,同时获得了对自己能力的认同感,这一点是我一直想获得却得不到的。 其次,这次的小学期基本上都是靠自己自学完成,又不会的就去翻书查资料,培养了自己的自学能力,让自己的学习能力有了提升。在短期内就基本掌握了一门汇编语言,这样的经历既提升了自己的能力,又让自己对自身的水平有了一个认识和肯定,感到非常自豪。尤其是发现自己所学的东西真的能很容易的变成实际的成果的时候,喜悦之情更加溢于言表。 另外,这次小学期我真的很努力,经常不午休不吃饭,又找到了一种拼搏的感觉
26、。说实话,上了大学以后,在没有像高中那么拼命努力过了。不知道未来在哪里,不知道努力的目标在哪里。这次小学期至少给了我一个短期内的目标,一个拼搏的动力。即使不吃午饭也不觉得饿,不午休也不觉得累,当看见自己做出来东西的时候,心里的成就感好像回到了原来高考的日子,给了自己一种好久没体验到的快乐。 同时,这次小学期在开学前,让我很快进入了学习状态。从闲散的假期生活里一下子调整了过来,不再无所事事,每天过得充实饱满,即使累一点也觉得充实快乐。感觉为这个学期打下了良好的基础。 最后,这次小学期难得的让全班同学在一个教室里成天在一起学习。上大学以来,很少有机会能和同学接触这么多,在这次小学期中,大家一起研究
27、讨论,互相帮助,感觉彼此之间又熟悉了不少,拉近了与同学之间的关系,这是很意外的收获。 在这次小学期中,我做的有很多不足。最大的失败就是没有能够坚持到底调整好压力传感器做出作品来。有时会和同学打趣说,早知道在中间那次出来结果就验收好了,那样我还是最快正式验收的一组。但即使我们最后没做出来,我也不后悔我们当时的决定。要做就要做到最好,不要有想投机取巧的想法。那次成功了,正说明我们的电路不稳定。而后续我们不断的调试过程,没能再重现当时的结果,有时是疏忽大意没选对仪器,有时是犯了低级的错误,都给了我教训,让我以后做事情学习会更加严谨。并且在不断调试的过程中,虽然最终没有得到结果,但是却更加深刻地体会到
28、了各个元器件的工作原理,更加明白了电路的组成,这是如果我们投机验收成功也学不到的,而我也认为这才是我们这次小学期应该学会的东西。通过小学期学会单片机的使用,直接的体会电路工作,如果在这些问题上掌握的扎实,收获了很多,那么我觉得即使结果不尽如人意,我那么久的努力拼搏也值得了。 不过最后还是没能做出作品,感觉十分遗憾。其实正像我再第四部分里说的,后来想想,其实问题一定出在了压力传感器上,如果自己再坚持一下努力调试,应该是可以做出来的。自己觉得自己拼搏了那么长时间已经到了自己的极限,已经尽了全力,但很显然,自己最好意志还是不够坚定,精神还是不够顽强。这次失败既是对自己的磨砺也是对自己的教训。 这次小
29、学期,要非常谢谢邱老师王老师的帮助,邱老师总会来查看我们的进度还借给我们单独一块LCD屏幕方便我们最后调试,给了我们很大便利,真的非常感谢两位老师。 这次小学期,让我在自主学习的过程中提升了能力学习了知识锻炼了意志,虽然很拼但是最后还是失败了,不过我也不后悔。我相信我得到的远比一次成功更重要。七.源程序见附件一智能电子称源程序八.成果展示及使用说明书1.产品正背面图(图5为正面图,图6为背面图)图5 产品正面图图6 产品背面图2 产品使用说明书 本产品为可以实现计价功能的只能电子称。 在使用时,需接1组大于12V的电源给键盘、LCD屏幕、压力传感器等模块供电,同时反接一组12V电源以保证电路中
30、的运放LM324可以正常工作。 首先,在屏幕显示了需要输入的请求后,将重物放在托盘上(图5中透明的亚克力板),产品会自动进行称重。 待产品显示重物重量后,产品将等待用户输入单价。单价设置最多为2位,单位元/kg。用户输入单价后需按下键盘上的B键以完成输入。若输入单价错误可以按下A键清零进行更改。 当用户输入完价格后,产品将自动计算总价并显示在液晶屏上。 用户按下键盘上任意键,产品自动清屏并进行下次称重。 本产品的理论精度为0.01kg。附件一 电子称程序源代码list p=16F8777A#include<p16F877A.inc>Z EQU 2C EQU 0FSR EQU 04H
31、VALUE EQU 22HTABLE EQU 40HN1 EQU 20HN2 EQU 21HN3 EQU 23H#DEFINE RS PORTA,1#DEFINE RW PORTA,2#DEFINE E PORTA,3COUNT EQU 24HTMP1 EQU 25HTMP2 EQU 26H;用于存放正在输入的字符CL_PR EQU 27HRESULT EQU 28H ;用于存放称重结果MULTI2 EQU 29H ;用于存放量化值QIAN EQU 35H ;存放未量化BCDBAI EQU 2BHSHI EQU 2CHGE EQU 2DHQIAN2 EQU 36H ;存放量化后BCDBAI2
32、EQU 31HSHI2 EQU 32HGE2 EQU 33HTEMP3 EQU 34HLIMIT EQU 38HSHIWAN3 EQU 4CHWAN3 EQU 4DHQIAN3 EQU 4EHBAI3 EQU 4FHSHI3 EQU 50HGE3 EQU 51HDANSHI EQU 52HDANGE EQU 53HDANJIA EQU 35HWAN2 EQU 39HSHIWAN2 EQU 3AHMULTI EQU 5CHORG 0000HGOTO MAIN30;×××××××××××&
33、#215;×××××××××××× 主程序 ×××××××××××××××××××××××ORG 0005HMAINNOP;-设置输入输出端口-BCF STATUS,RP1BSF STATUS,RP0MOVLW 0EHMOVWF ADCON1MOVL
34、W 00HMOVWF TRISC;C端口设置为输出,用于控制液晶屏BCF EBCF RSBCF RWMOVLW 0FFH;D端口设置为输入,用于4*4键盘的输入MOVWF TRISBBCF STATUS,RP0MOVLW B'10000001'MOVWF ADCON0CLRF PORTC;-;-位置置码表-movlw b'10111101'movwf 40hmovlw b'01110111'1movwf 41hmovlw b'10110111'2movwf 42hmovlw b'11010111'movwf 43h
35、movlw b'11100111'movwf 44hmovlw b'01111011'5movwf 45hmovlw b'10111011'movwf 46hmovlw b'11011011'movwf 47hmovlw b'11101011'movwf 48hmovlw b'01111101'movwf 49hmovlw b'11011101'movwf 4ahmovlw b'11101101'movwf 4bh;-CALL INITIALLCD; 初始化LCD屏幕
36、CALL SHOWREQUEST ;用于显示提示信息 BSF PCLATH,3 BSF PCLATH,4CALL DANWEI BCF PCLATH,4 BCF PCLATH,3;-显示称重信息-AtoDNOPNOPBSF ADCON0,GOADWAITBTFSC ADCON0,GOGOTO ADWAITMOVF ADRESH,WMOVWF RESULT;MOVF RESULT,0;MOVWF TEMP3CALL BCD ;实际数值的二进制码变成BCD码MOVF GE,0MOVWF GE2MOVF SHI,0MOVWF SHI2MOVF BAI,0MOVWF BAI2CLRF QIAN2CAL
37、L ZHUANMOVLW 83HMOVWF PORTCCALL ENABLEMOVF QIAN2,0BSF PCLATH,4 CALL TDBCF PCLATH,4CALL SENDMOVLW 2EHCALL SENDMOVF BAI2,0BSF PCLATH,4 CALL TDBCF PCLATH,4 CALL SEND MOVF SHI2,0BSF PCLATH,4 CALL TDBCF PCLATH,4 CALL SEND MOVF GE2,0BSF PCLATH,4 CALL TD BCF PCLATH,4 CALL SEND;-输入单价-CLRF LIMITSHURUCLRF DAN
38、SHICLRF DANGEMOVLW 93HMOVWF PORTC ;设置输出数值位置CALL ENABLEMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 8BHMOVWF PORTCCALL ENABLEMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 20HCALL SENDMOVLW 93HMOVWF PO
39、RTC ;设置输出数值位置CALL ENABLEBTFSC LIMIT,0CALL CLEANSHICALL CHECK ;检查是否有输入CALL DELAYBSF PCLATH,4CALL CHECKCLCALL CHECKCOMBCF PCLATH,4MOVF FSR,0MOVWF DANGEMOVF DANGE,0BSF PCLATH,4CALL TDBCF PCLATH,4MOVWF TMP2MOVF TMP2,0CALL SEND CALL CHECK ;检查是否有输入CALL DELAYBSF PCLATH,4CALL CHECKCLCALL CHECKCOMBCF PCLATH,
40、4MOVF DANGE,0MOVWF DANSHIMOVF FSR,0MOVWF DANGEMOVF FSR,0BSF PCLATH,4CALL TDBCF PCLATH,4MOVWF TMP2MOVF TMP2,0CALL SEND CALL CHECK ;检查是否有输入CALL DELAYBSF PCLATH,4CALL CHECKCLCALL CHECKCOMBCF PCLATH,4;-做乘法,得总价-ZONGCLRF WAN2CLRF SHIWAN2CLRF GE3CLRF SHI3CLRF BAI3CLRF QIAN3CLRF WAN3CLRF SHIWAN3MOVLW .9MOVW
41、F MULTIMOVF DANSHI,0XB1 ADDWF DANSHI,0 DECFSZ MULTI,1 GOTO XB1 MOVWF DANJIAMOVF DANJIA,0ADDWF DANGE,0MOVWF DANJIABSF PCLATH,3BSF PCLATH,4CALL TOTALBCF PCLATH,3BCF PCLATH,4MOVLW 8BH MOVWF PORTC CALL ENABLEBSF PCLATH,4BSF PCLATH,3CALL CHECKZERO2BCF PCLATH,4BCF PCLATH,3CALL CHECK ;检查是否有输入CALL DELAYBSF
42、PCLATH,3BSF PCLATH,4CALL CHECKRETURNBCF PCLATH,3BCF PCLATH,4STARTGOTO AtoD; 返回称重 重新开始;-×××××××××××××××××××××××× LCD ××××××××××
43、5;×××××××××××××-196MS延时-DELAY BSF PCLATH,4 CALL DELAY4 RETURN ;返回主程序;-;-初始化LCD-INITIALLCDCALL DELAY ;调用延时,刚上电LCD复位不一定有PIC快(196MS) MOVLW 01HMOVWF PORTC ;清屏命令,数据指针清零,所有显示清零CALL ENABLE ;调用写命令程序 MOVLW 38HMOVWF PORTC CALL ENABLE MOVLW 0CH M
44、OVWF PORTCCALL ENABLE MOVLW 06H MOVWF PORTC CALL ENABLE RETURN;-显示要求输入的信息-SHOWREQUEST CALL DELAY MOVLW 80H MOVWF PORTC ;BSF PCLATH,3 ;BSF PCLATH,4 CALL ENABLE CALL WRITE1 MOVLW 90H MOVWF PORTC CALL ENABLE CALL WRITE2 MOVLW 88H MOVWF PORTC ;BSF PCLATH,3 ;BSF PCLATH,4 CALL ENABLE CALL WRITE3RETURN;-清除
45、十位CLEANSHI MOVLW 20H CALL SEND MOVLW 94H MOVWF PORTC CALL ENABLERETURN;-显示第一行-WRITE1CLRF COUNT WRITE1_A MOVF COUNT,WBSF PCLATH,4 CALL T1 BCF PCLATH,4 MOVWF TMP1 INCF COUNT,1 MOVF TMP1,W XORLW 00H GOTO ET MOVF TMP1,W BSF PCLATH,3 BSF PCLATH,4CALL SEND_INS ;没有显示完,把当前查表所得数据送LCD显示GOTO WRITE1_A ;调用显示程序ET
46、 NOPRETURN ;-显示第二行-WRITE2CLRF COUNT WRITE2_A MOVF COUNT,WBSF PCLATH,4 CALL T2 BCF PCLATH,4 MOVWF TMP1INCF COUNT,1 MOVF TMP1,W XORLW 00H BTFSC STATUS,Z GOTO ET1 MOVF TMP1,W BSF PCLATH,3 BSF PCLATH,4CALL SEND_INS GOTO WRITE2_AET1 NOPRETURN -显示第三行-WRITE3CLRF COUNT WRITE3_A MOVF COUNT,W BSF PCLATH,4 CAL
47、L T3 BCF PCLATH,4 MOVWF TMP1 ;送暂存器 INCF COUNT,1 ;偏移地址加1 MOVF TMP1,W XORLW 00H ;判断是否显示完所有数据(约定表格做后一个00H做为结束标志) BTFSC STATUS,Z GOTO ET2 ;全部显示完成 MOVF TMP1,W BSF PCLATH,3 BSF PCLATH,4 CALL SEND_INS ;没有显示完,把当前查表所得数据送LCD显示 GOTO WRITE3_A ;调用显示程序ET2 NOP RETURN ;子程序返回;-SEND-SENDBSF PCLATH,4CALL SEND1RETURN;-
48、ENABLE-ENABLEBSF PCLATH,4CALL ENABLE1RETURN;××××××××××××××××××× 称重部分 ×××××××××××××××××-;-二进制数转换BCD码-BCD CLRF BAI CLRF SH
49、I CLRF GE MOVF RESULT,F SKPNZ RETURN ;MOVLW D'100' ;SUBWF RESULT,0 ;BTFSS STATUS,C ;GOTO QIUSHIIQIUBAI MOVLW D'100' SUBWF RESULT,0 BTFSS STATUS,C GOTO QIUSHI MOVWF RESULT INCF BAI GOTO QIUBAI;QIUSHII ; MOVF TEMP3,0 ;MOVWF RESULTQIUSHI MOVLW D'10' SUBWF RESULT,0 BTFSS STATUS,C
50、 GOTO QIUGE MOVWF RESULT INCF SHI GOTO QIUSHIQIUGE MOVF RESULT,0 MOVWF GE RETURN;-;-BCD量化-ZHUAN MOVLW .11 MOVWF MULTI2B2 MOVF GE,0 ADDWF GE2,0 MOVWF GE2 MOVLW .10 SUBWF GE2,0 BTFSC STATUS,C CALL GEJINYI MOVF SHI,0 ADDWF SHI2,0 MOVWF SHI2 MOVLW .10 SUBWF SHI2,0 BTFSC STATUS,C CALL SHIJINYI MOVF BAI,0 ADDWF BAI2,0 MOVWF BAI2 MOVLW .10 SUBWF BAI2,0 BTFSC STATUS,C CALL BAIJINYI MOVF QIAN,0 ADDWF QIAN2,1 DECFSZ MULTI2,1 GOTO B2RETURN;-进位处理-GEJINYI MOVWF GE2 INCF SHI2 RETURNSHIJINYI MOVWF SHI2 INCF BAI2 RETURNBAIJINYI MOVWF BAI2 INCF QIAN2 RETURN;××
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿童教育合同范本
- 修乡村路桥合同范本
- 伪造备案租房合同范本
- 创业五人合作合同范本
- 加盟 商铺转让合同范本
- 全国租赁服装合同范本
- 买卖店铺装修合同范本
- 划经营合同范本
- 2025内蒙古新工创业发展集团有限责任公司公开招聘工作人员笔试参考题库附带答案详解
- epc项目建设合同范本
- 轮状病毒性肠炎
- 世界社会主义五百年
- 加氢裂化操作工题库(合并版)
- 正大集团大猪场开发流程
- 高中政治必修四知识体系每单元的总体框架
- 房地产金融创新与风险防范的理论演进
- GB/T 41255-2022智能工厂通用技术要求
- GB/T 41029-2021石油天然气钻井海洋弃井作业规程
- 深入推进依法行政
- GB/T 4026-1992电器设备接线端子和特定导线线端的识别及应用字母数字系统的通则
- 马工程教材《公共财政概论》PPT-第二章 公共财政职能
评论
0/150
提交评论