计算机控制课程设计文档格式.docx
《计算机控制课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《计算机控制课程设计文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
![计算机控制课程设计文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/96a11a2e-a2f3-4763-8ec6-9124cd78a786/96a11a2e-a2f3-4763-8ec6-9124cd78a7861.gif)
顺序显示9、8、7、……、1、0;
3.“闭幕式”:
从两边向中间逐次点亮8个灯;
4.自行设计两种显示效果;
5.通过键盘选择,实现多种效果的组合。
1.3总体设计
利用并行接口芯片8255PA口、PB口控制8x8点阵LED的行和列,PC口的低四位、高四位分别控制4x4键盘行和列。
按1键开始“开幕式”表演:
按下2键开始“闭幕式”表演:
;
按下3键开始“风车”表演:
风车转动;
按下4键开始“烟花”表演:
烟花开放按下5键启动“倒计时”功能:
按下6键:
结束。
同时实现按键转跳功能,也就是在表演过程中,按下其它键,立即转跳显示其它表演。
程序中需要预先填入要输出数字9—0、烟花、风车图的字模,由于需要改变方向输出,不同输出所需的字模也不一样,故需要多种字模。
LED点阵显示图形的原理是:
每次只输出一列,8列都输出之后才将自摸移动一列,重新按列输出:
每次变化的时间非常短,肉眼无法识别出来,因而以为显示的是整个图形。
控制显示速度的变化实际上就是控制每列输出后延迟的时间。
2硬件设计
2.1硬件构成
本次设计点阵LED显示需要的硬件模块有8x8点阵LED、4x4键盘,可编程并行接口芯片8255等,下面简要介绍相关芯片:
8x8点阵LED单元
该单元提供一个8X8的点阵LED显示模块,点阵LED的行列控制已经连接好。
行控制为R1~R8,列控制为L1~L8。
其线路连接如图1所示。
图1点阵LED显示单元
8255单元
该单元提供一片开放的并口控制器8255,用于学习并行接口8255的编程方法。
其线路连接如图2所示
图28255单元
4x4键盘单元
该单元提供4X4的小键盘阵列及4位七段数码管,电路连接为扫描电路形式。
其线路连接如图3所示。
图3键盘及数码管显示单元
2.2硬件连线图
TD-PID+实验板上连接图如图4所示:
图4TD-PID+实验板上连线图
将系统总线和8255的数据总线相连,利用并行接口芯片8255PA口、PB口作为输出口,分别于点阵LED的列控制L1—L8、行控制R1—R8相连,控制LED的行和列,PC口的低四位、高四位分别控制4x4键盘行X1—X4和列Y1—Y4。
其它8255的片选端CS、A0、A1分别接系统总线的IOY0、XA2、XA3。
3系统软件设计
3.1系统软件总述
本次设计采用的语言为汇编语言,大量使用了模块化程序,所有功能都能通过调子程序实现。
点阵LED显示系统设计的软件部分由主程序、烟火表演1子程序、烟火表演2子程序、开幕式子程序、闭幕式子程序、数字倒计时程序子程序、显示子程序、以及延时子程序1和2组成。
在平时编程中,用C语言编写程序有利于实现较复杂的算法,但是汇编语言程序则具有较高的效率且容易精细计算程序运行的时间。
不论是什么语言,始终是要被电脑转换成C语言进行执行的。
所以,在此次设计中,编程采用的是汇编语言,整个程序层次有序,结构清晰,易于维护,完整程序见程序代码。
3.2I/O口分配
8255I/O口分配如表1所示
表1
I/O口
IOY0
MY8255_A
MY8255_B
MY8255_C
MY8255_MODE
分配
9800H
IOY0+00H*4
IOY0+01H*4
IOY0+02H*4
IOY0+03H*4
3.3软件流程图
系统流程图如图5所示:
图5系统流程图
3.4程序代码
IOY0EQU9800H
MY8255_AEQUIOY0+00H*4
MY8255_BEQUIOY0+01H*4
MY8255_CEQUIOY0+02H*4
MY8255_MODEEQUIOY0+03H*4
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATA1SEGMENT
INRDB0;
存放列键值单元
CS1CDW?
IP1CDW?
CNTDB0;
计数单元
NUMDB0
FIRE1DB0C1H,63H,36H,1CH,038H,6CH,0C6H,83H;
风车1
DB10H,18H,18H,07FH,0FEH,18H,18H,08H
DB0C1H,63H,36H,1CH,038H,6CH,0C6H,83H
MOVEYANHUADB81H,00H,00H,00H,00H,00H,00H,81H;
烟火2
DB81H,42H,00H,00H,00H,00H,42H,81H
DB00H,00H,24H,00H,00H,24H,00H,00H
DB00H,00H,00H,18H,18H,00H,00H,00H
DB81H,00H,00H,00H,00H,00H,00H,81H
OPEN1DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
开幕式字段
OPEN2DB0FFH,0FFH,0FFH,0H,0H,0FFH,0FFH,0FFH
OPEN3DB0FFH,0FFH,0H,0H,0H,0H,0FFH,0FFH
OPEN4DB0FFH,0H,0H,0H,0H,0H,0H,0FFH
OPEN5DB0H,0H,0H,0H,0H,0H,0H,0H
CLOSE1DB0H,0H,0H,0H,0H,0H,0H,0H;
闭幕式字段
CLOSE2DB0FFH,0H,0H,0H,0H,0H,0H,0FFH
CLOSE3DB0FFH,0FFH,0H,0H,0H,0H,0FFH,0FFH
CLOSE4DB0FFH,0FFH,0FFH,0H,0H,0FFH,0FFH,0FFH
CLOSE5DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
NUMTABLEDB00H,00H,4FH,49H,49H,49H,7FH,00H;
"
9"
0
DB00H,00H,4FH,49H,49H,49H,7FH,00H;
0倒计时字段
DB00H,00H,7FH,49H,49H,49H,7FH,00H;
8"
1
DB00H,00H,01H,01H,79H,05H,03H,00H;
7"
2
DB00H,00H,7FH,49H,49H,49H,79H,00H;
6"
3
DB00H,00H,4FH,49H,49H,49H,79H,00H;
5"
4
DB00H,00H,1FH,10H,10H,10H,7FH,00H;
4"
5
DB00H,00H,49H,49H,49H,49H,7FH,00H;
3"
6
DB00H,00H,79H,49H,49H,49H,4FH,00H;
2"
7
DB00H,00H,00H,00H,42H,7FH,40H,00H;
1"
8
DB00H,00H,7FH,41H,41H,41H,7FH,00H;
0"
9
DATA1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA1,SS:
STACK1
START:
MOVAX,DATA1
MOVDS,AX
PUSHDS
MOVDX,MY8255_MODE;
初始化8255,设置A,B和C低四位为输出,C口高四位为输入
MOVAL,88H
OUTDX,AL
CALLSCAN;
扫描有无按键按下,有则跳出,无则继续
;
//////////////风车/////////////////////////////////////
YANHUO1PROCNEAR
MOVBX,3H;
风车表演循环次数
S1:
MOVCNT,0
LEADI,FIRE1
MOVCX,4
Y1:
MOVSI,DI
CALLDISP
扫描有无按键按下,有则跳出,无则继续
INCCNT
CMPCNT,8H
JEY2
JMPY1
Y2:
ADDDI,8
LOOPY1
DECBX
MOVCX,BX
LOOPS1
MOVDX,MY8255_B;
清8255B口
MOVAL,0H
OUTDX,AL
MOVINR,0H
RET
YANHUO1ENDP
/////////////烟火////////////////////////////////////
YANHUO2PROCNEAR
循环次数
S2:
LEADI,MOVEYANHUA
MOVCX,8
M1:
CALLSCAN;
JEM2
JMPM1
M2:
ADDDI,8
LOOPM1
LOOPS2
YANHUO2ENDP
////////////////开幕式///////////////////////////////////
OPENINGPROCNEAR
MOVCX,6H
T1:
LEASI,OPEN1
CALLDISP
LOOPT1
T2:
LEASI,OPEN2
LOOPT2
T3:
LEASI,OPEN3
LOOPT3
T4:
LEASI,OPEN4
LOOPT4
T5:
LEASI,OPEN5
LOOPT5
MOVINR,0
RET
OPENINGENDP
///////////////闭幕式////////////////////////////////////
CLOSINGPROCNEAR
TT1:
LEASI,CLOSE1
LOOPTT1
TT2:
LEASI,CLOSE2
LOOPTT2
TT3:
LEASI,CLOSE3
LOOPTT3
TT4:
LEASI,CLOSE4
LOOPTT4
TT5:
LEASI,CLOSE5
LOOPTT5
CLOSINGENDP
/////////////////数字倒计时程序/////////////////////////////
TIMEPROCNEAR
MOVCNT,0
LEADI,NUMTABLE
MOVCX,11
W1:
JEW2
JMPW1
W2:
ADDDI,8
LOOPW1
RET
TIMEENDP
///////////////键盘扫描子程序////////////////////////
SCANPROCNEAR
XORBX,BX;
列键值BL=0,行键值BH=0
MOVAL,0H;
C口低四位输出全为0
MOVDX,MY8255_C
MOVDX,MY8255_C;
读入C口高四位
INAL,DX
ANDAL,0F0H
CMPAL,0F0H
JEL;
C口高四位输入全为1,该列无键按下转L
CALLDELAY;
C口高四位输入非全1,该列有键按下调延时
MOVDX,MY8255_C
INAL,DX
ANDAL,0F0H
CMPAL,0F0H
JEL
MOVCL,0EH;
该列有键按下,从第一行开始查找
R1:
MOVAL,CL;
使某列为0
MOVDX,MY8255_C
JNER2;
该列有键按下
MOVAL,BL;
该列无键按下,列键值加4
ADDAL,4
DAA
MOVBL,AL;
BL列键值
SHLCL,1;
准备查找下一列
CMPCL,0;
所有列未查找完转K1
JNER1
R2:
INCBH;
该列有键按下,行值加1
SHLAL,1;
行键移入CF
JCR2;
CF=1,该行无键按下转K2
CF=0,该行有键按下
ADDAL,BH;
键值=行键值+列键值
LEADI,INR;
存键值
MOV[DI],AL
JMPCOMP;
转键处理程序
L:
RET;
无键按下,跳出查询
COMP:
MOVAL,INR
CMPAL,1
JZDES1
CMPAL,2
JZDES2
CMPAL,3
JZDES3
CMPAL,4
JZDES4
CMPAL,5
JZDES5
CMPAL,6
JZDES6
JMPL
DES1:
CALLOPENING;
开幕式
JMPSCAN
DES2:
CALLCLOSING;
闭幕式
DES3:
CALLYANHUO1;
风车
JMPSCAN
DES4:
CALLYANHUO2;
烟花
DES5:
CALLTIME;
数字倒计时
JMPSCAN
DES6:
MOVDX,MY8255_B;
清8255B口,停止
OUTDX,AL
MOVAX,4C00H
INT21H
SCANENDP
/////////////////显示子程序///////////////////////////
DISPPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVDX,MY8255_B
MOVAL,0H
MOVBL,01H
MOVCX,8H
LOOP1:
MOVDX,MY8255_B
MOVAL,[SI]
MOVAL,BL
NOTAL
MOVDX,MY8255_A
ADDBL,BL
CALLDALLY
INCSI
LOOPLOOP1
POPAX
POPBX
POPCX
POPDX
DISPENDP
/////////////延时子程序1供显示子程序使用/////////////
DALLYPROCNEAR
PUSHAX
PUSHCX
MOVCX,03FH
D1:
MOVAX,2FFFH
D2:
DECAX
JNZD2
LOOPD1
POPAX
DALLYENDP
//////////////延时子程序2供去抖用////////////////////
DELAYPROCNEAR
MOVCH,20
DL1:
MOVCL,200
DL2:
DECCL
JNZDL2
DECCH
JNZDL1
DELAYENDP
////////////////结束/////////////////////////////
CODEENDS
ENDSTART
3.5程序结果部分显示
程序显示结果如下图所示
图6开幕式(闭幕式)图7烟花闪烁
4结束语
本报告主要介绍如何实现8x8点阵LED显示,硬件部分使用西安唐都科教仪器公司的TD-PID+实验系统,实验箱中的可编程并行接口芯片8255,8x8点阵LED,4x4键盘等连接组成点阵LED显示控制系统的基本电路。
软件部分采用了汇编语言编写程序代码,通过判断、跳转、循环等基本技术实现LED显示“开幕式”“闭幕式”的动态显示,倒计时0--9、风车和烟花等简单图形,并用4x4键盘控制“开幕式”“闭幕式”“风车”“烟花绽放”的控制时序。
在做实验过程中,LED点阵实现的硬件连接并不难,连线也很简单,只要熟悉芯片8255的引脚功能,并且注意一下4x4键盘的输出输入端口的连接就行。
在软件部分,程序是比较长比较烦,但是通过运用模板化思想,各个子程序逐个设计,然后通过嵌套连接,其实还是比较简单的,只要花些时间耐心看就很快能看懂。
为了减少程序代码,我们共用了一个延时程序,为了兼顾各个延时时间,开幕式的演示相对较短,倒计时也没有严格按照10秒倒计时的标准显示。
此外,对于4*4键扫描、编码及功能及地址转移程序的编写是,我们主要参考了所学课本中16*16键盘相关程序。
虽然仅仅只有一天时间的课程设计,但是在设计过程中,通过将在课堂上所学的专业理论知识与实际开发、动手实践有机统一结合起来,大大加深了对LED点阵显示的原理和方法的理解和认识,提高了专业技能。
在设计过程中,查阅了大量的资料,通过对理论的实践与应用,对计算机控制方面的知识有了更深入的理解和认识,扩展了知识面,开拓了视野,从一开始看到题目,选择课题,到课题分析、理论设计、线路图连接,全面了解和掌握了课题开发的基本方法和步骤。
同时,在实验室外,在自己电脑上也使用了MasmforWindows集成实验环境2011专业化软件模拟实验环境进行模拟调试等操作,通过对这些软件的应用,方便了在无开发板的基础上,能够正常的进行工作,扩展了对办公软件的应用。
这次课设对LED点阵显示和4*4键盘的原理与应用有了更加深入的认识;
编写较为复杂代码时,慢慢树立了层次化和模块化思想,总之,一句话:
收获良多,获益匪浅。
参考文献:
[1]杨鹏《计算机控制系统》机械工业出版社
[2]TD-PID+实验系统用户手册