单片机啤酒生产线系统.docx
《单片机啤酒生产线系统.docx》由会员分享,可在线阅读,更多相关《单片机啤酒生产线系统.docx(13页珍藏版)》请在冰豆网上搜索。
单片机啤酒生产线系统
数字化产品设计报告
专业:
嵌入式系统
哈尔滨工业大学华德应用技术学院
姓名:
班级:
学号:
课题编号:
C004
课题名称:
啤酒装箱生产线系统
基本功能:
由单脉冲代表生产线啤酒统计数,按一下单脉冲有一瓶酒过去,24瓶为一箱,显示在数码管上。
扩展功能:
能够实现清零重新计数和存储及显示存储数据
成绩:
评审老师:
一、需求分析:
(
应用:
工业生产线成品计数器是一种自动记录生产过程中随机产量,并通过计算机进行显示、累计、储存的装置。
广泛应用于啤酒.饮料.药品计数.汽车测速.电机测速.点钞机等等。
目的:
设计此程序主要是为了控制产品装箱生产线,实现自动化的产品装箱计数。
从而让生产者对产品生产情况有了具体的了解,与传统的生产计数方式相比,能够让生产者更合理的调度人力物力资源,节省劳动力,能够在最短的时间内而获得更多经济效益。
立题意义:
为了能让学生更深入了解MSC-51单片机各个芯片应用,在理论知识的基础上加强动手能力,创新思维,为将来走向社会岗位奠定扎实基础.
二、硬件设计方案
硬件所需器件:
51单片机、0832数模转换器、LED数码管、直流电动机键盘及8279键盘/显示接口芯片。
各芯片的简要介绍如下:
8XC51系列单片机是MCD-51中的一个子系列,是一组高性能兼容性单片机。
其中,x的规定为程序存储器的配置:
0表示无片内ROM,3表示片内为掩膜ROM,7表示片内为EPROM/OTPROM,9表示片内为FlashROM。
DAC0832芯片是美国Nationalsemiconductor公司生产的具有2个数据寄存器的8位分辨率的D/A转换芯片。
此芯片与处理器完全兼容,它由8位输入锁存器、8位DAC电路及转换控制电路构成,通过两个输入寄存器构成两级数据输入锁存。
Intel8279芯片是一种通用可编程键盘/显示接口芯片,它具有同时完成键盘输入和显示控制两种功能。
)
三、软件设计方案
算法分析:
1.初始化堆栈区域:
设置存储地址的首地址0D0.0F0、0B0。
后来的的数据进栈存储、数据出栈读取可通过R0寄存器间接寻址进行地址操作存储。
2.初始化8279:
送控制字00H(左边输入八位字符显示,外部译码键扫描方式,双键互锁)给8279的Z8279状态/命令口置控制方式。
再将清屏控制字0C1H送入Z8279让LED数码管清屏。
3.判断是否有键值输入:
把状态口地址送入特殊功能寄存器DPTR中让其与0F进行ANL运算屏蔽D4-D7个状态,JZ判断是否有键入如果没有继续判断,如果有把控制字40H送入状态命令口并把键值数据通过DPTR送入累加器A中后进行判断。
4.当判断键值是0键:
通过DAC0832的数据口8000H送入数据,通过数模转换控制电压启动电动机送出脉冲,用于存储数据瓶数、箱数、百箱数的R1、R2、R3清零,初始化计数器T1清零开始对脉冲计数。
计数值送R1当等于24是R2自增1,R1清零计数器清零重新计数,当R2自增到到99时R2清零R3自增1,计数值通过做除法设偏移量调用显示子程序,显示子程序是通过显示起始地址加偏移量设置显示位置的,数据显示通过查表的方法,表的起始地址加偏移量是要显示的数据。
5.当判断键值是1时:
把当前的人R1,R2,R3分别通过R0进行寄存器间接寻址存储在newp、newx、newb中,newp、newx、new内的地址自增1.进栈方式
6.当判断键值是2时:
数据显示出栈后进先出方式把地址减一通过R0寄存器间接寻址把数据送入累加器A,是通过做除法设显示偏移量调用显示子程序,显示子程序是通过显示起始地址加偏移量设置显示位置的,数据显示通过查表的方法,表的起始地址加偏移量是要显示的数据。
当当前地址减至等于首地址时R7重新赋值1.
四、系统调试
硬件调试:
1.使用试验箱时试验箱的USB口无法使用,后改用串口线试验箱能够正常使用。
2.起初使用单脉冲进行控制脉冲信号输入,后改用送数据给0832数模转换器控制电动机电压从而电动机产生的电动机脉冲信号。
3.脉冲信号是通过多功能P3口中的P3.5定时/计数器T1的外输入引脚送入的。
软件测试:
1.最开始实现的功能只有简单的脉冲计数显示,在程序设计的过程中,在显示的过程中起初只能显示一位计数非常不理想,后来通过研究电子钟的程序理解了设置偏移量设定显示位置显示数据是通过查表地方法实现的。
计数值做除法商和余数分别是两个位置,通过设置偏移量分别设置显示位置,调用子程序。
2.后来又加入了键盘控制,清零计数,清屏,是通过查询按键及键值的方法解决的。
3.课设要求中是单脉冲输入信号,自己改了一通过0832控制电压控制直流电动机输出脉冲信号。
4.加入拓展功能存储并显示是遇到了很大的困难,起初是想用Flash闪存,老师讲解后,自己是试着编写了一下,结果未成功,由于时间比较紧,借鉴了老师的设立堆栈存储的方法,在便携存储与显示程序后,无法实现,添加存储地址的观察项,单步执行查看存储情况,发现首地址初始化出了问题经改正实现了存储及显示。
总结:
时光如逝,为期两周的数字化产品设计以接近尾声,在这段时间里,学习了很多,也成长了很多这次单片机课程设计我们历时两个星期,不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!
尽力在两个星期后的今天我已明白课程设计对我来说的意义,它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的也会更多!
作为一名嵌入式专业的大二学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的课程设计就为我们提供了良好的实践平台。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,
因此我想把课设做的更加贴切现实生活当中的应用,因此我想把数码管显示改为液晶显示,我想这样就更加贴切实际当中的生产线了。
附录1:
(程序代码)
Z8279EQU8701H;8279状态/命令口地址
D8279EQU8700H;8279数据口地址
LEDMODEQU00H;左边输入八位字符显示
;外部译码键扫描方式,双键互锁
D0832EQU8000H
LEDCLSEQU0C1H;清除显示RAM
LEDWR0EQU80H;设定的将要写入的显示RAM地址
NEWPEQU30H;定义存储地址指针
NEWXEQU31H
NEWBEQU32H
OLDPEQU33H
OLDXEQU34H
OLDBEQU35H
ORG0000H
AJMPSTART
ORG0040H
START:
MOVSP,#60H;初始化堆栈段
MOVR7,#1
MOVNEWP,#0D0H;送首地址
MOVNEWX,#0F0H
MOVNEWB,#0B0H
MOVOLDP,#0D0H
MOVOLDX,#0F0H
MOVOLDB,#0B0H
MOVR1,#0;瓶数
MOVR2,#0;箱数
MOVR3,#0;百箱数
MAIN:
MOVA,#00H;送0832初状态
MOVDPTR,#D0832
MOVX@DPTR,A
LCALLINIT8279;初始化8279
GETKEY:
MOVDPTR,#Z8279
MOVXA,@DPTR
ANLA,#0FH
JZGETKEY;判断是否有键值输入
MOVA,#40H
MOVX@DPTR,A;送控制字
MOVDPTR,#D8279
MOVXA,@DPTR;开始判断键值
CJNEA,#00H,KEY1;判断0键
;0键保存,清零重新进行计数
MOVR1,#0;瓶数
MOVR2,#0;箱数
MOVR3,#0;百箱数
MOVA,#15H;通过0832控制电动机送入脉冲
MOVDPTR,#D0832
MOVX@DPTR,A
LJMPCOUNT_INT
PUSHACC
MOVA,#00H
MOVDPTR,#D0832
MOVX@DPTR,A
POPACC
KEY1:
CJNEA,#01H,KEY2
;1键清屏
PUSH0
MOVR0,NEWP;数据指针
MOVA,R1
MOV@R0,A
POP0
PUSH0
MOVR0,NEWX
MOVA,R2
MOV@R0,A
POP0
PUSH0
MOVR0,NEWB
MOVA,R3
MOV@R0,A
POP0
INCNEWP;存储后地址自增
INCNEWX
INCNEWB
JMPMAIN
KEY2:
CJNEA,#02H,GETKEY
;2键显示储存数据
MOVA,NEWP;地址自减一显示
CLRC
SUBBA,R7
MOVOLDP,A
CLRC
MOVA,NEWX
SUBBA,R7
MOVOLDX,A
MOVA,NEWB
CLRC
SUBBA,R7
MOVOLDB,A
INCR7
MOVA,OLDP
CJNEA,#0D0H,N1;判断下次从开始显示
MOVR7,#1
N1:
PUSH0
MOVR0,OLDP
MOVA,@R0
POP0
MOVB,#10
DIVAB
MOVR5,A
MOVR4,#1
LCALLDISLED
MOVR5,B
MOVR4,#0
LCALLDISLED
PUSH0
MOVR0,OLDX
MOVA,@R0
POP0
MOVB,#10
DIVAB
MOVR5,A
MOVR4,#5
LCALLDISLED
MOVR5,B
MOVR4,#4
LCALLDISLED
PUSH0
MOVR0,OLDB
MOVA,@R0
POP0
MOVB,#10
DIVAB
MOVR5,A
MOVR4,#7
LCALLDISLED
MOVR5,B
MOVR4,#6
LCALLDISLED
LJMPGETKEY
COUNT_INT:
MOVTMOD,#40H;送计数器控制字
MOVTL1,#00H
MOVTH1,#00H;计时器的初始化
SETBTR1;定时/计数器运行标志
WAIT:
MOVA,TL1
MOVR1,A
CJNER1,#24,DIS;
INCR2
MOVR1,#0
MOVTL1,#0
WAIT1:
CJNER2,#99,DIS1
INCR3
MOVR2,#0
DIS:
MOVA,R1
MOVB,#10
DIVAB
MOVR5,A
MOVR4,#1;数码管显示位置
LCALLDISLED
MOVR5,B
MOVR4,#0
LCALLDISLED
MOVA,R2
MOVB,#10
DIVAB;
MOVR5,A
MOVR4,#5
LCALLDISLED
MOVR5,B
MOVR4,#4
LCALLDISLED
AJMPWAIT1
DIS1:
MOVA,R3
MOVB,#10
DIVAB;
MOVR5,A
MOVR4,#7
LCALLDISLED
MOVR5,B
MOVR4,#6
LCALLDISLED
MOVDPTR,#Z8279
MOVXA,@DPTR
ANLA,#0FH
JZWAIT
MOVA,#40H
MOVX@DPTR,A
MOVDPTR,#D8279
MOVXA,@DPTR
LJMPKEY1
DISLED:
PUSHDPH;保存现场
PUSHDPL
PUSHACC
MOVA,#LEDWR0;置显示起始地址
ADDA,R4;加位置偏移量
MOVDPTR,#Z8279
MOVX@DPTR,A;设定显示位置
MOVDPTR,#LEDSEG;置显示常数表起始位置
MOVA,R5
MOVCA,@A+DPTR;查表
MOVDPTR,#D8279
MOVX@DPTR,A;显示数据
POPACC;恢复现场
POPDPL
POPDPH
RET
INIT8279:
;8279初始化子程序
PUSHDPH;保存现场
PUSHDPL
PUSHACC
MOVDPTR,#Z8279
MOVA,#LEDMOD;置8279工作方式
MOVX@DPTR,A
MOVA,#LEDCLS;清除LED显示
MOVX@DPTR,A
POPACC;恢复现场
POPDPL
POPDPH
RET
LEDSEG:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;'0,1,2,3,4,5,6,7,8,9'
END
附录2:
(电路原理图)