西安电子科技大学通信工程学院课程设计.docx
- 文档编号:3407774
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:28
- 大小:27.73KB
西安电子科技大学通信工程学院课程设计.docx
《西安电子科技大学通信工程学院课程设计.docx》由会员分享,可在线阅读,更多相关《西安电子科技大学通信工程学院课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
西安电子科技大学通信工程学院课程设计
课程设计实验报告
010812##
跳舞机设计一.设计目的:
掌握矩阵键盘和显示接口的硬件设计方法
掌握键盘扫描程序和显示程序的编程方法
实用程序设计及学习DOS、BIOS调用
1.基本功能设计:
至少设计4个数码管和4个按键
数码管显示的舞蹈动作是随机的
可以统计游戏者的分数
2.扩展功能:
电脑和实验版上可以加一些声光电的效果
3.创新功能:
,,
作为正常↑→↓←,当作反向应用,
即↓←↑→。
二.系统方案:
设计思路如下:
产生4个随机数,将随机数和方向对应。
将随机方向显示在数码管上,从按键获得方向输入,比较两方向的值。
时间结束将统计到的正确值转换成评分,输出评分等级。
程序分为以下几大部分:
主程序,RDNUM,DISPLAY,SCANNUM1,CMPNUM。
其中RDNUM调用系统时间规范化产生随机数,载入BUF,;DISPLAY则将BUF1的数值在TABEL2查询获得数码管值,并将内容显示出来;SCANNUM1循环调用DISPLAY以维持在扫描键值期间的数码管显示,同时监控按键获得键值,查询TABE1将键值转换为数值,超时则记为-1;CMPNUM调整键值和随机数,将他们的对应域统一,形成映射,比较二者的值;主程序通过循环调用SCANNUM1持续监控按键直到超时,4次调用CMPNUM,统计正确数,最后对结果评分等级NICE,GOOD,PASS,FAIL,调用DISPLAY显示评分。
1.主程序:
MOVAX,DATA
MOVDS,AX;数据段段址送DS。
MOVAX,STACK
MOVSS,AX;堆栈段段址送SS。
MOVSP,OFFSETTOP;获取堆栈指针。
MOVDX,0EE03H;DX指向8255的D口。
MOVAL,10001001B;工作方式状态控制字,
表示方式0,端口C输出。
OUTDX,AL;完成8255初始化。
STEP1:
CALLFARPTRRDNUM;调用RDNUM生
成随机数,存储于BUF。
LEADI,BUF;DI传递当前正在比较的随机数。
MOVCX,4STEP2:
CALLFARPTRSCANNUM1;扫描键值,返回值
start
初始化8255
产生随机数,存入缓存
扫描键盘,将扫描到的键值存
入缓存,超时则标记-1
比较随机数和键值统计正确值
数码管显示评分等级
end
存于BL。
CALLFARPTRCMPNUM;比较数值。
INCDI;读取下一个随机数。
LOOPSTEP2;循环四次逐个键值扫描,比较。
STEP3:
;将成绩转换对应评分。
MOVAX,RESULT
CMPAL,4
JENICE
CMPAL,3
JEGOOD
CMPAL,2
JEPASS
FAIL:
;成绩小于2输出FAIL。
MOVAH,0FH
MOVBUF[0],AH
MOVAH,0AH
MOVBUF[1],AH
MOVAH,1H
MOVBUF[2],AH
MOVBUF[3],AH
JMPSTEP4
PASS:
;成绩为2输出PASS。
MOVAH,21H
MOVBUF[0],AH
MOVAH,0AH
MOVBUF[1],AH
MOVAH,5H
MOVBUF[2],AH
MOVBUF[3],AH
JMPSTEP4
GOOD:
;成绩为3输出GOOD。
MOVAH,6H
MOVBUF[0],AH
MOVAH,22H
MOVBUF[1],AH
MOVBUF[2],AH
MOVAH,0H
MOVBUF[3],AH
JMPSTEP4
NICE:
;成绩为4输出NICE。
MOVAH,10H
MOVBUF[0],AH
MOVAH,1H
MOVBUF[1],AH
MOVAH,0CH
MOVBUF[2],AH
MOVAH,0EH
MOVBUF[3],AH
JMPSTEP4
STEP4:
MOVCX,9000
STP5:
CALLFARPTRDISPLAY;显示评分。
LOOPSTP5;闪烁维持评分显示。
MOVAH,4CH
INT21H
CODE1SEGMENT
ASSUMECS:
CODE1
RDNUMPROCFAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI;寄存器保护。
DO1:
MOVAH,2CH;2CH号功能调用,
取系统时间:
DL存放毫秒
INT21H
MOVAL,DL;将毫秒值除以5,调整随机偏移量的取值在0-4之间。
MOVAH,0
MOVBL,5
DIVBL;AH是一个0-4的随机数去查询伪随机表。
RDNUM
RET
获取系统时间产生随机数
随机数查表获得伪随机序列
序列依次载入BUF
LEADI,TABLE3
RDSCAN:
MOVAL,[DI];将随机表内容放入AL。
INCDI
INCDI;指向转换表下一个查找字节。
CMPAL,AH;比较AL,AH。
JNZRDSCAN;不等则继续查找。
MOVAL,[DI-1];相等则开始查表对BUF赋值。
MOVBUF[0],AL
MOVAL,[DI+1]
MOVBUF[1],ALMOVAL,[SI+3]MOVBUF[2],ALMOVAL,[SI+5]MOVBUF[3],AL
POPDI
POPDX
POPCX
POPBX
POPAX
RET;返回。
RDNUMENDPCODE1ENDS
CODE2SEGMENT
ASSUMECS:
CODE2
DISPLAYPROCFAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
PUSHSI;寄存器保护。
MOVCX,4;循环显示4个数码管。
LEADI,BUF;DI指向输入的数据。
MOVAH,00001000B;由左至右显示。
DO2:
MOVBL,[DI];将输入数据放入BL。
LEASI,TABLE2;SI指向由BUF
到LED数码管的转换表。
MOVDX,0EE00H;DX指向A口地址。
MOVAL,0FFH;显示为空。
OUTDX,AL;将AL内容显示。
DO3:
MOVBH,[SI];将转换表内容放入BH。
MOVDH,0FFH
INCSI
INCSI;指向转换表下一个查找字节。
CMPBL,BH;比较BL,BH。
JNZDO3;在转换表中查找对应值。
MOVDX,0EE01H;将DX指向B口。
MOVAL,AH;给AL赋值(应显示那个数码管。
OUTDX,AL;控制哪个管显示。
MOVDX,0EE00H;将DX指向A口。
MOVAL,[SI-1];查找到的数码管值写入AL。
OUTDX,AL
DELAY:
;维持显示,使数码管数据显示清晰。
PUSHCX
PUSHAX
MOVAX,200
REP1:
;用两个循环来控制时延。
MOVCX,1000
REP2:
CX=4
随机数查表转换
8255输出待显值
时延,维持显示
更新待显值和数码管
CX=0?
RET
CX-1
DISPLAY
LOOPREP2
DECAX
CMPAX,0
JNZREP1;AX不为0继续循环。
POPAX
POPCX
RORAH,1;循环左移。
INCDI;更换下一个显示数据。
LOOPDO2;
POPSI
POPDI
POPDX
POPCX
POPBX
POPAX
RET
DISPLAYENDPCODE2ENDS
CODE3SEGMENT
ASSUMECS:
CODE3
SCANNUM1PROCFAR
PUSHAX
PUSHCX
PUSHDX
PUSHDI
PUSHSI;寄存器保护,
将BX作为参数传递的方式,不压栈。
MOVCX,SCANNUM;控制扫描循环次数。
SCANLOOP1:
CALLFARPTRDISPLAY;调用DISPLAY显示。
MOVAL,00001111B
MOVDX,0EE05H
ANDAL,LED
OUTDX,AL;74L374口高位置零。
MOVDX,0EE02H;控制C口。
INAL,DX;将C口内容读到AL。
ANDAL,00001111B;取出AL低四位。
CMPAL,00001111B;判断是否有键按下(无键按下时为全1。
JESCANLOOP3;无键值时跳转。
MOVAH,11101111B;扫描第一行。
SCANLOOP2:
MOVAL,AH;有键按下则开始扫描。
MOVDX,0EE05H
OUTDX,AL
MOVDX,0EE02H
INAL,DX
ANDAL,00001111B;取出AL低四位。
CMPAL,00001111B;判断是否有键按下(无键按下时为全1。
JNESCANLOOP4;有则译键码。
ROLAH,1;AH左移读取下一行。
CMPAH,11111110B;循环四次,各行扫完结束?
JNZSCANLOOP2;没有则进行下一次扫描。
SCANLOOP3:
LOOPSCANLOOP1
MOVBL,0FFH;超时标记。
JMPSCANLOOP7;循环结束,跳出扫描。
SCANLOOP4:
;键值查表。
SCAN
调用DISPLAY,显示
行输出全0
列输入值
=1111?
行输出初值AH=11101111
行输出AH
列输入值
=1111?
AH左环移
4行扫描完否?
N
N
Y
N
Y
调用DISPLAY,消抖
读入列值
列输入值
=1111?
调用DISPLAY,消抖
获得键值
将键值译码放入BL
DE→CX
Y
RET
CX=0?
BL=-1
Y
(CX-1→CX
N
N
ANDAH,0F0H;AH带有行号特征,AND后行特征位为0。
MOVBL,AL
ORBL,AH;行列OR获得键值。
MOVDI,OFFSETTABLE1;获取键值对应表的地址。
SCANLOOP5:
;键值和随机数映射。
MOVBH,[DI]
INCDI
INCDI
CMPBL,BH;键值和查表比较。
JNZSCANLOOP5
MOVBL,[DI-1];查到值放入BL。
SCANLOOP6:
CALLFARPTRDISPLAY;调用显示。
INAL,DX
ANDAL,00001111B
CMPAL,00001111B;判断按键是否松开。
JNESCANLOOP6;没有继续监听。
SCANLOOP7:
CALLFARPTRDISPLAY;消抖。
POPSI
POPDI
POPDX
POPCX
POPAX
RET
SCANNUM1ENDP
CODE3ENDS
CODE4SEGMENT
ASSUMECS:
CODE4
CMPNUMPROCFAR
PUSHCX
PUSHDX
PUSHSI;寄存器压栈保护。
MOVBH,[DI];BH装载随机数,BL装载键值。
CHANGE1:
;键值映射范围调整。
PUSHBX
PUSHAX
MOVAL,BL
MOVAH,0;数值载入AX。
MOVBL,4;除以4。
DIVBL
MOVDL,AH;余数载入DL。
POPAX
POPBX
CHANGE2:
;随机数映射范围调整。
PUSHBX
PUSHAX
MOVAL,BH
SUBAL,10H;将之前加上的10H减除。
MOVAH,0;数值载入AX。
MOVBL,4;除以4。
DIVBL
MOVDH,AH;余数载入DH。
POPAX
POPBX
CMPDL,DH
JNZWRONG1;不等则报错。
MOVCX,RESULT
INCCX
MOVRESULT,CX;正确则计数。
JMPEND1
WRONG1:
MOVDL,07H;按键出错后主板上的蜂鸣器报警。
MOVAH,02H;调用系统报错。
CMPNUM
BX载入随机数和键值
取余将值与四方向对应
比较随机数与键值
报错
相等?
成绩加1
RET
INT21HEND1:
POPSIPOPDX
POPCXRET
CMPNUMENDPCODE4ENDS
8255硬件原理及电路原理图一与CPU连接部分
8255能并行传送8位数据,所以其数据线为8根D0~D7。
由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。
此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。
各信号的引脚编号如下:
(1数据总线DB:
编号为D0~D7,用于8255与CPU传送8位数据。
(2地址总线AB:
编号为A0~A1,用于选择A、B、C口与控制寄存器。
(3控制总线CB:
片选信号、复位信号RST、写信号、
读信号。
当CPU要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。
二与外设接口部分
根据定义,8255有3个通道A、B、C与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。
各通道的引脚编号如下:
(1A口:
编号为PA0~PA7,用于8255向外设输入输出8位并行数据。
(2B口:
编号为PB0~PB7,用于8255向外设输入输出8位并行数据。
(3C口:
编号为PC0~PC7,用于8255向外设输入输出8位并行数据,当8255工作于应答I/O方式时,C口用于应答信号的通信。
三控制器
8255将3个通道分为两组,即PA0~PA7与PC4~PC7组成A组,PB0~PB7与PC0~PC3组成B组。
如图7.5所示,相应的控制器也分为A组控制器与B组控制器,各组控制器的作用如下:
(1A组控制器:
控制A口与上C口的输入与输出。
(2B组控制器:
控制B口与下C口的输入与输出。
当向A1=1,A0=1的端口寄存器(即控制寄存器发送D7=1的控制字时,其作用为方式控制字,各个位的含义如图所示
74LS374硬件原理及电路原理图
74LS374的管脚图如图:
74LS374作为八上升沿D触发器,主要端口的含义:
D0~D7数据输入端
OE三态允许控制端(低电平有效CP时钟输入端O0-O7输出端电路接线如下:
8255A
PA4
PA5
PA6
PA7
PB7
PB6
PB5
PB4
PB3
PA3
PA2
PA1
PA0
PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0
PB0
PB1
PB2
+5V
1
2
3
456789
1abc
d
e
fgDp
COM
5afb
gCOM
Dp
cde74LS374
D7
D6
D5
D4
D0
D1
D2
D3COM4
COM
COM3
COM
COM2
COM
COM1COMCOM0
COM
PC2
PC3
PC1
PC0
D4
D5
D6D7a
bcdefg
Dp
COM0COM1COM2
COM3
COM4COM5
三.其它技术要点
LED数码显示器扩展:
字型和字型码对应:
0,0C0H,01H,0F9H,05H,92H,06H,82H,0AH,88H,0CH,0C6H,0DH,0A1H,0EH,86H,0FH,84H,21H,8CH,22H,0A3H,10H,0C8H,11H,0F0H,12H,0C1H,13H,0C6H,14H,0F7H,15H,0CFH,16H,0FEH,17H,0F9H。
其中21H,22H代表P和O。
10H-17H
表示,
,
,,,。
动态显示原理:
建立显示缓冲区BUF:
存放字形代码,由运算程序写入BUF显示子程序DISPLAY动态扫描显示:
①关显示器:
位选信号无效(全0②送字形代码③送位选信号
④当前位亮2ms左右⑤重复①~④亮下一位显示子程序DISPLAY:
调用一次扫描6位,约12ms每秒调用24次左右DISPLAY可用作延时
矩阵键盘的扩展:
键盘采用行输入列输出的方式进行控制,输出不同的数值,让不同的行生效,通过列输入判断列数值,把输出数据和输入数据组合起来计算键值。
完成按键的确认。
行输出值列输入值11101111无键按下1110‘0’1101‘1’1011‘2’0111‘3’11011111无键按下1110‘4’
1101‘5’1011‘6’0111‘7’1011……键值转换:
采用查询方式获得键值,建立了TABLE1存储对应键值和特征值:
TABLE1DB11101110B,0,11101101B,01H,11101011B,02H,...
键盘的消除抖动处理:
当按键被按下时会引起抖动,抖动时间不超过15ms。
a
bc
d
e
fgDp
COMafb
gCOMDp
cde引脚图
......
COM
abcdefg
Dp
.共阳极
按键按下
前沿抖动
后沿抖动
处理的方法是:
(1当某按键被按下后,调用DISPLAY子程序,前沿消抖
(2识别按键是否抬起
(3按键抬起时也应消除抖动
随机序列生成:
系统调用产生随机时间值,在循环调用时数值有很大的相关性,随机性得不到保证。
采用伪随机码列表查询的方式由随机时间值查询序列获得随机序列,保证了随机值的不重复性。
四.心得体会:
通过本次设计,我们复习了微机原理与接口技术的相关知识,熟悉了8255,74LS374的相关技术,加深了对于汇编的理解和运用,掌握矩阵键盘和显示接口的硬件的设计方法,掌握键盘扫描程序和显示程序的编程方法,无论是软件还是硬件的相关方面,都有所收获。
由于设计的工作量比较大,代码较长,使得我们形成了工作规划的习惯与分治策略:
将每个小功能模块独立以便于维护和可读性,同时还加深了团队协作能力和沟通技巧。
实践出真知。
我们虽然学习过微机原理与接口技术,但是时间久远,有点陌生了。
通过本次设计,自己查询资料,自己写代码并维护,一个小小的失误都导致运行出错,由此每一个程序的错误都记忆深刻,在设计过程中必须万分谨慎,牢记每个知识点,这比书本上告诉我们的要来的高效得多。
最后,感谢在本次设计帮助过我们的老师,同学。
补充:
完整代码
DATASEGMENT
BUFDB4DUP(0;存储随机数。
TABLE1DB
11101110B,0,11101101B,01H,11101011B,02H,11100111B,03H,11011110B,04H,11011101B,05H,11011011B,06H,11010111B,07H
DB
10111110B,08H,10111101B,09H,10111011B,0AH,10110111B,0BH,01111110B,0CH,01111101B,0DH,01111011B,0EH,01110111B,0FH;键值对应表。
TABLE2DB0,0C0H,01H,0F9H,05H,92H,06H,82H,0AH,88H,0CH,0C6H,0DH,0A1H,0EH,86H,0FH,8EH
DB
21H,8CH,22H,0A3H,10H,0C8H,11H,0F0H,12H,0C1H,13H,0C6H,14H,0F7H,15H,0CFH,16H,0FEH,17H,0F9H;键值对应显示表。
TABLE3DB0,17H,1,11H,2,13H,3,15H,4,10H,5,12H,6,14H,7,16H;定义伪随机表
SCANNUMDW9000;定义扫描次数。
RESULTDW0;定义成绩。
LEDDB11111010B
DATAENDS
STACKSEGMENTSTACK
DW256DUP(?
;定义堆栈,预留256个单元。
TOPLABELWORD;标记栈顶。
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX;数据段段址送DS。
MOVSS,AX;堆栈段段址送SS。
MOVSP,OFFSETTOP;获取堆栈指针。
MOVDX,0EE03H;DX指向8255的D口。
MOVAL,10001001B;工作方式状态控制字,表示方式0,端口C输出。
OUTDX,AL;完成8255初始化。
STEP1:
CALLFARPTRRDNUM;调用RDNUM生成随机数,存储于BUF。
LEADI,BUF;DI传递当前正在比较的随机数。
MOVCX,4
STEP2:
CALLFARPTRSCANNUM1;扫描键值,返回值存于BL。
CALLFARPTRCMPNUM;比较数值。
INCDI;读取下一个随机数。
LOOPSTEP2;循环四次逐个键值扫描,比较。
STEP3:
;将成绩转换对应评分。
MOVAX,RESULT
CMPAL,4
JENICE
CMPAL,3
JEGOOD
CMPAL,2
JEPASS
FAIL:
;成绩小于2输出FAIL。
MOVAH,0FH
MOVBUF[0],AH
MOVAH,0AH
MOVBUF[1],AH
MOVAH,1H
MOVBUF[2],AH
MOVBUF[3],AH
JMPSTEP4
PASS:
;成绩为2输出PASS。
MOVAH,21H
MOVBUF[0],AH
MOVAH,0AH
MOVBUF[1],AH
MOVAH,5H
MOVBUF[2],AH
MOVBUF[3],AH
JMPSTEP4
GOOD:
;成绩为3输出GOOD。
MOVAH,6H
MOVBUF[0],AH
MOVAH,22H
MOVBUF[1],AH
MOVBUF[2],AH
MOVAH,0H
MOVBUF[3],AH
JMPSTEP4
NICE:
;成绩为4输出NICE。
MOVAH,10H
MOVBUF[0],AH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安电子科技大学 通信工程 学院 课程设计