8255键盘扫描与LED数码管显示-实验1-2

合集下载

8255控制键盘与显示实验

8255控制键盘与显示实验

实验六 8255 控制键盘与显示实验一、实验目的1.掌握8255 输入、输出编程方法。

2.掌握阵列键盘和数码管动态扫描显示的控制方法。

二、实验内容用8255 可编程并行口做一个键盘、显示扫描实验,把按键输入的键值,显示在8255 控制的七段数码管上。

8255 PB 口做键盘输入线,PC 口做显示扫描线,PA 口做显示数据线。

三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图本实验需要用到 CPU 模块(F3 区)、8255 模块(C6 区)、8279 键盘与显示模块(E7 区)。

8255 键盘与显示电路原理图参见图7-1A、图7-1B,及前一实验的图6-1。

CS_8255 接8000H,则8255 状态/命令口地址为8003H,PA 口地址为8000H,PB 口地址为8001H、PC 口地址为8002H。

图7-1A 键盘显示电路1图7-1B 键盘显示电路2五、实验步骤1)系统各跳线器处在初始设置状态,S11E 和S12E 红开关全部打到下方(OFF)。

2)用8 位数据线对应连接8255 模块的JD3C(PA 口)、JD4C(PB 口)、JD5C(PC 口)到8279模块的JD3E、JD2E、JD4E;用导线连接8255 模块的CS_8255 到地。

3)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

4)在键盘上按任一单键,观察数码管的显示,数码管低位显示按键值。

D8255A EQU 8000H ;8255 PA 口地址D8255B EQU 8001H ;8255 PB 口地址D8255C EQU 8002H ;8255 PC 口地址D8255 EQU 8003H ;8255 状态/命令口地址LEDBUF EQU 50H ;显示缓存KEYVAL EQU 60H ;读到的键码ORG 0000HLJMP STARTORG 0100HSTART: MOV SP,#80H ;堆栈指针指到80HMOV DPTR,#D8255MOV A,#90H ;方式0,PB,PC口输出,PA口输入MOVX @DPTR,AMOV LEDBUF,#10H ;预置地址MOV LEDBUF+1,#11H ;低四位显示---MOV LEDBUF+2,#11HMOV LEDBUF+3,#11HMOV LEDBUF+4,#5 ;高四位显示8255MOV LEDBUF+5,#5MOV LEDBUF+6,#2MOV LEDBUF+7,#8KB_DIS:LCALL RD_KB ;读键盘MOV A,#0FFHCJNE A,KEYVAL,TOSHOW ;判读到键SJMP SHOW ;没有则继续读键TOSHOW:MOV LEDBUF,KEYVALSHOW: LCALL DISPLAYSJMP KB_DISRD_KB: ;键盘扫描MOV A,#02H ;扫描第一行MOV DPTR,#D8255CMOVX @DPTR,AMOV DPTR,#D8255A MOVX A,@DPTRMOV R1,#00H ;行首键号0CJNE A,#0FFH,KEYCAL ;判键是否按下MOV A,#01H ;扫描第二行MOV DPTR,#D8255CMOVX @DPTR,AMOV DPTR,#D8255AMOVX A,@DPTRMOV R1,#08H ;行首键号8CJNE A,#0FFH,KEYCALSJMP NOKEY ;无键按下KEYCAL: MOV R0,#08H ;计算键码循环8次SHIFT: RRC AJNC TORETINC R1DJNZ R0,SHIFTSJMP NOKEY ;无键按下TORET: MOV KEYVAL,R1RETNOKEY: MOV KEYVAL,#0FFH ;返回无键标志RETDisplay:MOV R7,#8 ;8个数码管MOV R5,#0MOV R0,#LEDBUFDLOOP:MOV A,R5RL A ;JD4E移到PC3、PC4、PC5RL ARL AANL A,#11111011BINC R5MOV DPTR,#D8255CMOVX @DPTR,A ;点亮对应的LEDMOV A,@R0MOV DPTR,#LEDSEGMOVC A,@A+DPTRINC R0MOV DPTR,#D8255BMOVX @DPTR,A ;显示数据LCALL DelayDJNZ R7,DLOOPRETDelay: PUSH R7MOV R7,#200DelayLoop:NOPDJNZ R7,DelayLoopPOP R7RETLEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB 7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,BDB 39H,5EH,79H,71H,00H,40H;C,D,E,F, ,-END六、实验结果及分析当我们载入程序后我们可以看到数码管上显示“8255-- ”。

实验5(8255并行接口键盘及显示实验)

实验5(8255并行接口键盘及显示实验)

8255接口键盘及显示综合设计实验(曹建文2009年10月10日)一、实验目的1、掌握8255的工作方式及应用编程。

2、自行设计、制作和连接基于8255并行接口的键盘及显示实验电路。

3、实现扫描式矩阵键盘的功能和作用。

二、实验设备PC机1台,TD-PIT实验台1台,实验元器件若干。

三、实验内容1、使用8255实现键盘按键和七段LED数码显示管显示功能。

2、根据实验要求自行设计实验线路图,制作和焊接实验电路板和实验元器件。

3、按照实验要求和实验电路图编写实验程序,使得按下不同的数字按键后数码管显示相应的数字值(4位数码管)。

4、按照实验要求设计和编写实验程序,实现普通计算器的加/减法功能。

四、实验原理1、8255结构及原理并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。

CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。

8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。

8255的内部结构及引脚如图-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图-2所示。

图-1:8255内部结构及引脚图(a)工作方式控制字(b)c口按位置位/复位控制字图-2:8255控制字格式(1)8255的内部结构如图-1所示,8255的内部结构由以下4个部分组成:(1)输入/输出端口A、B、C 。

这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。

A口和B口是一个独立的8位I/O口。

C口可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。

(2)A组和B组控制电路。

这是两组根据CPU命令控制8255工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255的工作方式,也可以根据编程命令来对C口的指定位进行置位/复位的操作。

键盘及LED显示实验

键盘及LED显示实验

实验三键盘及LED显示实验一、实验内容利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INT0,INT1),单片机扫描键盘,并把按键输入的键码一位LED 显示器显示出来。

二、实验目的及要求(一)实验目的通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力。

(二)实验要求1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。

2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。

三、实验条件及要求计算机,C51语言编辑、调试仿真软件及实验箱50台套。

四、实验相关知识点1.C51编程、调试。

2.扩展8255芯片的原理及应用。

3.键盘扫描原理及应用。

4.LED显示器原理及应用。

5.外部中断的应用。

五、实验说明本实验仪提供了8位8段LED显示器,学生可选用任一位LED显示器,只要按地址输出相应的数据,就可以显示所需数码。

六、实验原理图P1口桥接。

八、实验参考流程图1.主程序流程图2.外中断服务程序流程图外部中断0 外部中断1定时器0中断程序,用于消抖动:3.LED显示程序流程图九、C51语言参考源程序#include "reg52.h"unsigned char KeyResult; //存放键值unsigned char buffer[8]; //显示缓冲区bit bKey; //是否有键按下xdata unsigned char P_8255 _at_ 0xf003; //8255的控制口xdata unsigned char PA_8255 _at_ 0xf000; //8255的PA口xdata unsigned char PB_8255 _at_ 0xf001; //8255的PB口xdata unsigned char PC_8255 _at_ 0xf002; //8255的PC口code unsigned char SEG_TAB[] = { //段码0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0};sbit bLine0 = P3^2;sbit bLine1 = P3^3;//延时1msvoid Delay1ms(){unsigned char i;i = 0;while (--i);}//显示void Display(){unsigned char i = 0x7f;unsigned char j;for (j = 0; j < 8; j++){PA_8255 = i; //扫描PB_8255 = SEG_TAB[buffer[j]]; //段数据i = i / 2 + 0x80;Delay1ms();}}//更新显示缓冲区数据void RefurbishData(){char i;for (i = 7; i >0; i--)buffer[i] = buffer[i-1];buffer[0] = KeyResult;}void Int0Int() interrupt 0{unsigned char i = 0x80;unsigned char KeyResult0 = 0x0;EX0 = 0; //关外部中断0P_8255 = 0x89; //PC口输入bLine0 = 0; //P3.2作行输出while (i){if ((PC_8255 & i) == 0)break;KeyResult0++;i >>= 1;}P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0;bLine0 = 1;if (i){TH0 = 60; //定时中断计数器初值TL0 = 176; //定时50msTR0 = 1;KeyResult = KeyResult0;}IE0 = 0; //清除中断EX0 = 1; //开外部中断0}void Int1Int() interrupt 2{unsigned char i = 0x80;unsigned char KeyResult0 = 8;EX1 = 0; //关外部中断0P_8255 = 0x89; //PC口输入bLine1 = 0; //P3.2作行输出while (i){if ((PC_8255 & i) == 0)break;KeyResult0++;i >>= 1;}P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0;bLine1 = 1;if (i){TH0 = 60; //定时中断计数器初值TL0 = 176; //定时50msTR0 = 1;KeyResult = KeyResult0;}IE1 = 0; //清除中断EX1 = 1; //开外部中断0}//50ms中断服务程序void INT_Timer0(void) interrupt 1{if (((KeyResult < 8) && !bLine0) ||((KeyResult >= 8) && !bLine1)){bKey = 1; //有键按下,键值在KeyResult中}TR0 = 0;}void main(){char i;bKey = 0; //没有键按下TMOD = 1; //定时器0:方式一P_8255 = 0x80; //8255的PA、PB、PC口全作输出口PC_8255 = 0x0;ET0 = 1; //开定时器0中断EX0 = 1; //开外部中断0EX1 = 1; //开外部中断1IT0 = 1; //边沿触发IT1 = 1; //边沿触发EA = 1; //允许中断for (i = 0; i < 8; i++)buffer[i] = 0x10;// TR0 = 1; //开定时器T0// bRefurbish = 1;while (1){if (bKey){bKey = 0;RefurbishData();}Display(); //调用显示}}十、实验实施步骤1.仔细阅读实验内容及要求,编写C51源程序。

8255键盘扫描与LED数码管显示-实验1-2

8255键盘扫描与LED数码管显示-实验1-2

读/写控 制部件
B组控制 部件
B组端口 B(8)
I/O PB7~PB0
CS
图9.9 8255编程结构
8255外部引脚

连接系统端的引线: D0~D7:数据线 CS:片选 RD:读控制 WR:写控制 RESET:复位 A1, A0:端口选择
A1 A0 0 0 0 1 1 0 1 1 选择 端口A 端口B 端口C 控制寄存器
PC
A1
A15~A19 地址 译码器
A0
PB CS
LED数码管显示屏 跳线冒 电源电路
8255并行接口 LED1 ~LED6 LED-A~LED-DP
CPU板座
3*8键盘
RL10~RL17 KA10~KA12
复位键
七、实验步骤
1、实验接线 CS0 CS8255(地址为04A0H); PA0~PA7(输入)RL10~RL17(列选择线); PB0~PB7(输出)发光二极管LED-A~LED-DP ; PC0~PC2(输出)KA10~KA12(行选择线) PC3(输出)LED1 2、编程并全速或单步运行。 3、全速运行时按动键盘,观察数码管的变化。 4、编写实验报告。
D0 ~ D7 CS RD WR RESET A1 A0
PA
PB
PC
8255外部引脚

连接外设端的引线:
PA0~PA7
D0 ~ D7 CS RD WR RESET A1 A0
PA
PB0~PB7
PC0~PC7
分别对应PA、PB、 PC三个8位输入/输 出端口
PB
三个端口可通过编程分别指 定为输入或输出口。
2.端口寻址方式
对20H端口的访问格式:直接寻址

键盘扫描及显示设计实验

键盘扫描及显示设计实验

【实验内容】将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。

键盘采用4×4键盘,每个数码管显示值可为0~F 共16个数。

实验具体内容如下:将键盘进行编号,记作0~F,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示本次按键的按键编号。

8255键盘及显示实验参考接线图如图1所示。

【实验步骤】1. 按图1连接线路图;2. 编写实验程序,检查无误后编译、连接并装入系统;3. 运行程序,按下按键,观察数码管的显示,验证程序功能。

【程序代码】MY8255_A EQU 0600HMY8255_B EQU 0602HMY8255_C EQU 0604HMY8255_CON EQU 0606HSSTACK SEGMENT STACKDW 16 DUP(?)SSTACK ENDSDA TA SEGMENTDTABLE DB 3FH,06H,5BH,4FHDB 66H,6DH,7DH,07HDB 7FH,6FH,77H,7CHDB 39H,5EH,79H,71Htable1 db 0dfh,0efh,0f7h,0fbh,0fdh,0fehcount db 0hDA TA ENDODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV SI,3000HMOV AL,03HMOV [SI],AL ;清显示缓冲MOV [SI+1],ALMOV [SI+2],ALMOV [SI+3],ALMOV [SI+4],ALMOV [SI+5],ALMOV DI,3005HMOV DX,MY8255_CON ;写8255控制字MOV AL,81HOUT DX,ALBEGIN: CALL DIS ;调用显示子程序CALL CLEAR ;清屏CALL CCSCAN ;扫描JNZ INK1JMP BEGININK1: CALL DISCALL DALL YCALL DALL YCALL CLEARCALL CCSCANJNZ INK2 ;有键按下,转到INK2JMP BEGIN;========================================;确定按下键的位置;========================================INK2: MOV CH,0FEHMOV CL,00HCOLUM: MOV AL,CHMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXL1: TEST AL,01H ;is L1?JNZ L2MOV AL,00H ;L1JMP KCODEL2: TEST AL,02H ;is L2?JNZ L3MOV AL,04H ;L2JMP KCODEL3: TEST AL,04H ;is L3?JNZ L4MOV AL,08H ;L3JMP KCODEL4: TEST AL,08H ;is L4?JNZ NEXTMOV AL,0CH ;L4KCODE: ADD AL,CLCALL PUTBUFPUSH AXKON: CALL DISCALL CLEARCALL CCSCANJNZ KONPOP AXNEXT: INC CLMOV AL,CHTEST AL,08HJZ KERRROL AL,1MOV CH,ALJMP COLUMKERR: JMP BEGIN;======================================== ;键盘扫描子程序;======================================== CCSCAN: MOV AL,00HMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXNOT ALAND AL, 0fh;call DISRET;======================================== ;清屏子程序;======================================== CLEAR: MOV DX,MY8255_BMOV AL,00HOUT DX,ALRET;======================================== ;显示子程序;========================================DIS: PUSH AXMOV SI,3000HMOV DL,0DFHMOV AL,DLmov count,0hAGAIN: PUSH DXMOV DX,MY8255_AOUT DX,ALMOV AL,[SI]MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,[BX]MOV DX,MY8255_BOUT DX,ALCALL DALL YINC SIPOP DXMOV AL,DLTEST AL,01HJZ OUT1ROR AL,1MOV DL,ALJMP AGAINOUT1: POP AXRET;====== 延时子程序======DALL Y: PUSH CXMOV CX,0006HT1: MOV AX,009FHT2: DEC AXJNZ T2LOOP T1POP CXRET;======================================== ;存键盘值到相应位的缓冲中;======================================== PUTBUF:push dimov di,3000hmov si,diMOV [SI],10h ;清显示缓冲MOV [SI+1],10hMOV [SI+2],10hMOV [SI+3],10hMOV [SI+4],10hMOV [SI+5],10hpop diMOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3005H GOBACK: RETCODE ENDSEND START。

8255扫描键盘、显示实验

8255扫描键盘、显示实验

实验九8255扫描键盘、显示实验一.实验要求利用8255可编程并行口做一个扫描键盘实验,把按键输入的键码,显示在由8279控制的七段数码管上。

8255PA口做键盘输入线,PB口作扫描线。

二.实验目的1.掌握8255编程方法。

2.掌握扫描键盘和显示的编程方法。

三.实验电路及连线CS8255接8500H,则命令字地址为8506H,PA口地址为8500H,PB口地址为8502H,PC口地址为8504H。

CS8279接8700H,则8279的状态口地址为8701H; 8279的数据口地址为8700H;模块中的十个短路套都套在8255侧。

四.实验说明在PA口与PB口组成的64点阵列上,把按键接在不同的点上,将得到不同的键码,本实验采用8×2的阵列,共可按16个键。

显示部分由8279控制,由7407驱动8位数码管显示。

五.实验程序框图主程序框图读键显示部分框图六.实验程序:D8255 EQU 8506H ;8255状态/数据口地址D8255A EQU 8500H ;8255 PA口地址D8255B EQU 8502H ;8255 PB口地址Z8279 EQU 8701H ;8279状态口地址D8279 EQU 8700H ;8279数据口地址DISPTR EQU 08H ;当前显示位置KEYVAL EQU 09H ;读到的键码ORG 0000HLJMP STARTORG 0040HSTART:MOV SP,#60HLCALL DELAY ;延时MOV DISPTR,#30H ;显示缓冲区头指针MOV DPTR,#D8255MOV A,#90H ;置8255状态;方式0,PB,PC口输出,PA口输入MOVX DPTR,AMOV DPTR,#Z8279 ;置8279命令字MOV A,#0D3HMOVX DPTR,A ;清LED显示MOV A,#00HMOVX DPTR,AMOV A,#38HMOVX DPTR,AMOV A,#0D1HKB_DIS:LCALL RD_KB ;读键盘MOV A,#0FFHCJNE A,KEYVAL,DISBUF ;判读到键SJMP KB_DIS ;没有则继续读键DISBUF:LCALL DISP ;把键移入显存LCALL DELAY ;延时消抖LCALL DELAYSJMP KB_DISDISP: ;显存依次前移MOV R1,#31H ;在最后加入新键值MOVE:MOV A,R1DEC R1MOV R1,AINC R1INC R1CJNE R1,#38H,MOVEMOV 37H,KEYVALMOV KEYVAL,#0FFHMOV DPTR,#Z8279MOV A,#90HMOVX DPTR,AMOV R0,#08HMOV R1,#30HMOV DPTR,#D8279LP: MOV A,R1MOVX DPTR,AINC R1DJNZ R0,LPRETRD_KB: ;键盘扫描MOV A,#02H ;扫描第一行MOV DPTR,#D8255BMOVX DPTR,AMOV DPTR,#D8255AMOVX A,DPTRMOV R1,#00HCJNE A,#0FFH,KEYCAL ;判键是否按下MOV A,#01H ;扫描第二行MOV DPTR,#D8255BMOVX DPTR,AMOV DPTR,#D8255AMOVX A,DPTRMOV R1,#08HCJNE A,#0FFH,KEYCALSJMP NOKEY ;无键按下KEYCAL: ;计算键码MOV R0,#08HSHIFT:RRC AJNC CALCINC R1DJNZ R0,SHIFTCALC: ;换算显示码MOV DPTR,#DL_DATMOV A,R1MOVC A,A+DPTRMOV KEYVAL,ARETNOKEY: MOV KEYVAL,#0FFH ;返回无键标志RETDELAY: MOV R0,#0H ;延时子程序DELAY1: MOV R1,#0HDJNZ R1,$DJNZ R0,DELAY1RETDL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,FEND实验十8279显示实验一.实验要求编制程序,利用8279及键盘显示接口电路,编程实现按键的读取,并将按键值显示在数码管上。

键盘扫描显示实验报告

键盘扫描显示实验报告

一、实验目的1. 理解键盘扫描的基本原理,掌握键盘扫描的方法。

2. 掌握数码管显示的基本原理,实现键盘扫描信息的实时显示。

3. 熟悉8255并行接口芯片在键盘扫描和数码管显示中的应用。

二、实验原理1. 键盘扫描原理:键盘扫描是指通过硬件电路对键盘按键进行检测,并将按键信息转换为可识别的数字信号的过程。

本实验采用行列式键盘,通过扫描键盘的行线和列线,判断按键是否被按下。

2. 数码管显示原理:数码管是一种用来显示数字和字符的显示器,由多个发光二极管(LED)组成。

本实验采用七段数码管,通过控制各个段(A、B、C、D、E、F、G)的亮灭,显示相应的数字或字符。

3. 8255并行接口芯片:8255是一款通用的并行接口芯片,具有三个8位并行I/O口(PA、PB、PC),可用于键盘扫描和数码管显示的控制。

三、实验设备1. 实验平台:PC机、8255并行接口芯片、行列式键盘、七段数码管、面包板、导线等。

2. 软件环境:汇编语言编程软件、仿真软件等。

四、实验步骤1. 硬件连接:将8255并行接口芯片、行列式键盘、七段数码管连接到实验平台上,按照电路图进行连线。

2. 编写程序:使用汇编语言编写键盘扫描和数码管显示的程序。

(1)初始化8255并行接口芯片:设置PA口为输出端口,PB口为输出端口,PC口为输入端口。

(2)扫描键盘:通过PC口读取键盘的行线状态,判断是否有按键被按下。

若检测到按键被按下,读取对应的列线状态,确定按键的位置。

(3)数码管显示:根据按键的位置,控制数码管的段(A、B、C、D、E、F、G)的亮灭,显示相应的数字。

3. 仿真调试:使用仿真软件对程序进行调试,确保程序能够正确扫描键盘和显示数字。

五、实验结果与分析1. 实验结果:成功实现了键盘扫描和数码管显示的功能。

当按下键盘上的任意按键时,数码管上会显示对应的数字。

2. 分析:(1)键盘扫描部分:通过读取PC口的行线状态,判断是否有按键被按下。

当检测到按键被按下时,读取PB口的列线状态,确定按键的位置。

键盘及LED显示实验

键盘及LED显示实验

实验三键盘及LED显示实验一、实验内容利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INTO, INT1),单片机扫描键盘,并把按键输入的键码一位LED 显示器显示出来。

二、实验目的及要求(一)实验目的通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51 语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力。

(二)实验要求1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。

2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。

三、实验条件及要求计算机,C51语言编辑、调试仿真软件及实验箱50台套。

四、实验相关知识点1. C51编程、调试。

2 .扩展8255芯片的原理及应用。

3.键盘扫描原理及应用。

4.LED显示器原理及应用。

5.外部中断的应用。

五、实验说明本实验仪提供了8位8段LED显示器,学生可选用任一位LED显示器,只要六、实验原理图8255七、连线说明F4 区: CS 、A0、A1A3 区: CS1、A0、A1 B6 区:JP56 (PA 口)F4 区:JP41(C)B6 区:JP53 (PB 口)F4 区:JP42(B) B6 区:JP52 (PC 口)F4 区:JP47(A)A3 区:JP51F4 区:JP92(D) A3 区:P1.6、P1.7A3 区:INT0、INT1注:F4的D 无法与INT0(P3.2)、INT1(P3.3)直接连接,所以使用P1 口桥接。

八、实验参考流程图 1 .主程序流程图DS30LG4041AH123 B 45 6 78SEGB (8255 PB6) / SEGC (8255 PB5)4 SEGD (8255 PB4) —2 SEGE (8255 PB3)—1 SEGA (8255 PB7) 11 SEGH (8255 PB0) JP42 ab ac 口:口gdpdPGND42af「g ]b 口dpGND3am p GND28 adpGND16DS29LG4041AHSEGH 3SEGA 11 SE( SEGC 4 SEGD 2 SEGE 1a b c d e f g dpadd c paGND3aGND2adpGND1GND46 JP41(PA7)(8255 PA6)(8255 PA5) (8255 PA4) (8255 PA3) (8255 PA2) (8255PA1)(8255 PA0)123 ;c6VCC R162 5.1KVCC |R1635.1KU36 DO 34D1 33 D2 32D3 31D4 30D5 29D6 28D7 27 RD 5WR 36 D0 PA0 D1 PA1 D2 PA2 D3 PA3 D4 PA4 D5 PA5 D6 PA6 D7 PA7 RD PB0 WR PB1 A0 PB2 A1 PB3 RESET PB4 CSPB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC74 PA0 3PA1 2PA21PA3 40 ~PA4~ 39 PA5 38 PA6 37 PA7 18 PB019 PB1 20 PB2 21PB3PB4 23 PB5 24 PB6 25 PB714 严 PC015 PC1 16 PC2 '17 PC3 13 PC4 ' 12 PC5 ' 11 PC6 10PC71 2 3 4 5 6 7 8 1 2 3 4 5 6 7 81 2 34 5 6 7 8 JP56JP53JP526 —— 7A ■B ■C ■D —E ■(8255 PC7) (8255 PC6) (8255 PC5) (8255_PC4)_ (8255 PC3) (8255 PC2) (8255 PC1) (8255 PC0)-JP92 1 2 3 5D6 7 8-JP47 1 2 35A6 7 8开始■-0- >按键标志8255初始化(PA, PB, PC 口作输出)0- >8255PC 口定时器0:方式一允许定时器0中断允许外部中断0 (行线0)允许外部中断1 (行线1)外部中断0、1边沿触发允许中断按键标志=11Y /2 •外中断服务程序流程图夕卜部中断0外部中断1■:开始.:■v8255PC 口改为输入关外部中断10->P3.3 (键的行线1)读8255PC 口转化为8..F的键值-> 变量01 !8255的PC 口改为输出1->P3.30->8255PC 口------- N—〈有键按下〉设置定时器0初值(50ms定时)开定时器0键值变量=变量01清外部中断1允许外部中断13. LED 显示程序流程图九、C51语言参考源程序#in elude "reg52.h" un sig ned char KeyResult; un sig ned char buffer[8]; bit bKey;xdata un sig ned char P_8255 _at_ 0xf003; xdata un sig ned char PA_8255 _at_ OxfOOO; xdata un sig ned char PB_8255 _at_ OxfOOl; xdata un sig ned char PC_8255 _at_ 0xf002; code un sig ned char SEG_TAB[] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0};sbit bLi ne0 = P3A 2; sbit bLi ne1 =卩3人3; II 延时1ms void Delay1ms() {un sig ned char i;■'返回II8255 的控制口II8255 的 PA 口II8255 的 PB 口 II8255 的 PC 口 II 段码II 存放键值//显示缓冲区 II 是否有键按下i = 0;while (--i);}// 显示void Display(){unsigned char i = 0x7f; unsignedchar j;for (j = 0; j < 8; j++){PA_8255 = i;PB_8255 = SEG_TAB[buffer[j]];i = i / 2 + 0x80;Delay1ms();}}// 扫描// 段数据// 更新显示缓冲区数据void RefurbishData(){char i;for (i = 7; i >0; i--)buffer[i] = buffer[i-1];buffer[0] = KeyResult;}void Int0Int() interrupt 0{unsigned char i = 0x80;unsigned char KeyResult0 = 0x0;EX0 = 0;P_8255 = 0x89; bLine0 = 0; // 关外部中断0 //PC 口输入//P3.2 作行输出while (i){if ((PC_8255 & i) == 0)break;KeyResult0++;i >>= 1;}P_8255 = 0x80;PC_8255 = 0;//8255 的PA、PC 口全作输出口IE1 = 0; EX1 = 1; }bLine0 = 1; if (i){TH0 = 60; TL0 = 176; TR0 = 1;KeyResult = KeyResult0;}// 定时中断计数器初值 // 定时 50msIE0 = 0; EX0 =1; } // 清除中断 // 开外部中断 0void Int1Int() interrupt 2 { unsigned char i = 0x80; unsigned char KeyResult0 = 8; EX1 = 0; P_8255 = 0x89; bLine1 = 0; // 关外部中断 0 //PC 口输入 //P3.2 作行输出while (i) { if ((PC_8255 & i) == 0) break;KeyResult0++; i >>= 1;}P_8255 = 0x80;PC_8255 = 0; bLine1 = 1;〃8255 的PA PB PC 口全作输出口if (i){TH0 60;TL0 = 176;TR0 1;}KeyResult = KeyResult0;// 定时中断计数器初值 // 定时 50ms// 清除中断 // 开外部中断 0//50ms 中断服务程序void INT_Timer0(void) interrupt 1{if (((KeyResult < 8) && !bLine0) || ((KeyResult >= 8) && !bLine1)){bKey = 1;}TR0 = 0;}void main(){char i;for (i = 0; i < 8; i++) buffer[i] = 0x10; // TR0 = 1; // bRefurbish = 1;while (1){if (bKey){bKey = 0;RefurbishData(); } Display();}}十、实验实施步骤1 .仔细阅读实验内容及要求,编写 C51 源程序。

8255和LED数码管显示实验

8255和LED数码管显示实验

实验八 8255和LED数码管显示实验二、实验电路实验电路如图2及图3所示。

图2 静态显示电路图3 动态显示电路五、实验项目1.静态显示:按图2连接好电路,将8255A的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。

编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

程序框图、源代码(含注释)及实验结果如下:1、静态显示;0-9程序:data segmentioport equ2400h-280hio8255a equ ioport+288hio8255ctr equ ioport+28bhled db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db0dh,0ah,'Input a num (0--9),other key is exit:',0dh,0ah,'$' data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255ctr ;使8255的A口为输出方式mov ax,80hout dx,alsss: mov dx,offset mesg1 ;显示提示信息mov ah,9int21hmov ah,1;从键盘接收字符int21hcmp al,'0' ;是否小于0jb exit ;若是则退出cmp al,'9' ;是否大于9ja exit ;若是则退出sub al,30h;将所得字符的ASCII码减30Hmov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,aljmp sss ;转SSSexit: mov ax,4c00h;返回int21hcode endsend start2.动态显示(选做):按图3连接好电路,七段数码管段码连接不变,位码驱动输入端S1S0接8255C口的PC1、PC0。

实验五8255和LED数码管显示实验

实验五8255和LED数码管显示实验

1.实验5静态显示实验参考程序如下:data segmentled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07hdb 7fh,67h,77h,7ch,39h, 5eh,79h,71hmesg1 db 0dh,0ah,'input a num(0-9)from keyboar:', 0dh,0ah,'$' data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,28bhmov al,80hout dx,almov dx,288hmov ax,00hout dx,alss0: mov dx,offset mesg1mov ah,09hint 21hmov ah,1int 21hcmp al,27jz ss3cmp al,61hjb ss1sub al,39jmp ss2ss1: cmp al,41hjb ss2sub al,7ss2: and al,0fhmov bx,offset ledxlatmov dx,288hout dx,aljmp ss0ss3: mov ah,4chint 21hcode endsend start2.实验5动态显示参考程序如下:code segmentassume cs:codestart: mov dx,28bhmov al,80hout dx,alss0: mov dx,28ahmov al,00hout dx,almov dx,288hmov al,06hout dx,almov dx,28ahmov al,08hout dx,alcall delaymov dx,28ahmov al,00hout dx,almov dx,288hmov al,5bhout dx,almov dx,28ahmov al,04hout dx,alcall delaymov dx,28ahmov al,00hout dx,almov dx,288hmov al,4fhout dx,almov dx,28ahmov al,02hout dx,alcall delaymov dx,28ahmov al,00hout dx,almov dx,288hmov al,66hout dx,almov dx,28ahmov al,01hout dx,alcall delayjmp ss0mov ah,4chint 21hdelay proc near ;延时子程序mov cx,100n1: loop n1retdelay endpcode endsend start附图1:如下所示,在实验台上设有四/两个共阴极七段数码管显示及驱动电路,段码为同相驱动器(输入1时对应的段亮),位码为反相驱动器(输入1时对应的数码管亮),从段码与位码的驱动器输入端(段码输入端:a、b、c、d、e、f、g、dp,位码输入端:s1、s2)输入不同的代码即可显示不同的数字或符号。

8255扫描键盘、显示实验

8255扫描键盘、显示实验

实验九8255扫描键盘、显示实验一. 实验要求利用8255可编程并行口做一个扫描键盘实验,的七段数码管上。

8255PA 口做键盘输入线,二. 实验目的 1•掌握8255编程方法。

2•掌握扫描键盘和显示的编程方法。

三. 实验电路及连线CS8255接8500H ,则命令字地址为 8506H,PA 口地址为 8500H , PB 口地址为8502H , PC 口地址为8504H 。

CS8279接8700H ,贝U 8279的状态口地址为 8701H; 8279的数据口地址为 8700H; 模块中的十个短路套都套在8255侧。

四.实验说明在PA 口与PB 口组成的64点阵列上,把按键接在不同的点上,将得到不同的键码,本 实验采用8疋的阵列,共可按16个键。

显示部分由 8279控制,由7407驱动8位数码 管显示。

五•实验程序框图那岀DO mDJ E IM 惦 肋的JUJA1砰C327 • •: 154 V12 ■ 6 P ------------------ VCC把按键输入的键码, PB 口作扫描线。

显示在由8279控制六.实验程序:D8255 EQU 8506H ;8255 状态 / 数据口地址 D8255A EQU 8500H ;8255 PA 口地址D8255B EQU 8502H ;8255 PB 口地址Z8279 EQU 8701H ;8279 状态口地址D8279 EQU 8700H ;8279 数据口地址DISPTR EQU 08H 当前显示位置KEYVAL EQU 09H 读到的键码ORG 0000HLJMP STARTORG 0040HSTART:MOV SP,#60HLCALL DELAY 延时MOV DISPTR,#30H 显示缓冲区头指针MOV DPTR,#D8255MOV A,#90H ;置 8255 状态;方式0,PB,PC 口输出,PA 口输入MOVX @DPTR,AMOV DPTR,#Z8279 置 8279 命令字MOV A,#0D3HMOVX @DPTR,A 清 LED 显示MOV A,#00HMOVX @DPTR,A主程序框图 分框图读键显示部MOV A,#38HMOVX @DPTR,AMOV A,#0D1HKB_DIS:LCALL RD_KB 读键盘MOV A,#0FFHCJNE A,KEYVAL,DISBUF 判J读至U键SJMP KB_DIS ;没有则继续读键DISBUF: LCALL DISP ;把键移入显存LCALL DELAY延时消抖LCALL DELAYSJMP KB_DISDISP:;显存依次前移MOV R1,#31H ;在最后加入新键值MOVE:MOV A,@R1DEC R1MOV @R1,AINC R1INC R1CJNE R1,#38H,MOVEMOV 37H,KEYVALMOV KEYVAL,#0FFHMOV DPTR,#Z8279MOV A,#90HMOVX @DPTR,AMOV R0,#08HMOV R1,#30HMOV DPTR,#D8279LP: MOV A,@R1MOVX @DPTR,AINC R1DJNZ R0,LPRETRD_KB:;键盘扫描MOV A,#02H ;扫描第一行MOV DPTR,#D8255BMOVX @DPTR,AMOV DPTR,#D8255AMOVX A,@DPTRMOV R1,#00HCJNE A,#0FFH,KEYCAL判键是否按下MOV A,#01H ;扫描第二行MOV DPTR,#D8255BMOVX @DPTR,AMOV DPTR,#D8255AMOVX A,@DPTRMOV R1,#08HCJNE A,#0FFH,KEYCALSJMP NOKE 丫无键按下KEYCAL:;计算键码MOV R0,#08HSHIFT:RRC AJNC CALCINC R1DJNZ R0,SHIFTCALC:;换算显示码MOV DPTR,#DL_DATMOV A,R1MOVC A,@A+DPTRMOV KEYVAL,ARETNOKEY: MOV KEYVAL,#0FFH返回无键标志RETDELAY: MOV R0,#0H延时子程序DELAY1: MOV R1,#0HDJNZ R1,$DJNZ R0,DELAY1RETDL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,FEND实验十8279显示实验一•实验要求编制程序,利用8279及键盘显示接口电路,编程实现按键的读取,并将按键值显示在数码管上。

8255键盘扫描与LED数码管显示

8255键盘扫描与LED数码管显示

十、实验程序
assume cs:code code segment org 100h start: mov dx,04a6h ;控制寄存器地址 mov ax,90h ;设置为A口输入,;B口输出,C输出 out 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时则停止该 循环
OUT DX,AL ;将AL的内容输出到地址为200H的端口

编程 1 :把8255 工作方式设定为: A 口指定为方式 0 , 输入, C 口为输出; B 口指定为方式 0 ,输出;设 8255控制字寄存器端口地址为04a6H。 分析:根据题目得工作方式命令代码是10010000B或
90H。


五、实验设备
MUT—Ⅲ型实验箱、8086CPU模块。
六、8255与8086及8255与键盘的电路连接
8255
D0~D7
系 统 总 线 IOW IOR A2 DB D0~D7 WR RD A1 PC KA10~KA12 (行选择线) LED1(位控) LED-A~LED-DP (段控) PA
RL10~RL17 (列选择线)
本实验中8255的地址分配如下: 端口A 04A0H 端口B 04A2H 端口C 04A4H 控制口 04A6H

实验一、LED显示控制、82C55A并行接口数码管显示控制实验

实验一、LED显示控制、82C55A并行接口数码管显示控制实验

实验⼀、LED显⽰控制、82C55A并⾏接⼝数码管显⽰控制实验实验1 LED显⽰控制、82C55A并⾏接⼝数码管显⽰控制⼀、实验⽬的和内容1.掌握三态门,锁存器构成简单I/O端⼝的原理及应⽤2.完成流⽔灯及其控制的编程实验3.进⼀步掌握8255的使⽤原理4.掌握动态LED数码显⽰的原理5.完成动态LED数码显⽰的编程实验(LED显⽰控制部分)⼆、实验电路及说明实验电路图1,2,3所⽰,74ALS273锁存器的输出控制LED发光管的亮暗(1:亮0:暗)74ALS273的CLK被⼀些地址线所控制,它的地址为60H(16进制) ADD7, ADD6, ADD5, ADD4, ADD3, ADD2, ADD1, ADD00 1 1 0 0 0 0 0只有这时7430与⾮门才输出低电平(⼋段LED是阴极型)在DOS下,它的真实地址为PCI接⼝板的I/O地址加上60H为真实地址。

如PCI 的I/O起始地址0为E000H , I/O起始地址1为E400H。

74ALS273的地址为E460H。

注意:PCI板卡分配了2块I/O空间,I/O空间0是分配给PCI板卡内部寄存器使⽤的,即9052专⽤,空间⼤⼩128BYTE。

I/O空间1是分配给PCI板卡⽤户电路使⽤的,其⼤⼩为256BYTE。

流⽔灯原理如下:K1、K2是⼋位拔动开关(位于区域F)的左边第1、2位。

K1=K2=H 发光管从上到下移位K1=L,K2=H 发光管从下到上移位KI=H,K2=L 发光管全部闪烁K1=K2=L-退出注:ON⽅向为L,OFF⽅向为HK1、K2为主板上J41数码拔动开关的1、2位。

图1图2图3三、程序⽅框图从上->下框图四、程序代码录⼊程序时,请特别注意”1”与英⽂字母”l”的区别,⽂件的扩展名为C,即⽂件名⼀定是??-??.C。

在每个源程序的开头必须加上如下的注解,并按各⼈实际填写。

/*源程序的⽂件名:实验序号(01-08)-实验组号(01-24).C实验名称:___________________________实验组号:___________________________学⽣姓名及学号:____________ ____________*/#include#include#include “PCIcard.h”int d1=0,m_bit=0x1;void main(){int err,rio,flagm;int m_k0();void m_k1();void m_k2();void m_k3();err=findPCIcard();if (err!=0){printf("The PCI card isn't found\n");flagm=0;}err=getPCIbase0();iobase0=iobase0&0xfffc;//从PCI配置空间读⼊的与地址空间有关的数据其bit 0位为1,printf("IOBase0=%xH\n",iobase0);//表明此空间为IO空间参与PCI总线地址译码err=getPCIbase1();iobase1=iobase1&0xfffc;printf("IOBase1=%xH\n",iobase1);err=getPCImembase1();err=getPCImembase0();membase0=membase0+membase1<<16;//左移16位,将⾼位地址变换成双字中的⾼位字printf("MEMBase0=%lxH\n",membase0);err=getPCIIRQ();printf("PCI IRQ = %d\n",err);//////////////////////////////////ioadd1=ioadd1+iobase1; //获取步进电机驱动端⼝地址flagm=1; printf("Press K1 and K2 to low to exit.\n"); //选择正、反转或退出do //主循环{rio=inportb(ioadd1); //从IO端⼝读⼊数据rio=rio&0x3; //保留低两位switch(rio) //判断数据并做相应处理{case 0: //为0时LED全亮flagm=m_k0();break;case 1: //为1时LED全部闪烁m_k1();break;case 2: //为2时LED从下到上循环点亮m_k2();break;case 3: //为3时LED从上到下循环点亮m_k3();break;default:break;}}while (flagm==1);//////////////////////////////////////return;}int m_k0() //LED全亮并退出程序{int flagk;flagk=0;return (flagk);}void m_k1() //LED闪烁{void delay1();if (d1==0));}else{outportb(ioadd1,0x0);}return;}void m_k2() //LED从下到上循环点亮{ void delay1();int temp;m_bit=m_bit|1;outportb(ioadd1,m_bit);delay1();return;}void m_k3() //LED从上到下循环点亮{ void delay1();int temp;temp=m_bitm_bit=m_bitm_bit=m_bit|0x80;outportb(ioadd1,m_bit);delay1();return;}void delay1() //延时{int i,j,a=0;for (i=1;i<=5000;i++){for (j=1;j<=10000;j++){a=a+0;}}return;}将PCIcard.h 与上述的C源程序存放在同⼀⽬录下, PCIcard.h的内容如下:#include#include#includeunsigned long int iobase0,iobase1,membase0,membase1;unsigned long int interrupt_line,ioadd1=0x60;unsigned char bh;unsigned char bl;int findPCIcard(void); //找寻PCI卡的总线号及设备号及功能号int getPCIbase0(void); //获得PCI卡的IO0的地址int getPCIbase1(void);int getPCImembase0(void);int getPCImembase1(void);int getPCIIRQ(void);struct dx{int dl;int dh;} mydx;int findPCIcard(void) //找寻PCI卡的总线号及设备号及功能号{union REGS regs;regs.h.ah=0xb1;regs.h.al=0x02; //寻找指定⼚商和设备号的PCI卡的位置regs.x.cx=0x8376;regs.x.dx=0x10eb; //输⼊要寻找的⼚商号和设备号regs.x.si=0x00; //输⼊要寻找的PCI卡索引号int86(0x1a,®s,®s); //调⽤指定的X86中断bl=regs.h.bl; //返回的设备号⾼5位,低3位为功能号bh=regs.h.bh; //返回的总线号return(regs.h.ah); //返回状态}int getPCIbase0(void) //获得PCI卡的IO0的地址{union REGS regs; //定义⽤C语⾔调⽤BIOS中断所⽤的寄存器组合regs.h.ah=0xb1; //调⽤PCI BIOS中断regs.h.al=0x09; //配置空间⽤字的⽅式读⼊regs.x.di=0x14; //PCI配置空间中基地址0的地址regs.h.bl=bl; //要读⼊配置空间的PCI卡的设备号和功能号regs.h.bh=bh; //要读⼊配置空间的PCI卡的总线号int86(0x1a,®s,®s); //调⽤指定的X86中断iobase0=regs.x.cx; //CX为返回的IO0的基地址return(regs.h.ah); //返回状态}int getPCIbase1(void){union REGS regs; //同上regs.h.ah=0xb1;regs.h.al=0x09;regs.x.di=0x1c; //PCI配置空间基地址1的地址regs.h.bl=bl;regs.h.bh=bh;int86(0x1a,®s,®s);iobase1=regs.x.cx;return(regs.h.ah);}int getPCImembase0(void){union REGS regs; //同上regs.h.ah=0xb1;regs.h.al=0x09;regs.x.di=0x18; //PCI配置空间存储器基地址0的低位地址regs.h.bl=bl; regs.h.bh=bh;int86(0x1a,®s,®s);membase0=regs.x.cx;return(regs.h.ah);}int getPCImembase1(void){union REGS regs; //同上regs.h.ah=0xb1;regs.h.al=0x09;regs.x.di=0x1a; //PCI配置空间存储器基地址0的⾼位地址regs.h.bl=bl; regs.h.bh=bh;int86(0x1a,®s,®s);membase1=regs.x.cx;return(regs.h.ah);}int getPCIIRQ(void){union REGS regs; //同上regs.h.ah=0xb1;regs.h.al=0x09;regs.x.di=0x3c; //PCI配置空间中断线的地址regs.h.bl=bl;regs.h.bh=bh;int86(0x1a,®s,®s);interrupt_line=regs.x.cx;return(regs.h.cl);}五、思考题:1、在图1中,从数据端⼝送出”1”使LED亮,还是使LED灭?2、将K1L、K2L这⼀点亮退出功能修改为:⾃上⽽下⼀个⼀个点亮,然后⾃下⽽上⼀个⼀个熄灭,循环不断。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本实验中8255的地址分配如下: 的地址分配如下: 本实验中 的地址分配如下 端口A 04A0H 端口 端口B 04A2H 端口 端口C 04A4H 端口 04A6H 控制口
; 行扫描键盘和列扫描键盘,确定被按键的行值和列值 行扫描键盘和列扫描键盘, mov cl,3 ;行数 行数 mov ah,0 mov al, 0fbh ; 0fbh=1111 1011B contin: 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则转移 比较结果不等于 则转移, pop ax ; 比较结果等于 即没有列线为低电平,( )=00fbh 比较结果等于0,即没有列线为低电平,(ax) 即没有列线为低电平,( ror al,1 ; fbh(1111 1011B)循环右移,( )=1111 1101检测下一行 ,(al) ( ) 检测下一行 loop contin ;循环扫描下一行,确定行 循环扫描下一行, 循环扫描下一行 jmp check0 ;若所有行都没有被按下,则返回 若所有行都没有被按下, 若所有行都没有被按下 则返回check0重新检测 重新检测 next: mov ch,cl ;保存行值至 保存行值至ch 保存行值至
五、实验设备
MUT— 型实验箱、8086CPU模块。 MUT—Ⅲ型实验箱、8086CPU模块。 模块
六、8255与8086及8255与键盘的电路连接 与 及 与键盘的电路连接
8255
DB D0~D7 系 统 总 线 IOW IOR A2 A1 A15~A19 ~ 地址 译码器 D0~D7 WR RD A1 A0 PB CS PC KA10~KA12 ~ 行选择线) (行选择线) LED1(位控 位控) 位控 LED-A~LED-DP ~ 段控) (段控) PA
A b c d e f g
*
二、键盘工作原理及键的识别方式
1 .键盘的工作原理 键盘的工作原理
键盘的结构
2 .键的识别 键的识别——行扫描 键的识别 行扫描
PC0 PC1 PC2
1
2
3
三、实验目的
掌握8255的编程原理及使用方法 掌握8255的编程原理及使用方法 8255
四、实验内容
用8255扩展扫描3X8行列式键盘,由一位LED数码管 8255扩展扫描3X8行列式键盘,由一位LED数码管 扩展扫描3X8行列式键盘 LED 显示。 显示。 设计出8255 8086接口对应硬件电路 8255与 接口对应硬件电路, 1、设计出8255与8086接口对应硬件电路,并完成相 应的连接; 应的连接; 调试对应8255 键盘、 8255、 2、调试对应8255、键盘、及数码管硬件接口电路及 相应接口软件 当用键盘输入时在数码管上显示相应值; 3、当用键盘输入时在数码管上显示相应值; 完成习题的内容。 4、完成习题的内容。
共阴极的情况下定义字形码: 共阴极的情况下定义字形码: 定义字形码 FECDBA9876543210
h—小数点 小数点
分类: 分类:
共阳极: 共阳极 公共端接 高电平“ 高电平“H” 发光段接 低电平“ 低电平“L”
a b c d e f g
+5V
共阴极: 共阴极 公共端接 低电平“ 低电平“L” 发光段接 高电平“ 高电平“H”
RL10~RL17 ~ 列选择线) (列选择线)
LED数码管显示屏 数码管显示屏 跳线冒 电源电路
8255并行接口 并行接口 LED1 ~LED6 LED-A~LED-DP ~
CPU板座 板座
3*8键盘 键盘 RL10~RL17 ~ KA10~KA12 ~ 复位键
七、实验步骤
1、实验接线 CS8255(地址为04A0H 04A0H); CS0 ↔CS8255(地址为04A0H); PA0~PA7( RL10~RL17(列选择线) PA0~PA7(输入)↔RL10~RL17(列选择线); PB0~PB7( LED-A~ PB0~PB7(输出)↔发光二极管LED-A~LED-DP ; PC0~PC2( KA10~KA12(行选择线) PC0~PC2(输出)↔KA10~KA12(行选择线) PC3( PC3(输出)↔LED1 编程并全速或单步运行。 2、编程并全速或单步运行。 全速运行时按动键盘,观察数码管的变化。 3、全速运行时按动键盘,观察数码管的变化。 编写实验报告。 4、编写实验报告。
PA
PB
PC
8255外部引脚 8255外部引脚 连接外设端的引线: 连接外设端的引线:
PA0~PA7 PB0~PB7 PC0~PC7
分别对应PA、 、 分别对应 、PB、 PC三个 位输入/输 三个8位输入 三个 位输入/ 出端口
D0 ~ D7 CS RD WR RESET A1 A0 PC PB PA
十、实验程序
assume cs:code code segment org 100h start: mov dx,04a6h ;控制寄存器地址 控制寄存器地址 mov ax,90h ;设置为 口输入,;B口输出 输出 设置为A口输入 口输出,C输出 设置为 口输入, 口输出 out 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时则停止该 有 则延迟清除抖动, 时则停止该 循环
编程1 8255工作方式设定为 工作方式设定为: 口指定为方式0 编程 1 : 把 8255 工作方式设定为 : A 口指定为方式 0 , 输入, 口为输出; 口指定为方式0 输出; 输入 , C 口为输出 ; B 口指定为方式 0 , 输出 ; 设 8255控制字寄存器端口地址为04a 控制字寄存器端口地址为04 8255控制字寄存器端口地址为04a6H。 分析:根据题目得工作方式命令代码是1001 分析:根据题目得工作方式命令代码是10010000B或
本实验中8255的地址分配如下: 的地址分配如下: 本实验中 的地址分配如下 端口A 04A0H 端口 端口B 04A2H 端口 端口C 04A4H 端口 04A6H 控制口
八、实验程序流程图
采用行扫描 法检测
九 、编写实验报告
包括实验预习内容,实验目的,实验内容, 包括实验预习内容,实验目的,实验内容, 实验步骤和正确的程序代码 。 注意: 注意: 1、编程前先在E盘目录下建一个文件夹,并取 编程前先在E盘目录下建一个文件夹, 一个英名名字,即名字中不能有汉字和数字。 一个英名名字,即名字中不能有汉字和数字。编完 程序将其存于该目录下。 程序将其存于该目录下。 2、做实验之前先取下跳线冒。 、做实验之前先取下跳线冒。 3、做完实验将实验箱右上角的CPU板卸下,再 、做完实验将实验箱右上角的CPU板卸下, CPU板卸下 关实验箱。 关实验箱。
工作方式 低电平) 输入 置0(低电平 低电平 高电平) 输出 置1(高电平 高电平 数据传送方向 PC口各数据线的状态(必要时) 口各数据线的状态(必要时) 口各数据线的状态
通过向8255的控制口写入控制字实现
方式控制字* 方式控制字
用于控制8255各端口的工作方式和数据传输方向 各端口的工作方式和数据传输方向 用于控制
位控字
控制PC端口在方式 (输出) 控制 端口在方式0(输出)时每一根输出线的状态 端口在方式
8255工作方式控制字格式 工作方式控制字格式
2.端口寻址方式 2.端口寻址方式
端口的访问格式: 对20H端口的访问格式:直接寻址 端口的访问格式 IN AL,20H ;从地址为 从地址为20H的端口输入一个字节到 的端口输入一个字节到AL 的端口输入一个字节到 OUT 20H,AL ;将AL的内容输出到地址为 的内容输出到地址为20H的端口 的内容输出到地址为 的端口 端口的访问格式: 对200H端口的访问格式:间接寻址 端口的访问格式 MOV DX,200H ;将端口地址送DX寄存器 将端口地址送 寄存器 IN AL,DX ;从地址为 从地址为200H的端口输入一个字节到 的端口输入一个字节到AL 的端口输入一个字节到 OUT DX,AL ;将AL的内容输出到地址为 的内容输出到地址为200H的端口 的内容输出到地址为 的端口
三个端口可通过编程分别指 三个端口可通过编程分别指 编程 定为输入或输出口。 定为输入或输出口。
8255的初始化 8255的初始化
方式0:基本输入 输出方式 方式 :基本输入/输出方式 方式1: 方式 :选通方式 方式2:双向方式(仅 口 方式 :双向方式 仅A口)
8255工作前必须初始化,初始化时需设置: 工作前必须初始化,初始化时需设置: 工作前必须初始化
90H。 90H。
初始化程序段为: 初始化程序段为: dx,04 04a mov dx,04a6h ;控制寄存器地址 mov out ax,90h ax,90h 90 dx,ax ;设置为A口输入,;B口输出,C输出 设置为A口输入, 口输出,C输出 ,C 8255初始化 ;8255初始化
相关文档
最新文档