1 / 23

6.2.4 8255A 的应用举例

6.2.4 8255A 的应用举例. 例:键盘接口. 键盘 编码键盘 非编码键盘 一、键盘工作过程: 1 、键盘输入信息(按键识别、按键代码的产生) ( 1 )检测是否有键按下; ( 2 )查出按下的是哪一个键; ( 3 )转换成约定的代码。 2 、消去抖动 等按键稳定后才检测键信息 3 、防止串键(多键). 编码键盘:自动提供被按键的编码信息(如 ASCII 码),并能同时产生一个选通脉冲通知微处理器。第二、三步用硬件完成。 优点:使用方便,需较多的硬件,价格昂贵。 非编码键盘:由开关矩阵组成,全部工作靠程序来实现。

tatum
Download Presentation

6.2.4 8255A 的应用举例

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 6.2.4 8255A的应用举例

  2. 例:键盘接口 • 键盘 编码键盘 • 非编码键盘 • 一、键盘工作过程: • 1、键盘输入信息(按键识别、按键代码的产生) • (1)检测是否有键按下; • (2)查出按下的是哪一个键; • (3)转换成约定的代码。 • 2、消去抖动 • 等按键稳定后才检测键信息 • 3、防止串键(多键)

  3. 编码键盘:自动提供被按键的编码信息(如ASCII码),并能同时产生一个选通脉冲通知微处理器。第二、三步用硬件完成。编码键盘:自动提供被按键的编码信息(如ASCII码),并能同时产生一个选通脉冲通知微处理器。第二、三步用硬件完成。 • 优点:使用方便,需较多的硬件,价格昂贵。 • 非编码键盘:由开关矩阵组成,全部工作靠程序来实现。 • 优点:需硬件少,价格便宜。 • 硬件:非编码键盘接口电路如图6-19。 • 8255A的A口方式0,行输出,B口方式0,列输入。 • 按下键,与对应行列短接,通,为低电平。 • 软件:负责按键识别,按键代码的产生,用延时程序消除键的抖动等问题。

  4. 6-19

  5. 二、键的识别 • 按行和列线上的电平来识别闭合键,有两种方法: • 1、行扫描法 • 先令所有行同时接地,再检查是否有列线为低电平,若有,则说明有键按下,再用扫描法确定哪个键。 • 第0行,PA0=0,检查列线是否低电平,若是,则有键按下,处在相交位置上。找到“0”位对应的行列编号。 • …… • 第7行,PA7=0,检查列线是否低电平,若是,则有键按下,处在相交位置上。

  6. 程序如下: • PORTA EQU 0FFF8H • PORTB EQU 0FFFAH • PORTC EQU 0FFFCH • PORTCN EQU 0FFFEH • …… • JTAB DB ‘0123456789ABCDEF’ • …… • MOV DX,PORTCN ;初始化程序 • MOV AL,82H;A口出,B口入 • OUT DX,AL

  7. WAITK: MOV DX,PORTA ;等待键闭合 • MOV AL,0 • OUT DX,AL • MOV DX,PORTB • IN AL,DX • CMP AL,0FFH • JZ WAITK • CALL DELAY ;延时20ms • ;再一次B口输入判断,去抖动 • ;确定按下的是哪个键:找到列线,保留数据,依 • ;次右移到进位位,判是否为低电平。 • ;工作单元:BL-键号,BH-行扫描值,CX-行数

  8. MOV BL,0 • MOV BH,11111110B • MOV CX,8 ; • FNDROW: MOV AL,BH • MOV DX,PORTA • OUT DX,AL • ROL BH,1 • MOV DX,PORTB • IN AL,DX • CMP AL,0FFH;实验只2列, • JNZ FNDCOL ;与03H比较

  9. ADD BL,8 ;实验只2列,用2 • LOOP FNDROW • JMP DONE • FNDCOL: ROR AL,1 • JNC RIGHT • INC BL • JMP FNDCOL • RIGHT: LEA SI,JTAB;产生代码 • MOV BH,0 • ADD BX,SI • MOV AL,[BX] • ;送显示或缓冲区等。

  10. 2、行反转法 • 先确定有键按下,即读入的列线值不为FFH。令 • 列线B口改为输出方式,输出刚读入的值; • 行线A口改为输入方式,读入行线值,则得到对应按下键的行列值。 • 例:9号键闭合,设为8*8 • 行线全0,读列值为11111101,再输出列线11111101后,第二次从行线上读得11111101得到列行值111111011111101B(FDFDH),对应键9。 • 每个键对应一个代码放在表中,程序通过查表确定按下哪个键。 • 实验中为8*2,则列值为00000001。

  11. TABLE DW 0FEFEH,0FEFDH,0FEFBH • DW 0FEF7H,…… • CHAR DB ‘0123456789ABCDEF’ • 此法遇到重键时, 列值上的0超过一个,因此无对应的键代码,可判出是重键,再重新查找,解决重键问题。不必再一次B口输入判断,去抖动。 • 初始化程序,等待键闭合程序同行扫描法。其他程序如下: PUSH AX ;保存列值 • PUSH AX • CALL DELAY • MOV DX,PORTCN • MOV AL,90H; • MOV DX,AL

  12. MOV DX,PORTB • POP AX • OUT DX,AL • MOV DX,PORTA • IN AL,DX • POP BX • MOV AH,BL;列值放AH中 • LEA SI,TABLE • LEA DI,CHAR • MOV CX,16 ;共16键 • LOOP1: CMP AX,[SI] • JZ KEYPRO

  13. ADD SI,2 • INC DI • LOOP LOOP1 • JMP START • …… • KEYPRO: MOV DL,[DI] • MOV AH,2 • INT 21H

  14. 例: LED/开关接口 • 开关设置的二进制信息由8255A的PB口输入,经程序转换为对应的7段LED的段选码(字形码)后,通过PA口输出,由7段LED显示开关二进制状态值,试编制其控制程序。 7段LED显示器如图6-20,接口电路如图6-23。 • 分析: • (1)PA口输出后经驱动器连7段LED显示器。 • (2)8255A设置为方式工作,PA口输出,PB口输入。方式选择控制字:10000010B=82H • (3)用8086CPU,片内地址A2A1,A0空,取0。8255A端口地址为:0FFF8H, 0FFFAH, 0FFFCH, 0FFFEH。(只低字节不同)

  15. 6-20

  16. 6-23

  17. (4)用指令XLAT实现转换。 • (5)控制程序: • DATA SEGMENT • SSEGCODE DB 0C0H,0F9H,0A4H, 0B0H • DB 99H,92H,82H,0F8H,80H • DB 98H,88H,83H,0C6H • DB 0A1H,86H,8EH • DATA ENDS • …… • MOV AX,DATA • MOV DS,AX

  18. MOV DX,0FFFEH ;初始化8255 • MOV AL,82H • OUT DX,AL • RDPORTB:MOV DL,0FAH ;PB口输入 • IN AL,DX • AND AL,0FH ;取低4位 • MOV BX,OFFSET SSEGCODE • XLAT ;转换 • MOV DL,0F8H ;从PA口输出 • OUT DX,AL

  19. MOV CX,56CH ;延时 • DELAY: DEC CX • JNZ DELAY • JMP RDPORTB ;重复 • (6)讨论 • 1)若驱动器为反相,则选码表全部求反。 • 2)若要循环显示0~F数字各5秒钟,且显示20遍。此时不用输入。 • 控制程序: MOV DX,0FFFEH ;初始化8255 • MOV AL,80H • OUT DX,AL

  20. MOV BL,20 • DISPLOP:MOV DI,OFFSET SSEGCODE • MOV CX,16 • LOP: MOV AL,[DI] • MOV DL,0F8H • OUT DX,AL • CALL DELAY5S ;要编写子程序 • INC DI • LOOP LOP • DEC BL • JNZ DISPLOP • HLT

  21. 例:模拟交通灯 • 编写程序,以8255作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟十字路口交通灯管理。 • PC4~PC7连DR1~DR4,PC0~PC3连DG1~DG4。 • 红+ 绿- —— 红 • 红- 绿+ —— 绿 • 红+ 绿+ ——黄 • 1~4对应北西东南。 • 延时子程序的时长参数可通过BX传送。

  22. 状态: 设按图接法,全部反相,位置:南东西北 • 红+ 绿+ 东、南 • PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 西 北 • 0 ) 0 0 0 0 1 1 1 1 红 红 • 1) 1 0 0 1 0 1 1 0 红 绿 • 2) 1 0 0 1 1 1 1 1 红 闪 • 1 0 0 1 0 1 1 0 绿 • 0 0 0 00 1 1 0黄 • 3) 0 1 1 0 1 0 0 1 绿 红 • 4) 0 1 1 0 1 1 1 1 闪 红 • 0 1 1 0 1 0 0 1 绿 • 0 0 0 0 1 0 0 1 黄

More Related