西安电子科技大学通信工程学院课程设计Word文档格式.docx
《西安电子科技大学通信工程学院课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《西安电子科技大学通信工程学院课程设计Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
扫描键值,返回值
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
MOVAH,5H
GOOD:
成绩为3输出GOOD。
MOVAH,6H
MOVAH,22H
MOVAH,0H
NICE:
成绩为4输出NICE。
MOVAH,10H
MOVAH,0CH
MOVAH,0EH
STEP4:
MOVCX,9000
STP5:
CALLFARPTRDISPLAY;
显示评分。
LOOPSTP5;
闪烁维持评分显示。
MOVAH,4CH
INT21H
CODE1SEGMENT
ASSUMECS:
CODE1
RDNUMPROCFAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI;
寄存器保护。
DO1:
MOVAH,2CH;
2CH号功能调用,
取系统时间:
DL存放毫秒
MOVAL,DL;
将毫秒值除以5,调整随机偏移量的取值在0-4之间。
MOVAH,0
MOVBL,5
DIVBL;
AH是一个0-4的随机数去查询伪随机表。
RDNUM
RET
获取系统时间产生随机数
随机数查表获得伪随机序列
序列依次载入BUF
LEADI,TABLE3
RDSCAN:
MOVAL,[DI];
将随机表内容放入AL。
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
CODE2
DISPLAYPROCFAR
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;
显示为空。
将AL内容显示。
DO3:
MOVBH,[SI];
将转换表内容放入BH。
MOVDH,0FFH
INCSI
INCSI;
CMPBL,BH;
比较BL,BH。
JNZDO3;
在转换表中查找对应值。
MOVDX,0EE01H;
将DX指向B口。
MOVAL,AH;
给AL赋值(应显示那个数码管。
控制哪个管显示。
将DX指向A口。
MOVAL,[SI-1];
查找到的数码管值写入AL。
OUTDX,AL
DELAY:
维持显示,使数码管数据显示清晰。
MOVAX,200
REP1:
用两个循环来控制时延。
MOVCX,1000
REP2:
CX=4
随机数查表转换
8255输出待显值
时延,维持显示
更新待显值和数码管
CX=0?
CX-1
DISPLAY
LOOPREP2
DECAX
CMPAX,0
JNZREP1;
AX不为0继续循环。
RORAH,1;
循环左移。
更换下一个显示数据。
LOOPDO2;
POPSI
DISPLAYENDPCODE2ENDS
CODE3SEGMENT
CODE3
SCANNUM1PROCFAR
寄存器保护,
将BX作为参数传递的方式,不压栈。
MOVCX,SCANNUM;
控制扫描循环次数。
SCANLOOP1:
调用DISPLAY显示。
MOVAL,00001111B
MOVDX,0EE05H
ANDAL,LED
74L374口高位置零。
MOVDX,0EE02H;
控制C口。
INAL,DX;
将C口内容读到AL。
ANDAL,00001111B;
取出AL低四位。
CMPAL,00001111B;
判断是否有键按下(无键按下时为全1。
JESCANLOOP3;
无键值时跳转。
MOVAH,11101111B;
扫描第一行。
SCANLOOP2:
有键按下则开始扫描。
MOVDX,0EE02H
INAL,DX
JNESCANLOOP4;
有则译键码。
ROLAH,1;
AH左移读取下一行。
CMPAH,11111110B;
循环四次,各行扫完结束?
JNZSCANLOOP2;
没有则进行下一次扫描。
SCANLOOP3:
LOOPSCANLOOP1
MOVBL,0FFH;
超时标记。
JMPSCANLOOP7;
循环结束,跳出扫描。
SCANLOOP4:
键值查表。
SCAN
调用DISPLAY,显示
行输出全0
列输入值
=1111?
行输出初值AH=11101111
行输出AH
AH左环移
4行扫描完否?
N
Y
调用DISPLAY,消抖
读入列值
获得键值
将键值译码放入BL
DE→CX
BL=-1
(CX-1→CX
ANDAH,0F0H;
AH带有行号特征,AND后行特征位为0。
MOVBL,AL
ORBL,AH;
行列OR获得键值。
MOVDI,OFFSETTABLE1;
获取键值对应表的地址。
SCANLOOP5:
键值和随机数映射。
MOVBH,[DI]
键值和查表比较。
JNZSCANLOOP5
MOVBL,[DI-1];
查到值放入BL。
SCANLOOP6:
调用显示。
ANDAL,00001111B
判断按键是否松开。
JNESCANLOOP6;
没有继续监听。
SCANLOOP7:
消抖。
SCANNUM1ENDP
CODE3ENDS
CODE4SEGMENT
CODE4
CMPNUMPROCFAR
寄存器压栈保护。
MOVBH,[DI];
BH装载随机数,BL装载键值。
CHANGE1:
键值映射范围调整。
MOVAL,BL
MOVAH,0;
数值载入AX。
MOVBL,4;
除以4。
DIVBL
MOVDL,AH;
余数载入DL。
CHANGE2:
随机数映射范围调整。
MOVAL,BH
SUBAL,10H;
将之前加上的10H减除。
MOVDH,AH;
余数载入DH。
CMPDL,DH
JNZWRONG1;
不等则报错。
MOVCX,RESULT
INCCX
MOVRESULT,CX;
正确则计数。
JMPEND1
WRONG1:
MOVDL,07H;
按键出错后主板上的蜂鸣器报警。
MOVAH,02H;
调用系统报错。
CMPNUM
BX载入随机数和键值
取余将值与四方向对应
比较随机数与键值
报错
相等?
成绩加1
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
COM2
COM1COMCOM0
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
COMafb
gCOMDp
cde引脚图
......
abcdefg
.共阳极
按键按下
前沿抖动
后沿抖动
处理的方法是:
(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
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
CODE,DS:
DATA,SS:
STACK
START:
工作方式状态控制字,表示方式0,端口C输出。
调用RDNUM生成随机数,存储于BUF。
MOVCX,4
STEP2:
扫描键值,返回值存于BL。