《8255键盘扫描与LED数码管显示课件.ppt》由会员分享,可在线阅读,更多相关《8255键盘扫描与LED数码管显示课件.ppt(21页珍藏版)》请在三一办公上搜索。
1、一、复习8255及端口的寻址方式,实验1 8255键盘扫描与LED数码管显示实验,8255功能特性 三个独立的8位并行输入/输出端口,各端口均 具有数据输入、输出能力;三种工作方式:0基本、1选通、2双向;可通过编程设置各端口的工作方式和数据传送 方向(入/出/双向)。,1.数导线(21根)2.下次实验时间是第7周,注意:,1.8255相关知识,8255的内部结构,C下半部,8255外部引脚,连接系统端的引线:,RESET:复位,A1,A0:端口选择,D0D7:数据线,三个端口可通过编程分别指 定为输入或输出口。,连接外设端的引线:PA0PA7PB0PB7PC0PC7,8255外部引脚,825
2、5的初始化,8255工作前必须初始化,初始化时需设置:工作方式数据传送方向PC口各数据线的状态(必要时)通过向8255的控制口写入控制字实现:方式控制字*用于控制8255各端口的工作方式和数据传输方向位控字控制PC端口在方式0(输出)时每一根输出线的状态,方式0:基本输入/输出方式方式1:选通方式方式2:双向方式(仅A口),输入输出,置0(低电平)置1(高电平),对20H端口的访问格式:直接寻址IN AL,20H;从地址为20H的端口输入一个字节到ALOUT 20H,AL;将AL的内容输出到地址为20H的端口对200H端口的访问格式:间接寻址MOV DX,200H;将端口地址送DX寄存器IN
3、AL,DX;从地址为200H的端口输入一个字节到ALOUT DX,AL;将AL的内容输出到地址为200H的端口,2.端口寻址方式,编程1:把8255工作方式设定为:A口指定为方式0,输入,C口为输出;B口指定为方式0,输出;设8255控制字寄存器端口地址为04a6H。分析:根据题目得工作方式命令代码是10010000B或90H。初始化程序段为:mov dx,04a6h;控制寄存器地址mov ax,90h;设置为A口输入,;B口输出,C输出out dx,ax;8255初始化,共阴极:公共端接低电平“L”发光段接高电平“H”,共阳极:公共端接高电平“H”发光段接低电平“L”,分类:,h小数点,*,
4、3.LED数码管,共阴极的情况下定义字形码:FECDBA9876543210,二、键盘工作原理及键的识别方式,键盘的结构,1.键盘的工作原理,2.键的识别行扫描,1 2 3,掌握8255的编程原理及使用方法,三、实验目的,用8255扩展扫描3X8行列式键盘,由一位LED数码管显示。1、设计出8255与8086接口对应硬件电路,并完成相应的连接;2、调试对应8255、键盘、及数码管硬件接口电路及相应接口软件3、当用键盘输入时在数码管上显示相应值;4、完成习题的内容。,四、实验内容,五、实验设备,MUT型实验箱、8086CPU模块。,六、8255与8086及8255与键盘的电路连接,RL10RL1
5、7(列选择线),LED-ALED-DP(段控),KA10KA12(行选择线),LED1(位控),复位键,3*8键盘,CPU板座,LED数码管显示屏,RL10RL17,LED1 LED6,LED-ALED-DP,KA10KA12,跳线冒,七、实验步骤,1、实验接线CS0 CS8255(地址为04A0H);PA0PA7(输入)RL10RL17(列选择线);PB0PB7(输出)发光二极管LED-ALED-DP;PC0PC2(输出)KA10KA12(行选择线)PC3(输出)LED1 2、编程并全速或单步运行。3、全速运行时按动键盘,观察数码管的变化。4、编写实验报告。,本实验中8255的地址分配如下:
6、端口A 04A0H端口B 04A2H端口C 04A4H控制口 04A6H,八、实验程序流程图,采用行扫描法检测,九、编写实验报告,包括实验预习内容,实验目的,实验内容,实验步骤和正确的程序代码。,注意:,1、编程前先在E盘目录下建一个文件夹,并取一个英名名字,即名字中不能有汉字和数字。编完程序将其存于该目录下。,3、做完实验将实验箱右上角的CPU板卸下,再关实验箱。,2、做实验之前先取下跳线冒。,十、实验程序,assume cs:codecode segment org 100hstart:mov dx,04a6h;控制寄存器地址 mov ax,90h;设置为A口输入,;B口输出,C输出 ou
7、t dx,ax;8255初始化check0:;check0检测是否有健被按下 mov ax,00h;C口的PC0、PC1、PC2作为行选择线 mov dx,04a4h;C口地址 out dx,ax;写入C口内容00H,即令所有行为低电平 mov dx,04a0h;A口地址 in ax,dx;读入A口的内容 cmp al,0ffh;判定是否有列线为低电平 je check0;没有,无闭合键,则循环等待 mov cx,05ffh;延迟常数,可以修改来改变延时时间 delay:loop delay;有,则延迟清除抖动,当cx=0时则停止该 循环,本实验中8255的地址分配如下:端口A 04A0H端口
8、B 04A2H端口C 04A4H控制口 04A6H,;行扫描键盘和列扫描键盘,确定被按键的行值和列值 mov cl,3;行数 mov ah,0 mov al,0fbh;0fbh=1111 1011Bcontin:push ax;将ax的内容(0fbh)入栈保存 mov dx,04a4h;C口地址 out dx,al;写入C口内容0fbh=1111 1011B,即将第三行置为低电平 mov dx,04a0h;A口地址 in al,dx;读入A口的内容 mov ah,al;将A口的内容送入ah cmp ah,0ffh;判断是否有列线为低电平 jne next;比较结果不等于0则转移,即有列线为低电
9、平 pop ax;比较结果等于0,即没有列线为低电平,(ax)=00fbh ror al,1;fbh(1111 1011B)循环右移,(al)=1111 1101检测下一行 loop contin;循环扫描下一行,确定行 jmp check0;若所有行都没有被按下,则返回check0重新检测next:mov ch,cl;保存行值至ch,mov cl,7;列值从0开始编号0-7begin0:shl ah,1;ah为A口的内容,逻辑左移1位,末位补0 jnc goon;无进位则转移,即可确定列 loop begin0;继续循环,确定列 jmp check0 goon:;计算显示码在discode中
10、的位置:(行数-1)*8+列值 mov bl,cl;保存列值至BL dec ch;行数减1 mov cl,3 shl ch,cl;左移三位即相当于减1之后的行数*8 add bl,ch;确定显示码在discode表中的偏移量,即(行数-1)*8+列值 mov bh,0 mov cx,bx;显示码在discode表中的偏移量送CX,display:;显示输出mov si,offset discode add si,cx;显示码偏移地址 mov dx,04a4h;C口地址 mov al,0fh out dx,al;写入C口内容,使位控(LED1)有效 mov al,si;取被按键的显示字形码送入al mov dx,04a2h;B口地址 out dx,al;将显示字形码送B口输出显示 nop nop jmp check0 discode db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h;(0-7)db 7fh,6fh,77h,7ch,39h,5eh,79h,71h;(8-F)db 01h,02h,04h,08h,10h,20h,40h,80h;(abcde fgh);显示字形码表 code endsend start,