资源描述
微机原理走马灯课程设计
15
2020年4月19日
文档仅供参考
走马灯的设计与实现
一 实验目的
经过走马灯的设计与制作,深入了解与掌握利用可编程8255A进行开关量控制的原
理与方法。
二 实验要求
1.产生8种彩灯(8位LED)的走马灯花样;
2.键控(或拨码开关控制)发光实验。键控是在键盘上定义8个数字键(0~7),每按1个数字键,使LED的1位发光,按Q或q键,停止发光。拨码开关控制,是经过改变各位开关,来进行控制, 使LED的1位发光,按Q或q键,停止发光。
三 实验内容
1.进行走马灯的系统电路硬件设计,画出电路原理图;
2.安装或焊接元器件;
3.进行走马灯的控制程序设计(采用ASM语言);
4.系统联调,提交一个符合上述3种要求的走马灯的作品。
四 实验原理
8255A是一种经过可编程并行I/O接口芯片。广泛用于几乎所有系列的微机系统中,8255A具有三个带锁存或缓冲的数据端口,可与外设并行进行数据交换,8255A有多种操作方式,通用性较强,可为CPU与外设之间提供输入/输出通道。8255A和各端口内具有中断控制逻辑,在外设与CPU之间可用中断方式进行信息交换,使用条件传输方式时可用“联络”线进行控制。在实验中,我们运用8255为CPU与外设之间提供输入输出输出通道来实现对走马灯花样变换的控制。
走马灯驱动模块电路原理如图1所示。模块包括8个LED彩灯、两个74LS04、和两个个排阻。用LED能够观测在不同按键输入下,走马灯花样的变化效果。
如图1所示我们利用软件输入信号,经过8255端口扩展芯片和74LS04芯片,调节输出端口的电平变化,来控制共阳极的LED灯的亮与灭,实现走马灯花样变化。
图1 走马灯驱动模块电路原理图
五 试验设备
1.PC兼容机
2.Windows 98以上
3.MFID多功能微机实验平台(含PCI总线驱动板)
4.MFPCI98集成开发环境
5.面包板或外设功能模块板
6.安装或焊接工具
六 元器件清单
元器件清单如表1所示。
序号
名称
数量
1
74LS04
2片
2
RESPACK3排阻 8×150Ω
2只
3
LED
8只
4
拨码开关
1只
5
面包板
1个
6
T型转接板
1个
7
导线
若干
表1 实验元器件清单
七 实验步骤
7.1硬件连线
根据图1的实验原电路图,走马灯电路结构电路接线如图2所示。
图2 走马灯电路结构电路接线图
接线说明:8255A共有三个8位端口A口、B口和C口。其中A口和B口为输出端口,C口为输入端口。在本电路中,A口8个输出管脚PA7-PA0分别接8个并联的LED彩灯反馈走马灯的发光方式;B口8个管脚PB7-PB0分别接8个并联的开关控制选择走马灯的发光方式。C口接输入控制电路,PC2管脚接控制电路中放大器的6管脚,PC6接控制电路中放大器的3管脚,PC7管脚接电源,其余管脚悬空。
7.2硬件检测
为了安全起见,先用万用表检测8255A的端口中的阳极与接地极以及其它端口是中有短路现象,检测确认线路安全之后再接到实验箱上,以免烧坏硬件。
7.3程序设计
根据实验原理与实验电路,初步写出程序的步骤,再绘制出完整的流程图,然后根据流程图编写汇编程序。流程图和程序见报告后的附录。
7.4调试运行
打开MF2KP微机实验集成开发环境,在“文件”菜单下粘贴自己编写的ASM文件进行调试与运行。
八 实验现象与说明
运行程序,经过键盘输入,输入数字1~8时8个LED灯,按照程序设定的方式进行花样变化,运行完一个周期后停止等待键盘的再次输入,输入不同的数字LED的变化花样不同,输入的不是数字也不是字母Q或q时,显示错误信息,等待键盘输入正确信息,当输入字母Q或q时退出程序。
九 实验小结与心得体会
附录一:
程序流程图
附录二:
程序代码:
;*************************************************************************
; zmd.asm 走马灯(灯光变幻)程序 *
; 内容:用键盘输入数字键1-8控制走马灯变幻方式,按"Q"或者"q"退出 *
; 运行步骤: 1.按下数字键1-8控制走马灯进行8种不同的花样闪烁 *
; 2.按下"q"或者"Q",退出 *
; 3.按下了除数字键1-8以及"q"和"Q"之外的字母,显示输入错误提示 *
; 4.可重复进行直到按"q"或"Q"退出 *
;*************************************************************************
sseg segment para stack 'stack'
dw 200 dup (?)
sseg ends
dseg segment para public 'data'
message db 'press the number key from 1 to 8 and display various light- patterns!';提示信息
db 0ah,0dh
db 'if you want to quit, please hit ''q'' or ''Q''!',0ah,0dh,'$'
message1 db 0ah,0dh,'you have pressed a wrong key !',0ah,0dh
db 0ah,0dh,'$'
num dw 0 ;初始化数字变量为0
data1 db 0aah,55h,0aah,55h,0aah,55h,0aah,55h ;八种不同的灯光变幻组合
data2 db 01h,02h,04h,08h,10h,20h,40h,80h
data3 db 80h,20h,08h,02h,40h,10h,04h,01h
data4 db 01h,04h,10h,40h,02h,08h,20h,80h
data5 db 0c0h,30h,0ch,03h,0c0h,30h,0ch,03h
data6 db 03h,0ch,30h,0c0h,03h,0ch,30h,0c0h
data7 db 81h,42h,24h,18h,81h,42h,24h,18h
data8 db 18h,24h,42h,81h,18h,24h,42h,81h
dseg ends
cseg segment para public 'code'
assume ss:sseg,cs:cseg,ds:dseg
m proc far
start:
mov ax,ds
push ax
mov ax,00h
push ax ;保留程序数据段地址
mov dx,303h ;取8255的控制端口的地址
mov al,83h ;初始化8255的A口为输出模式
out dx,al
exut: mov dx,seg message
mov ds,dx
mov dx,offset message
mov ah,9
int 21h ;初始化灯LED全灭
mov dx,300h ;取8255的端口A的地址
mov al,00h ;使8255的PA0-PA7全为0
out dx,al ;使所有的灯LED全灭
mov ah,08h
int 21h ;调用DOS 21H 功能08H 进行键盘输入判断
cmp al,'q'
jz quit ;检测到"q",退出
cmp al,'Q'
jz quit ;检测到"Q",退出
begin: call ledflash ;调用灯光变幻过程
jmp exut
quit: ;灯LED全灭
mov dx,300h ;取8255的端口A的地址
mov al,00h ;使8255的PA0-PA7全为0
out dx,al ;使所有的灯LED全灭
mov ah,4ch ;DOS功能调用
int 21h ;返回DOS
m endp
delay2 proc
push cx
push bx
mov cx,0ffffh
dl4: mov bx,0ffffh
dl3: dec bx
jnz dl3
dec cx
jnz dl4
pop bx
pop cx
ret
delay2 endp ;检测键盘输入了字符,以便确定哪种闪烁方式
ledflash proc
choice1: cmp al,'1'
jne choice2
mov si,offset data1 ;置第一种灯光变幻组合
jmp here
choice2: cmp al,'2'
jne choice3
mov si,offset data2 ;置第二种灯光变幻组合
jmp here
choice3: cmp al,'3'
jne choice4
mov si,offset data3 ;置第三种灯光变幻组合
jmp here
choice4: cmp al,'4'
jne choice5
mov si,offset data4 ;置第四种灯光变幻组合
jmp here
choice5: cmp al,'5'
jne choice6
mov si,offset data5 ;置第五种灯光变幻组合
jmp here
choice6: cmp al,'6'
jne choice7
mov si,offset data6 ;置第六种灯光变幻组合
jmp here
choice7: cmp al,'7'
jne choice0
mov si,offset data7 ;置第七种灯光变幻组合
jmp here
choice8: cmp al,'8'
jne choice0
mov si,offset data8 ;置第七种灯光变幻组合
jmp here ;按错键提示,并重新开始接受输入
choice0: lea dx,message1
mov ah,9
int 21h
jmp exut ;送加电数据
here: push bx
mov bx,num
mov al,[si+bx]
pop bx
mov dx,300h ;取8255的端口A的地址
out dx,al ;输出加电数据到端口A
inc num ;改变数字变量的值
cmp num,09h
je exit
call delay2
jmp here
exit: mov num,0
ret
ledflash endp
cseg ends
end start
展开阅读全文