版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题课二:8255实验李晓东指导老师:陆尧胜老师QQ:634091460一键盘扫描实验二点阵LED显示实验三模拟交通灯实验8255A内部结构:数据总线缓冲器内部控制线内部数据线D0~D7A组控制A组端口AA组端口C上部B组控制B组端口BB组端口C下部读写控制逻辑PC0~PC3PB0~PB7PC4~PC7PA0~PA7RDWRA0A1CSRESETCPU接口内部逻辑外设接口8255端口寻址3个数据端口(A、B、C)和1个控制端口控制字寄存器对A、B、C端口进行控制,以决定其工作方式。CS*A1A0读操作RD*写操作WR*000001010011读端口A读端口B读端口C非法写端口A写端口B写端口C写控制字8255A的工作方式方式0:基本输入输出方式与外设只有数据信号线,没有控制、状态等联络信号;适用于无条件传送和查询方式的接口电路;方式1:选通输入输出方式与外设除数据信号线外,还有控制、状态等联络信号;适用于查询和中断方式的接口电路;方式2:双向选通传送方式与外设除数据信号线外,还有控制、状态等联络信号;适用于查询和中断方式的接口电路实验一:键盘扫描实验图1所示为8255检测矩阵式键盘电路,其特点是由按键组成一个8×3矩阵,矩阵的行线和列线分别作为两个传输方向相反的I/O接口信号线,比如行线作为输出接口信号线,列线作为输入接口信号线,或反之。A口接键盘矩阵的行线,B口接矩阵键盘列线题目要求:将按下的按键所代表的字符显示在屏幕上检测特点:行线输出列线输入行线和列线:传输方向相反的I/O接口信号线键盘检测方案:按键检测思路:
1)确定有没按键按下2)若有按键按下,检测按下按键的键码
(键码即按键的行坐标和列坐标)3)根据键码表,查找相应的字码表,得到
按下按键所代表的字码,并在屏幕显示键盘检测方法:行扫描法和线反转法键码表和字码表的区别键码表:按键按下时对应输出口(A端口)和输入口(B端口)此时的值即表示该按键的键码,所有键码组成的表即键码表。字码表:即按键所代表的字符(如:0、1、2、A等)键码相当于按键的坐标,而字码即是按键所代表的字符。键码表的每一个键码与子码表的每一个字符是一一对应的。方法1:行扫描法STEP1:检查是否有键按下1)所有行输出‘0’;2)读列状态,检查是否全‘1’; 若否,则有可能有键按下3)延时20ms,再读列线,是否全‘1’; 若否,有键按下STEP2:读键码(行扫描法)1)行扫描; 逐行输出‘0’2)读列状态。 被扫描到的行有键按下,列状态才会改变按键消抖STEP3:键分析1)行值送(AL)2)列值送(AH)3)通过(AX)得键码STEP4:键处理1)查表 拿键值与键值表比较,相同则记录下对应的字符码2)显示字符按键抖动按键闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
影响:导致一次按键被CPU误读几次按键去抖动硬件方法:滤波延时电路或单稳态电路来避开按键的抖动时间。如下图
是由R和C组成的滤波延时消抖电路,只要使电容时间常数大于或等于20ms即可避开按键抖动的影响。软件方法:在第一次检测到有键按下时,执行延时程序(约20ms),使键的前沿抖动消失后再检测一次。行扫描的过程:0行1行2行3行4行5行6行7行0列1列2列123456789ABCDEF0+-×÷()R列线PB0-3行线PA0|PA7行号:第0行—第7行逐行输出0
行扫描值:A口逐行输出→
(FE,FD,FB,F7,EF,DF,BF,7F)
FEH
=
11111110
B(首次扫描)
FDH
=
11111101
B
(2次扫描)
FBH
=
11111011
B
(3次扫描)
F7H
=
1111
0111
B
(4次扫描)
EFH
=
1110
1111
B
(5次扫描)DFH
=
11011111B
(6次扫描)BFH
=
10111111B
(7次扫描)7FH
=
01111111
B
(8次扫描)列值:(FE,FD,FB)从B口低3位读进(高5位做置“1”处理)
FF:表示此行无键按下。FE、FD、FB:此行的0—2列有键按下。主程序流程图:
设置数据段,显示提示信息调键盘扫描子程序KEY字符是否为‘R’NY开始结束置8255A控制字82H,A口输出,B口输入A口输出低电平,B口读入数据标识位BL清零列线全为高电平(BL)=1?YN延时去抖动BL置1NYABB开始键盘扫描子程序流程图(行扫描法):按键消抖标志第1行输出低电平保存行值列线全为高电平行扫描完毕取行值行值左移1位指向下一行NYYNABC与表无任一键相同Y在屏幕上显示此键对应的字符从A口输出00,从B口读入列值输入字符的ASCII码存放在(DL)中键是否已释放返回YN列值送(AH),行值送(AL),通过(AX)查表BCNPA55 EQU 218H;端口A的地址PB55 EQU 219H;端口B的地址P55CTL EQU 21BH;控制字寄存器的端口地址DATA SEGMENTTABLE DW
FEFEH,FDFEH,FBFEH ;键码表
DW
FEFDH,FDFDH,FBFDH
DW
FEFBH,FDFBH,FBFBH
DW
FEF7H,FDF7H,FBF7H
DW
FEEFH,FDEFH,FBEFH
DW FEDFH,FDDFH,FBDFH DW FEBFH,FDBFH,FBBFH DW FE7FH,FD7FH,FB7FHCHAR DB ‘123’
;字符码表 DB ‘456’ DB ‘789’行扫描法源程序 [1of8]
DB ‘ABC’
DB
‘DEF’
DB
‘0+-’ DB ‘*/(’ DB ‘)R’ ;中间是空格MES
DB ‘INPUTANYKEYINTHE’ DB ‘SMALLKEYBOARD.’
DB
0AH,0DH ;回车换行
DB ‘ITWILLBEDISPLAY’ DB ‘ONTHESCREEN!’
DB ‘ENDWITH‘R’’ DB 0AH,0DH,‘$’DATA ENDSCODE SEGMENT行扫描法源程序 [2of8]
MAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATA
MOV DS,AX ;DS指向数据段
MOV DX,OFFSETMES
MOV AH,09 ;显示提示信息
INT 21HKY: CALL KEY ;调键盘扫描子程序 CMP DL,’R’ ;键入字符不是‘R’,转KY JNZ KY MOV AX,4C00H INT 21H RETMAIN ENDP行扫描法源程序 [3of8]
KEY PROC NEAR
;键盘扫描子程序
MOV AL,82H ;设置8255A控制字工作在方
;式0,端口A输出,端口B输入
MOV DX,P55CTL
OUT DX,AL;控制字送控制字寄存器端口BEGIN: MOV BL,00H ;标识位清零WAIT1: MOV AL,00H ;端口A输出全0,一起检测 MOV DX,PA55 OUT DX,AL MOV DX,PB55 IN AL,DX ;从端口B读入列值
AND AL,07H CMP AL,07H JZ BEGIN ;若为07H,无键按下行扫描法源程序 [4of8]
CMP BL,01H JZ KPRESS ;若为1,已消抖动
MOV CX,1000HDLY: LOOP DLY ;延时去抖
MOV BL,01H ;标识位置1 JMP WAIT1KPRESS: MOV AL,0FEH ;第一行输出0RSCAN: MOV DX,PA55 OUT DX,AL PUSH AX ;保存行值
MOV DX,PB55 IN AL,DX ;读入列值
AND AL,07H CMP AL,07H行扫描法源程序 [5of8]
JZ NEXTR ;列值全为1,跳转 OR AL,F8H ;得到键码列值
MOV AH,AL ;列值送(AH) POP BX ;弹出行值放BX
MOV AL,BL ;得出键码
MOV SI,OFFSETTABLE ;键码表首址
MOV DI,OFFSETCHAR ;字符码表首址
MOV CX,24TT: CMP AX,[SI] ;键码相符转NN JZ NN DEC CX JZ BEGIN ;比较完仍不相符跳转
ADD SI,2 INC DI JMP TT ;继续比较
行扫描法源程序 [6of8]
NN: MOV DL,[DI]
MOV AH,02 ;显示该键码对应字符
INT 21H
PUSH DX ;字符ASCII码入栈WAIT2: MOV AL,00 ;端口A输出全0
MOV DX,PA55
OUT DX,AL MOV DX,PB55 ;从端口B读进列值
IN AL,DX CMP AL,0FFH JNZ WAIT2 ;等待键释放
POP DX ;字符ASCII码出栈
JMP DONE
行扫描法源程序 [7of8]
NEXTR: POP AX CMP AL,07FH ;判端是否到最后一行了
JE BEGIN ROL AL,1 ;行值左移一位,指向下一行
JMP RSCAN DONE: RET;键盘扫描子程序结束KEY ENDPCODE ENDSEND START行扫描法源程序 [8of8]
原理:@由行线输出全“0”,读入列线,判有无键按下。@若有键按下,再将读入的列线值由列线输出,读进行线的值。@由第一步读进的列线值与
第二步读进的行线值则可
以得到代表此键的唯一的
键码。@线反转法因输入与输出线反过来用而得名。@优点是判键速度快,两次即可。0行1行2行3行4行5行6行7行0列1列2列123456789ABCDEF0+-×÷()R列线PB0-3行线PA0|PA7列线PB0|PB3方法2:线反转法线反转法图例通过两次输出与读入,即可得到被按下按键的键码,并存在AX中(AH:列位置;AL:行位置)0行1行2行3行4行5行6行7行0列1列2列123456789ABCDEF0+-×÷()R列线PB0-3行线PA0|PA7设:第2行/第0列结点有键按下首先:“00000000”→PA然后读PB:PB←“xxxxx110”将高5位置“1”:AH=11111110反转输出:“11111110”→PB然后读PA:PA←“11111011”(AL=11111011)列线PB0|PB3反转输出时应重新写入命令字:90H置8255A控制字82H,A口输出,B口输入A口输出低电平,B口读入数据标识位BL清零列线全为高电平(BL)=1?YN延时去抖动BL置1NYABB开始键盘扫描子程序流程图(线反转法):按键消抖标志D列值高5位置“1”,并保存列值通过AX查表,与表按键相同保存行值NYAC置8255A控制字90H,B口输出,A口输入B口输出列值,A口读入数据D在屏幕上显示此键对应的字符从B口输出00,从A口读入列值输入字符的ASCII码存放在(DL)中键是否已释放返回YNCKEY PROC NEAR
;线反转法子程序START1: MOV AL,82H ;设置8255A控制字
MOV DX,P55CTL ;工作在方式0,端
OUT DX,AL ;口A输出,端口B输入BEGIN: MOV BL,00H ;标识位清零WAIT1: MOV AL,00H ;端口A输出全0 MOV DX,PA55 OUT DX,AL MOV DX,PB55 IN AL,DX ;端口B读入列值 MOV AH,AL ;暂存列值
AND AL,07H CMP AL,07H JZ BEGIN ;若为07H,无键按下线反转法源程序 [1of4]
CMP BL,01H JZ KPRESS ;若为1,已消抖动
MOV CX,1000HDLY: LOOP DLY ;延时去抖
MOV BL,01H ;标识位置1 JMP WAIT1KPRESS: OR AH,F8H ;列值高5位置“1” PUSH AX ;保存列值 MOV
AL,90H;设置8255A控制字,工作在方
;式0,端口B输出,端口A输入
MOV DX,P55CTL ;
OUT DX,AL ;
MOV AL,AH ;端口B输出列值
MOV DX,PB55
OUT DX,AL
MOV DX,PA55
IN AL,DX ;端口A读入行置
线反转法源程序 [2of4]
POP BX ;弹出列值
MOV AH,BH ;得出键码
MOV SI,OFFSETTABLE ;键码表首址
MOV DI,OFFSETCHAR ;字符码表首址
MOV CX,24TT: CMP AX,[SI] ;键码相符转NN JZ NN DEC CX JZ START1 ;比较完仍不相符跳转
ADD SI,2 INC DI JMP TT ;继续比较
NN: MOV DL,[DI] MOV AH,02 ;显示该键码对应字符
INT 21H PUSH DX
;字符ASCII码入栈
线反转法源程序 [3of4]
WAIT2: MOV AL,00 ;端口A输出全0
MOV
DX,PB55
OUT DX,AL MOV DX,PA55 ;从端口B读进列值
IN AL,DX CMP AL,0FFH JNZ WAIT2 ;等待键释放
POP DX ;字符ASCII码出栈
JMP DONEDONE: RETKEY ENDPCODE ENDSEND START
线反转法源程序 [4of4]
行扫描法与线反转法的总结:行扫描法:从第一行至最后一行逐行发出低电平信号,检测列线端口,则得到的是全“1”信号,则没有按键按下;否则,则有按键按下。线反转法:先从行线输出全“0”信号,读入列线的值,若所按键按下,则得到的是非全“1”信号;接着将读到的列线值输入,然后读行线的值。线反转发比行扫描法速度快,但是每次反转输入时需重写控制寄存器。实验二:点阵LED显示实验8X8点阵LED由64个发光二极管组成,每个二极管在行线和列线的交叉点上,当对应点的某一行置1电平,某一列置0电平,则相应的二极管发亮。接线方案8位串入并出移位寄存器3态8位反相缓冲驱动器8位边沿触发器点阵led程序流程图设8255工作方式设置显示行指针取代码设置代码指针从8255的PC0、PB0口发送行指针代码指针加1显示行指针加1=0?NY初始化LEDADDEQU0A000H;LEDADDRESSPORTAEQU0B000H;PortAPORTBEQU0B001H;PortBPORTCEQU0B002H;PortCCADDREQU0B003H;控制字地址
MODEEQU80H;方式0,PA,PB,PC输出STACKSEGMENTSTACKSTADB64DUP(0)TOPDB0STACKENDSLED显示源程序 [1of9]
DATASEGMENTDISPLAY_CODEDB10H,0FEH,92H,0FEH,92H,0FEH,11H,1FH;"电"DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKLED显示源程序 [2of9]
11111111111111111111111111111111111STARTPROCNEAR;主程序
MOVAX,DATA;程序初始化
MOVDS,AX;送数据段地址
MOVAX,STACKMOVSS,AX;送堆栈段地址
LEASP,TOP;送栈指针
MOVAL,MODE;初始化8255MOVDX,CADDROUTDX,AL;输出控制字MOVAL,0MOVDX,PORTBOUTDX,AL;PB输出"0"LED显示源程序 [3of9]
MOVDX,PORTCOUTDX,AL;C口输出"0"MOVDX,LEDADD;列数据
MOVAL,00H;全灭
OUTDX,AL
RD_DISP:MOVBL,01H;BL存在行数据
MOVCX,08;8行,循环8次
MOVSI,OFFSETDISPLAY_CODERDISP_1:MOVDX,LEDADDMOVAL,00H;全灭
OUTDX,ALLED显示源程序 [4of9]
MOVAL,BL;行数据送至ALCALLSEND_164;把AL对应的行开启
MOVAL,[SI];送列数据
INCSIMOVDX,LEDADDOUTDX,AL;点亮某一行MOVAH,00;时间常数
CALLDELAY;延时
SHLBL,1LOOPRDISP_1JMPRD_DISPSTARTENDPLED显示源程序 [5of9]
;延时子程序DELAYPROCNEARPUSHCXMOVAL,0A0HMOVCX,AXLOOP$POPCXRETDELAYENDPLED显示源程序 [6of9]
74LS164时序图74LS164内部结构;串入并出74LS164的驱动子程序;PC0->DATA;PB0->CLK;把寄存器AL的数输出到74LS164的Q7~Q0SEND_164PROCNEARPUSHAXPUSHCXMOVCX,0008HDLP:PUSHAX;保存8bits的数据MOVAH,00H;AH=0TESTAL,80H;测试D7是否为1JNEGN1;如果D7=0,则AH=00HMOVAH,01H;如果D7=1,则AH=01H
LED显示源程序 [7of9]
GN1:MOVDX,PORTBMOVAL,00H;时钟"0"OUTDX,ALMOVDX,PORTCMOVAL,AH;数据位
OUTDX,AL;放进数据,等待触发
MOVDX,PORTBMOVAL,01H;时钟"1"OUTDX,ALNOPLED显示源程序 [8of9]
MOVAL,00H;时钟"0"OUTDX,ALPOPAXSHLAL,1LOOPDLPPOPCXPOPAXRETSEND_164ENDPCODEENDSENDSTARTLED显示源程序 [9of9]
子程序运行结果:若AL=08H,74LS164的输出Q0-Q7为00001000。双色LED灯由一个红灯LED和绿灯LED管芯封装在一起,公共负端红灯:红色端高电平,绿色端低电平绿灯:红色端低电平,绿色端高电平黄灯:两端都高电平实验三:模拟交通灯实验交通灯变化规律:南北红灯,东西红灯东西南北01010101南北绿灯,东西红灯南北绿灯闪几次黄灯,东西红灯南北红灯,东西绿灯南北红灯,东西绿灯闪几次黄灯东西南北双色LED灯3态8路缓冲驱动8255与双色led接口电路端口地址:A口:0A000H;B口:0A001H;C:0A002H;命令口:0A003H模拟交通灯程序流程图设置8255各口为输出清LED四灯全红,延时南北绿灯,东西红灯,延时南北黄灯、绿灯闪三次南北黄灯,延时南北红灯,东西绿灯,延时东西黄灯、绿灯闪三次东西黄灯,延时初始化MODEEQU082H;方式0,PA,PC输出,PB输入
PORTAEQU0A000H;PortAPORTBEQU0A001H;PortBPORTCEQU0A002H;PortCCADDREQU0A003H;控制字地址CODESEGMENTASSUMECS:CODE交通灯源程序 [1of7]
STARTPROCNEARSTART:
MOVAL,MODE
MOVDX,CADDR
OUTDX,AL;输出控制字
MOVDX,PORTA
MOVAL,00H;全灭
OUTDX,AL
MOVAL,055H;全红
OUTDX,AL
CALLDELAY交通灯源程序 [2of7]
东西南北01010101;状态1:南北绿灯,东西红灯JIAO:MOVAL,5AHOUTDX,ALMOVCX,10LP1:CALLDELAYLOOPLP1交通灯源程序 [3of7]
东西南北01011010;状态2:南北黄灯、绿灯闪三次,东西红灯MOVCX,3LP2:MOVAL,5FH;南北黄灯OUTDX,ALCALLDELAY
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年Openai优化公司TOP3权威测评:9年资质壁垒+128家央媒直连谁的公司实力最硬
- 肝切除术围手术期管理专家共识解读
- 烧伤外科主治医师2025年专项训练卷
- 商业活动医疗保障服务协议
- 冷链药品监管法规精要
- 2025年临沂市市直医疗卫生事业单位招聘卫生类岗位工作人员考试真题
- 2025年中国能源建设集团安徽省电力设计院有限公司招聘真题
- 2025年红河州蒙自市人民医院等招聘考试真题
- 《数控加工编程与操作2》课件-3.1.3 基准点
- 2026江苏南京大学BW20260409物理学院科研人员招聘考试备考试题及答案解析
- 北京市第七届中小学生气象知识竞赛题及答案
- 数字经济赋能传统产业转型路径分析
- GB/T 12221-2025金属阀门结构长度
- 雨课堂学堂云在线《焊接结构(西安石大 )》单元测试考核答案
- 万用表原理及使用方法
- 5年(2021-2025)重庆中考物理真题分类汇编:专题24 力学实验(二)(解析版)
- 抵制和防范宗教向校园渗透
- 14.超声刀使用及维护中国医学装备协会团体标准TCAME19-2020
- GB/T 222-2025钢及合金成品化学成分允许偏差
- 眼科手术分级详细目录
- 幼儿园大班数学《玩具店开张》课件
评论
0/150
提交评论