8255和LED数码管显示实验
基于8255的LED显示串口通信机设计实验报告
基于8255的LED显示串口通信机设计一、设计要求(1)基本要求:1设计一串口通信程序,波特率9600,通过RS232串口自环。
自动循环发送数据串(设计在程序中)接收并存储和显示该数据串2数据串单次发送由按键启动,接收端显示数据串和数据串数、正确接收数和错误数。
3数据串选择发送(预存10种数据串),通过按键选择发送,接收、存储并按序显示。
(2)发挥部分:4数据串滚动显示。
5数据串滚动显示方向和速度可控6单片机与PC机的通信,单片可以发送任意ASCII字符串到PC机,PC机发送数据串到单片机,并在显示器上显示,格式和方法自定。
7设计波特率可变的通信程序,每次按键波特改变一次,对测通信。
8接收侧波特率自动跟踪,当发送端改变波特率后,定时地重复发送一数据串,检测接收端能正确接收和显示数据和波特率值。
二、要求分析根据提供的51单片机的串口通信机的要求,编写相对应的程序,实现其功能,并利用已有的硬件V14开发板来检验和实现基于8255的LED串口通信机功能。
要求熟悉单片机开发工具的使用,学会MeDwin,Keil,Protel等软件的使用方法。
熟悉实验板资源,学会程序的下载和运行,系统硬件调试方法。
用标准测试程序对实验板的各部分资源测试,并记录测试结果,维修不可用资源。
设计一能与PC机通信的串行通信终端.要求:学习使用单片机的内置串行接口,实现两机(单片机与PC机)的多种通信方法。
三、实验板功能模块结构四、总体方案的确定本次课程设计是在理论课程的基础上,目的在于培养我们的动手能力,通过电路设计、理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,并能结合实际的实验板进行下载测试。
在此基础上根据实验大纲的要求,按“51单片机课程设计选题表” 每两人一题(随机分配),实现其功能。
在考虑本次设计过程中,依据设计基本要求,并且根据所提供的实验板,研究其原理结构图,我们把8255器件用来扩展I/O 口,外接一4X4键盘,以及通过该I/O 口外接一LED 显示器。
利用8255A实现LED的流水点亮实验
outdx,al
;-
movdx,211h
moval,00000000b
outdx,al
movdx,210h
moval,40h
outdx,al
movdx,211h
moval,00000010b
outdx,al
;A
movdx,211h
moval,00000000b
outdx,al
moval,7fh
outdx,al
movdx,211h
moval,00100000b
outdx,al
;2
movdx,211h
moval,00000000b
outdx,al
movdx,210h
moval,5bh
outdx,al
movdx,211h
moval,00010000b
outdx,al
;5
movdx,211h
movdx,210h
moval,77h
outdx,al
movdx,211h
moval,00000001b
outdx,al
loop lp ;转至lp
jmplop ;跳至lop
hlt ;使处理器处于暂时停机状态.
codeends
end start
在数码管上显示“8255-A”。
三、实验分析
实验要求利用8255芯片8个开关来控制8个LED灯的开关。我们在课堂上学过8255有ABC三个口,可以输入和输入。因此首先可以想到的就是,把PA口A0-A7接8个波动开关K1-K7,并将A口调整为读入。同时将A口读入的信号用B口输出,这样就可以通过拨动开关来控制LED灯的明灭。为了让灯亮的时间足够人眼分辨出来,需要在程序里加入延时语句,其中加零语句就可以实现延时。
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并行接口键盘及显示实验)
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显示器的使用方法。
二、实验设备
MUT—Ⅲ型实验箱、8086CPU模块。
三、实验内容
输出LED的位选码和段选码,在七段LED显示器上循环显示8字。
四、实验原理介绍
显示器的段选码由8255A的PA口提供,显示器的位扫描信号由8255A的PB 口提供给共阴极LED数码管的公共端。
五、实验步骤
1、实验连线
将LED数码管右侧的短路快取下。
8255A的PA0~PA7分别连LED-A~LED-DP,8255A的PB0~PB5分
别连接LED1~LED6,8255CS连CS0。
2、编写调试并运行程序,在LED显示器上显示8字并循环,调
整延时程序,观察运行结果。
六、实验提示
1、各端口地址:
PA口:04A0H
PB口:04A2H
PC口:04A4H
控制口:04A6H
2、LED显示的方法为动态显示。
七、实验报告要求
1、画出程序框图。
2、编写并整理经过运行,证明是正确的源程序,并加以注释。
用8255设计LED显示器接口实验
用8255设计LED显示器接口实验本文结合实验教学需要,介绍了用8255设计LED显示器接口实验的过程。
关键词:微机原理及应用;8255;LED;接口“微机原理及应用”是工科类专业的基础课,该课程比较抽象,因此实验教学起着至关重要的作用。
通过实验学生可以对比较抽象的命令、程序、输入输出接口电路加深理解。
现在仍有许多高校使用北京理工达盛科技有限公司的8086实验箱,但由于受到实验条件的限制,往常的做法是在有限的课堂时间内安排一些旨在验证理论知识的实验内容,较少涉及运用理论知识去解决实际问题。
这样的实验教学不利于发挥学生的学习主动性,不利于培养学生解决实际问题的能力。
如何改革传统的实验教学,如何培养学生的实际应用能力,本文举一个实例,需要教师利用现有的条件设计一些综合实验,让学生独立地去解决这些问题,从中培养能力。
希望本文能起到穿针引线的作用。
1设计LED显示器接口实验8086实验指导书显示器接口实验使用的是8279的显示输出功能,实验内容是在6位LED上循环显示8。
8086实验指导书8255并行口实验使用的是8255芯片,读开关量、输出、LED灯显示,实验讲义上都给出了电路原理图以及参考程序,学生往往是照着实验指导书上连接好线路,输入参考程序,进行程序调试。
大部分时间花在了实验的验证上,这样缺乏主动性和创新性,什么都是现成的。
能否在此基础上拓展一下,用8255芯片来实现显示器接口实验,这样既可取代8279,又可加深对8255的理解和使用。
实验任务:使用8255芯片的PA口作为段寄存器,PB口做为位寄存器,使用6位数码管从右向左逐位显示0~G,即显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、G。
连线编程:由学生自己独立连接并独立编程实现,在编程过程中加深对硬件的理解、命令以及涉及的技巧。
2LED 显示器接口实验程序代码code segmentorg 100haa1: mov dx,04a6h ‘8255控制端口地址,大于255用dx做桥梁,小于255直接由端口地址传值mov al,80h ‘8255工作方式控制字out dx,allea bx,data ‘取偏移地址与bx相加aa3: mov ch,0‘显示数字0-------9 ,其中ch内容在变aa4: mov ah,0feh‘即1111 1110 为0时亮,须注意PB0与led接法,灯旋转方向mov si,6‘6个ledaa2: mov al,chxlat ‘查表地址转换指令:=MOV AL,[BX+AL]mov dx,04a0h ‘A口送字形,注意其端口地址out dx,almov al,ahmov dx,04a2h‘B口控制哪一位亮out dx,alrol ah,1 ‘1111 1110 循环左移mov di,0ffffhaa5: dec dijnz aa5 ‘延时,不为0,则decdi ,为0,则dec sidec sijnz aa2 ‘si不为0,则aa2——decsi ,为0,则inc chinc chcmp c h,12‘ch的值从0-18jnz aa4 ‘循环jmp aa3‘又从0开始到Fdata db 3fh,06h,5bh,4fh,66h,6dhdb 7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,73h,88h,00hcode endsend aa1说明:在实验教学中如何培养能力?首先设计出较好的题目。
基于8255的8LED显示的动态显示器
南京邮电大学学年第学期课程设计实验报告题目基于8255的8LED显示的动态显示器专业通信工程学号姓名指导老师实验日期年月日题目:基于8255的8LED显示的动态显示器一,实验目的和要求1,Proteus软件的MCS51单片机仿真学习2,根据提供的参考工程,在proteus平台自己重新设计实验电路所需要的电器原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取,原理图的电气连接,程序的编写编译以及运行,并能查出其错误等。
基本要求:1. 用数码管正常显示数字“12345678”。
2. 通过按键可改变显示方式。
3. 设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。
4. 基于8255口是指显示和键盘都由8255的IO口控制发挥部分:1 设计所有动作的联合效果。
2 设计二个变速按键,可多级改变滚动速度。
3 设计一台魔术电子钟,采用自动变换,随机组合,数据每10秒变换一次。
动态显示格式:1 静止2 整体闪烁3 单字闪烁4 整体向前、向后滚动5 单字移动6 两边向中间压缩7 中间向两边扩张8 上下压缩9 文字上下滚动10组合动作(每一字符执行上述一个动作,并同时运动)二,实验仪器微型计算机三,实验原理基于8255的8LED显示的动态显示器,是由8255a做键盘控制口连接c51,并驱动8位7段数码管实现相应显示功能。
具体的,c51,p1口直接进行led数码管的位控制;p2口经74HC573译码后控制8255a的片选与内部奇存器选择;p0口连接8255a的D端口,并由它的PA口驱动7段led, PB口连接键盘,并做为I/O口与c51通信,以实现相应显示变化。
四,基本原件及其原理单片机微型计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM或EPROM、定时器/计数器、中断控制器以及串行和并行I/O接口等部件,构成一个完整的微型计算机。
基于8255的8LED显示的动态显示器
南京邮电大学学年第学期课程设计实验报告题目基于8255的8LED显示的动态显示器专业通信工程学号姓名指导老师实验日期年月日题目:基于8255的8LED显示的动态显示器一,实验目的和要求1,Proteus软件的MCS51单片机仿真学习2,根据提供的参考工程,在proteus平台自己重新设计实验电路所需要的电器原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取,原理图的电气连接,程序的编写编译以及运行,并能查出其错误等。
基本要求:1. 用数码管正常显示数字“12345678”。
2. 通过按键可改变显示方式。
3. 设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。
4. 基于8255口是指显示和键盘都由8255的IO口控制发挥部分:1 设计所有动作的联合效果。
2 设计二个变速按键,可多级改变滚动速度。
3 设计一台魔术电子钟,采用自动变换,随机组合,数据每10秒变换一次。
动态显示格式:1 静止2 整体闪烁3 单字闪烁4 整体向前、向后滚动5 单字移动6 两边向中间压缩7 中间向两边扩张8 上下压缩9 文字上下滚动10组合动作(每一字符执行上述一个动作,并同时运动)二,实验仪器微型计算机三,实验原理基于8255的8LED显示的动态显示器,是由8255a做键盘控制口连接c51,并驱动8位7段数码管实现相应显示功能。
具体的,c51,p1口直接进行led数码管的位控制;p2口经74HC573译码后控制8255a的片选与内部奇存器选择;p0口连接8255a的D端口,并由它的PA口驱动7段led, PB口连接键盘,并做为I/O口与c51通信,以实现相应显示变化。
四,基本原件及其原理单片机微型计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM或EPROM、定时器/计数器、中断控制器以及串行和并行I/O接口等部件,构成一个完整的微型计算机。
实验四 8255键盘及显示接口实验
实验四 8255键盘及显示接口实验一、实验目的了解键盘扫描及数码显示的基本原理,熟悉8255的编程/二、实验设备PC机一台,TD-PITE实验装置一套。
三、实验内容将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。
键盘采用4×4键盘,每个数码管显示值可为0-F共16个数,。
实验具体内容如下:将键盘进行编号,记作0—F,当按下一个键时,将该键对应的编号在下一个数码管上显示出来,再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近4次按下的按键编号。
实验内容:将8255单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管显示。
键盘采用4×4键盘,每个数码管显示值可为0~F共16个数。
实验具体内容如下:将键盘进行编号,记作0~F,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近4次按下的按键编号。
8255键盘及显示实验参考接线图如图1所示。
键盘及数码管显示单元电路图如图4-1 所示。
图4-2 8255 键盘扫描及数码管显示实验线路图功能描述: 键盘及数码管显示实验,通过8255控制。
8255的B口控制数码管的段显示,A口控制键盘列扫描及数码管的位驱动,C口控制键盘的行扫描。
按下按键,该按键对应的位置将按顺序显示在数码管上。
实验程序:MY8255_A EQU 0600HMY8255_B EQU 0602HMY8255_C EQU 0604HMY8255_CON EQU 0606HSSTACK SEGMENT STACKDW 16 DUP(?)SSTACK ENDSDATA SEGMENTDTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,3000HMOV AL,00HMOV [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 DALLYCALL DALLYCALL CLEARCALL CCSCANJNZ INK2 ;有键按下,转到INK2JMP BEGININK2: 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,0FHRETCLEAR: MOV DX,MY8255_BMOV AL,00HOUT DX,ALRETDIS: PUSH AXMOV SI,3000HMOV DL,0DFHMOV AL,DLAGAIN: 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 DALLYINC SIPOP DXMOV AL,DLTEST AL,01HJZ OUT1ROR AL,1MOV DL,ALJMP AGAINOUT1: POP AXRETDALLY: PUSH CXMOV CX,0006HT1: MOV AX,009FHT2: DEC AXJNZ T2LOOP T1POP CXRETPUTBUF: MOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3005HGOBACK: RETCODE ENDSEND START实验步骤:1. 按图4-1连接线路图;2. 编写实验程序,检查无误后编译、连接并装入系统;3. 运行程序,按下按键,观察数码管的显示,验证程序功能。
实验2:8255七段数码管静动态显示
微机实验报告书学号:姓名:班级:同组名单:实验日期: 2012.12.21实验题目:七段数码管的静态显示实验目标:掌握数码管显示数字的原理(功能:键盘输入一位十进制数字(0~9),用七段数码管显示。
)解题思路:1.静态显示:按图 10(a)连接好电路,将8255的A口PA0-PA6分别与七段数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V,S0、dp接地。
编程从键盘输入一位十进制数字,在七段数码管上显示出来。
2.动态显示:按图10(b)连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。
编程在两个数码管上显示“56”。
程序框图:静态显示见图11(a),动态显示见图11(b)。
关键问题分析(静态显示):1、按键判断和程序结束判断按键来说,由于程序中必须输入数字,所以没有必要对是否按键进行判断,只需要判断按键是否在0-9之间即可。
用以下程序即可:cmp al,'0'jl exit ; jl,条件转移指令,即在小于时转移cmp al,'9'jg exit ;jg, 条件转移指令,即在大于时转移程序中还要用到“cmp”即比较指令,用来比较输入数与0、9的大小关系。
程序结束:如若输入的数字小于0或者大于9,必须直接跳出程序,即结束指令必须单独占用一个程序段,这样,程序顺序执行完毕也可以顺利返回DOS。
2、七段码显示。
实验指导书中给出了七段码的字型代码。
这样一来,七段码的显示只需要用换码指令“XLAT”便可以轻松实现。
前提是必须将七段码字型编成数码表以字符串的形式写进程序中。
3、数字键ASCII码与数值间的转换。
因为0的ASCII码为30H,所以数字键ASCII码与数值间的转换时只需减去30H即可,可用下列语句实现:sub al,30h程序清单:静态显示:data segmentioport equ 0c800h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;使8255的A口为输出方式mov al,80h ;10000000B,控制字PA以方式0输出out dx,alzby: mov dx,offset mesg1 ;显示提示信息mov ah,09hint 21hmov ah,01 ;从键盘接收字符int 21hcmp al,'0' ;是否小于0jl exit ;如若小于0,则跳转到exit退出程序cmp al,'9' ;是否大于9jg exit ; 如若大于9,则跳转到exit退出程序sub al,30h ;将所得字符的ASCII码减30H,数字键ascii码同数值转换mov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,aljmp zby ;转zbyexit: mov ah,4ch ;返回DOSint 21hcode endsend start动态显示:data segmentioport equ 0c800h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhio8255c equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;将8255设为A口输出mov al,80h ;10000000B,控制字PA以方式0输出out dx,almov di,offset buffer1 ;设di为显示缓冲区loop2: mov bh,02zby: mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl为要显示的数pop dimov al,0mov dx,io8255aout dx,almov bh,0mov si,offset led ;置led数码表偏移地址为SIadd si,bx ;求出对应的led数码mov al,byte ptr [si]mov dx,io8255c ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,almov cx,3000delay: loop delay ;延时mov bh,byte ptr bzshr bh,1jnz zbymov dx,0ffhmov ah,06int 21hje loop2 ;有键按下则退出mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回int 21hcode endsend start运行结果:静态显示:在键盘上输入一个0-9的任意数字,会显示在数码管上。
键盘扫描显示实验报告
一、实验目的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口的列线状态,确定按键的位置。
实验名称基于8255的LED显示函数信号发生器设计课题内容和要求基本要求
实验名称:基于8255的LED显示函数信号发生器设计一、课题内容和要求基本要求:1.用存储器或算法得到信源。
2.用DA转换器输出一函数信号(正弦、方波、三角、锯齿等,频率1000Hz)3.用数码管或LCD上将输出参数显示4.用功能键切换各信号的输出。
发挥部分:1.通过键盘,可修改输出信号的频率。
每按一次键,频率值进给或后退100Hz,频率范围100Hz~1500Hz2.按键时,蜂鸣器发出提示音,表示按键有效3.数码管或LCD显示的内容可以用频率值和周期值切换表示,周期值精确到0.01ms 动态显示格式:自定二、总体设计利用AT89S52单片机采用查表或算法产生三角波、正弦波和方波三种波形,再通过D/A 转换器DAC0832将数字信号转换成模拟信号,最终由示波器显示出来,通过键盘来控制三种波形的类型选择、频率变化,最终输出显示各自的频率或者周期值。
三、单元设计1.键盘扫描部分矩阵键盘电路硬件图:实验中采用8255的PA口和PC口的低四位进行键盘扫描,行由8255的PA0~PA3端口控制,列由8255的PC0~PC3端口控制,其中PA口工作在输出方式,PB口工作在输入方式。
当PA0~PA3中一个口输出低电平时,对应的行线上的电平就为0,这是当有键按下时对应的列线上就变为低电平,这时PC口上对应位就可以检测到低电平从而判断是哪个键按下。
键盘扫描流程图:第二行判断键盘扫描程序如下:SCAN:MOV DPTR,#1FFCH;PA口地址MOV A,#00HMOVX @DPTR,A; PA0~PA3输出低电平 INC DPTR;DPTR指向PC口MOVX A,@DPTR;读PC口的值ANL A,#0FH;屏蔽无用位CJNE A,#0FH,DETAIL;判断是否有低电平ACALL DELAY1;延时ACALL DELAY1AJMP SCAN;无键按下则继续扫描DETAIL:ACALL DELAY1;消抖动ACALL DELAY1MOV DPTR,#1FFCH;再判断是否有键按下MOV A,#00HMOVX @DPTR,AINC DPTRINC DPTRMOVX A,@DPTRANL A,#0FHCJNE A,#0FH,CONTINUE;有键按下则做进一步的判断 AJMP SCAN;无键按下继续扫描CONTINUE:CLR EA;有键按下驱动蜂鸣器SETB P1.7ACALL DELAY2CLR P1.7SETB EAMOV R4,#02H;扫描行数送入R4中MOV A,#0FEHLINE:MOV DPTR,#1FFCHMOV R2,A;行号送R2MOVX @DPTR,A;置PA0为低电平INC DPTRMOVX A,@DPTRANL A,#0FHCJNE A,#0FH,FIND;判断第一行是否有键按下MOV A,R2RL ADJNZ R4,LINESJMP SCAN;无键按下继续扫描FIND:MOV R3,A列号存入R3中MOV A,R2CJNE A,#0FEH,LINE2;判断是否是第一行有键按下LINE1:MOV A,R3;第一行有键按下CJNE A,#0EH,L1R2;判断是哪个按键按下L1R1:MOV R0,#01H;有波形键按下键按下MOV R1,#01H;波形标志1MOV R7,#00HCLR TR1CLR TR0SETB TR0SJMP SCANL1R2:CJNE A,#0DH,L1R3MOV R0,#01H;有波形键按下键按下MOV R1,#02H;方波标志MOV R7,#00HCLR TR0CLR TR1SETB TR1SJMP SCANL1R3:MOV R0,#01H;有波形键按下键按下MOV R1,#03H;三角波标志MOV R7,#00HCLR TR1CLR TR0SETB TR0AJMP SCANLINE2:MOV A,R3;第二行有键按下CJNE A,#0EH,L2R2L2R1:CJNE R0,#01H,NONE1;有波形时才能进行频率增减操作CJNE R6,#00H,START1;没有减到最小频率值时继续减否则减频操作失败 AJMP NONE1START1:DEC R6;减频MOV A,R6MOV DPTR,#TABLE3MOVC A,@A+DPTRMOV TH0,A;重置计数初值NONE1:AJMP DISPLAYL2R2:CJNE A,#0DH,L2R3CJNE R0,#01H,NONE2;有波形时才能进行频率增减操作CJNE R6,#0EH,START2;没有增到最大频率值时继续增否则增频操作失败 AJMP NONE2START2:INC R6;增频MOV A,R6MOV DPTR,#TABLE3MOVC A,@A+DPTRMOV TH0,A;重置计数初值NONE2:AJMP DISPLAYL2R3:CJNE A,#0BH,L2R4;显示波形周期值MOV F,#01HAJMP DISPLAYL2R4:MOV F,#00H;显示波形频率值AJMP DISPLAY2.显示部分显示部分硬件图:开发板上设置了6位8段数码管,采用动态扫描方式连接,各位数码管的A~DP互联后经拨码开关S1后由P0口控制,数码管的COM分别经拨码开关S2后由P10~P15控制。
实验四 8255与LED数码管的显示
实验四8255a与LED数码管的显示一. 实验目的掌握8255A的编程原理与LED数码管的显示方法。
二. 实验环境硬件环境:奔3以上处理器,512MB以上内存空间软件环境:windowsXP以上操作系统,emu8086编译环境,Proteus7.5sp3。
三.实验内容与完成情况1.仿真电路图2.实验原理(1)8255A可编程I/O接口芯片具有三种工作方式:方式0(简单的输入输出方式)、方式1(选通式输入/输出方式)和方式2(双向数据传送方式)。
它分别能够控制把CPU的控制命令或输出数据送至相应的端口,也可以控制把外设的状态信息或输入的数据通过相应端口送至CPU。
(2)8255芯片具有三个数据端口A、B和C。
每个端口都为8位,可以由编程来选择作为输入端口或输出端口。
在一般情况下,常利用A、B两个端口来完成与外设之间的数据交换过程,而利用C端口来完成与外设的状态控制信息的交换过程。
3.实验过程首先打开电源,由8086向8255a发出指令,选定8255的工作方式,然后,读A口数据,高四位清零,取LED灯偏移地址。
当4个按钮的开关情况发生变化时,电信号的变化被读入8255a,经一系列的信号处理,从B口输出到LED灯显示数字。
4.编程调试程序data segment; add your data here!PORTD EQU 66H ;CPU-8255控制寄存器PORTA EQU 60H ;8086 A1接8255 A0;A2 接8255A1PORTB EQU 62HPORTC EQU 64HREGIS EQU 10010000B ;A IN, B OUT,AB口工作方式0LED DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH,77H,7cH,39H,5eH,79H,71H data endsstack segmentdw 128 dup(0)stack endscode segmentASSUME CS:code, DS:dataBEGIN:MOV DX,PORTD ;设置8255工作方式MOV AL,REGIS ;control byteOUT DX,ALG1: MOV DX,PORTAIN AL,DX ;读A口数据AND AL,00001111B ;高四位清零;数码管译码MOV BX,OFFSET LEDXLAT ;取LED表;-------------PUSH CXMOV CX,40H ;延时DELAY:LOOP DELAYPOP CX;-------------MOV DX,PORTBOUT DX,ALJMP G1code endsend BEGIN ; set entry point and stop the assembler.四.出现的问题1.不知道如何选定8255a的A,B,C三个端口的工作状态;2.对74ls183的电信号处理机制不清楚。
DSP 实验一 LED显示
实验一8255A并行口实验(一)LED显示一、实验目的(1)掌握8255A的工作原理及使用方法。
(2)通过8255实验,掌握I/O设备与CUP接口的基本原理和编程方法。
二、实验内容用8255并行口控制LED发光二极管的亮灭,使12个LED循环一次点亮。
三、实验电路四、编程提示8255A可编程接口芯片具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0:基本输入/输出方式方式1:选通输入/输出方式方式2:双向选通工作方式设置8255A端口A、B工作在方式0并处于输出方式,由于LED二极管共阳极连接,故8255端口输出为低电平即0时,LED发光二极管点亮。
五、实验步骤(1)按实验电路图连接线路:○18255A芯片A口的PA0——PA7依次接L1——L8.○28255A 芯片B口的PB0——PB3依次接L9——L12。
(2)编写实验程序运行。
程序如下:Data segmentPA EQU 0FFD8HPB EQU 0FFD9HPC EQU 0FFDAHPCTL EQU 0FFDBHData endsCode segmentAssume cs:code,ds:dataSTARTP1:mov dx,PCTLMov al,80HOut dx,alMov al,55HPll:mov dx,PAOut dx,alMov cx,0800HLoop $Not alCode endsEnd STARTP1实验三8255A并行口实验(三)控制交通灯一、实验目的掌握通过8255A并行口传输数据的方法,以控制发光二接管的亮与灭。
二、实验内容用8255作输出口,控制十二个发光二极管然灭,模拟交通灯管理。
三、实验电路四、编程提示(1)通过8255A控制发光二极管PB3、PB0、PA5、PA2对应黄灯,PB1、PA6、PA3、PA0对应红灯,PB2、PA7、PA4、PA1对应绿灯、以模拟交通灯的管理。
(2)要完成本实验,必须先了解交通灯的亮灭规律,设有一个十字路口1、3为南北方向,2、4为东西方向。
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数码管显示
即(行数-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 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
loop contin ;循环扫描下一行,确定行
jmp check0 ;若所有行都没有被按下,则返回check0重新检测
next: mov ch,cl ;保存行值至ch
mov cl,7 ;列值从0开始编号0-7
begin0: shl ah,1 ; ah为A口的内容,逻辑左移1位,末位补0
jnc goon ;无进位则转移,即可确定列
1
D6
D5
D4
D3
D2
D1
D0
1:端口C(PC3~PC0)输入
0:端口C(PC3~PC0)输出
方
1:端口B输入
式 控
0:端口B输出
制
1:端口B方式1
字
0:端口B方式0
标 志
1:端口C(PC7~PC4)输入
位
0:端口C(PC7~PC4)输出
实验五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键盘扫描与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并⾏接⼝数码管显⽰控制实验实验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这⼀点亮退出功能修改为:⾃上⽽下⼀个⼀个点亮,然后⾃下⽽上⼀个⼀个熄灭,循环不断。
实验七 led控制实验
实验七LED控制实验
一、实验目的
进一步熟悉对8255的应用,熟悉LED数码管的原理与控制方法。
二、实验内容
编程从键盘输入一位十进制数字(0-9),在七段数码管上显示出来,实现LED 数码管的静态显示。
三、实验连线
1、本实验用到的主要模块:8255模块、实验译码单元等。
2、将8255的A口PA0-PA6分别与七段数码管的段码驱动输入端a-g相连;
3、8255的片选CS接译码单元的2A0-2A7插孔;
4、将LED的位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。
5、8255的数据线“8255:XD0—XD7”接系统数据区的任一插槽。
四、实验流程图
五、实验步骤
1、将实验的线路连接好后,列出程序清单,并进行注释。
2、运行上位机软件,装载并运行程序,观察实验现象。
六、思考
1、LED数码管在试验箱上是共阴还是共阳?共阴共阳示意图见下页。
2、推导0-9的显示码。
2、初始化解释
3、改为一位显示7不动,程序需做何修改?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八 8255和LED数码管显示实验
二、实验电路
实验电路如图2及图3所示。
图2 静态显示电路图3 动态显示电路
五、实验项目
1.静态显示:按图2连接好电路,将8255A的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。
编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
程序框图、源代码(含注释)及实验结果如下:
1、静态显示
;0-9程序:
data segment
ioport equ2400h-280h
io8255a equ ioport+288h
io8255ctr equ ioport+28bh
led db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
mesg1 db0dh,0ah,'Input a num (0--9),other key is exit:',0dh,0ah,'$' data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,io8255ctr ;使8255的A口为输出方式
mov ax,80h
out dx,al
sss: mov dx,offset mesg1 ;显示提示信息
mov ah,9
int21h
mov ah,1;从键盘接收字符
int21h
cmp al,'0' ;是否小于0
jb exit ;若是则退出
cmp al,'9' ;是否大于9
ja exit ;若是则退出
sub al,30h;将所得字符的ASCII码减30H
mov bx,offset led ;bx为数码表的起始地址
xlat ;求出相应的段码
mov dx,io8255a ;从8255的A口输出
out dx,al
jmp sss ;转SSS
exit: mov ax,4c00h;返回
int21h
code ends
end start
2.动态显示(选做):按图3连接好电路,七段数码管段码连接不变,位码驱动输入端S1S0接8255C口的PC1、PC0。
编程在两个数码管上显示56。
程序框图、源代码(含注释)及实验结果如下:
data segment
ioport equ 2400h-280h
io8255a equ ioport+288h
io8255c equ ioport+28Ah
io8255ctr equ ioport+28bh
mesg1 db 0dh,0ah,' Press any key to exit!',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,offset mesg1 ;显示提示信息
mov ah,9
int 21h
mov dx, io8255ctr ;将8255设为A口输出
mov al,80h
out dx,al
loop1: mov dx, io8255a
mov al,6Dh
out dx,al
mov dx, io8255c
mov al,2
out dx,al
mov cx,3000h
delay: loop delay ;延时
mov dx, io8255c ;关数码管
mov al,0
out dx,al
mov dx, io8255a
mov al, 7Dh
out dx,al
mov dx, io8255c
mov al,1
out dx,al
mov cx,3000h
delay1:loop delay1 ;延时
mov ah,0bh
int 21h
cmp al,0
jnz exit ;按任意键退出
jmp loop1
exit: mov dx, io8255c
mov al,0 ;关掉数码管显示
out dx,al
mov ax,4c00h ;返回DOS
int 21h
code ends
end start
六、思考题
1、8255A的三个端口在使用时有什么差别?
答:端口A和端口B常常作为独立的输入端口或者输出端口,端口C则配合端口A 和端口B工作。
2、8255A的方式0一般使用在什么场合?在方式0时,如果使用应答信号进行联络,应该怎么办?
答:方式0的特点是只要WR,RD信号有效,就有数据传送,一般使用在可随时传送数据的场合.若使用应答信号进行联络,可用C口作为联络,对C口位操作,一般上C口用作选通(STB)线,下C口作状态输入(RDY)线.
3、当8255A工作在中断方式2时,CPU是如何来区分输入或输出的?
答案:在输入,输出均允许中断的情况下,可在中断服务程序中查询状态字,判断OBF 和IBF位的状态,来区分是输入中断还是输出中断,并采取相应操作.
七、编程提示
1.实验台上的七段数码管为共阴极,码段采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
2.七段数码管的字形代码如下表。