实验七八 七段数码管.docx
《实验七八 七段数码管.docx》由会员分享,可在线阅读,更多相关《实验七八 七段数码管.docx(11页珍藏版)》请在冰豆网上搜索。
实验七八七段数码管
课程实验报告
学年学期 2013-2014学年第1学期
课程名称 微机原理
实验名称 实验七七段数码管
专业年级 电气113班
学生姓名 屈巧鸽
学生学号 2011011976
提交时间2013,12.
成 绩
任课教师 朱晓群,谭亲跃
实验七七段数码管
2.4.1实验目的
(1)掌握8255的基本工作原理及编程方法。
(2)掌握数码管显示数字的原理。
2.4.2实验内容
(1)实验电路如图2-17所示,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
编程从8255C口输入数据,再从A口输出。
实验程序流程图如图2-18所示。
(2)实验电路如图2-19所示,按图3连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。
编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
注:
实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
编程从8255C口输入数据,再从A口输出。
实验程序流程图如图2-20所示。
2.4.3参考程序
(1)参考程序1
ioportequ0cf00h-0280h
io8255aequioport+288h;8255A口地址
io8255bequioport+28bh;8525控制端口地址
io8255cequioport+28ah
codesegment
assumecs:
code
start:
movdx,io8255b;设置8255工作方式:
C口输入,A口输出
moval,89h
outdx,al
inout:
movdx,io8255c;从C口输入数据
inal,dx
movdx,io8255a;将该数据从A口输出
outdx,al
movdl,0ffh;判断是否有按键
movah,06h
int21h
jzinout;若无,则继续自C口输入,A口输出
movah,4ch;否则返回DOS
int21h
codeends
endstart
(2)参考程序2
datasegment
ioportequ0cf00h-0280h
io8255aequioport+288h;8255A口地址
io8255bequioport+28bh;8525控制端口地址
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
mesg1db0dh,0ah,'Inputanum(0-9h):
',0dh,0ah,'$'
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8255b;使8255的A口为输出方式
moval,89h
outdx,al
sss:
leadx,mesg1;显示提示信息
movah,09h
int21h
movah,1;从键盘接收字符
int21h
cmpal,30h;是否小于0
jlexit;若是则转exit,退出
cmpal,39h;是否大于9
jgexit;若是则转exit,退出
subal,30h;将所得字符的ASCII码减30H
leabx,led;取bx为数码表的起始地址
xlat;查数码表,求出相应的段码
movdx,io8255a;从8255的A口输出段码
outdx,al
jmpsss;转sss
exit:
movah,4ch;返回DOS
int21h
codeends
endstart
(3)参考程序3(动态显示)
datasegment
ioportequ0cf00h-0280h
io8255aequioport+28ah
io8255bequioport+28bh
io8255cequioport+288h
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码
buffer1db0,0;存放要显示的十位和个位
bzdw?
;位码
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8255b;将8255设为A口输出
moval,80h
outdx,al
movdi,offsetbuffer1;设di为显示缓冲区
loop1:
movcx,0300h;循环次数
loop2:
movbh,02
lll:
movbyteptrbz,bh
pushdi
decdi
adddi,bz
movbl,[di];bl为要显示的数
popdi
movbh,0
movsi,offsetled;置led数码表偏移地址为SI
addsi,bx;求出对应的led数码
moval,byteptr[si]
movdx,io8255c;自8255A的口输出
outdx,al
moval,byteptrbz;使相应的数码管亮
movdx,io8255a
outdx,al
pushcx
movcx,0ffffh;如果显示过快,可更改cx值为最大0ffffh
delay:
loopdelay;延时
popcx
movbh,byteptrbz
shrbh,1
jnzlll
looploop2;循环延时
movax,wordptr[di]
cmpah,09
jnzset
cmpal,09
jnzset
movax,0000
mov[di],al
mov[di+1],ah
jmploop1
set:
movah,01
int16h
jneexit;有键按下则转exit
movax,wordptr[di]
incal
aaa
mov[di],al;al为十位
mov[di+1],ah;ah中为个位
jmploop1
exit:
movdx,io8255a
moval,0;关掉数码管显示
outdx,al
movah,4ch;返回DOS
int21h
codeends
endstart
课程实验报告
学年学期 2013-2014学年第1学期
课程名称 微机原理
实验名称 实验八交通灯控制实验
专业年级 电气113班
学生姓名 屈巧鸽
学生学号 2011011976
提交时间2013,12.
成 绩
任课教师 朱晓群,谭亲跃
2.5实验八交通灯控制实验
2.5.1实验目的
通过8255实现十字路口交通灯的模拟控制,并进一步掌握对并行口的使用。
2.5.2实验内容
实验电路图如图2-21所示,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。
编程使六个灯按交通灯变化规律亮灭。
图2-21实验电路图
2.5.3程序流程图
图2-22实验电路图
编程提示:
十字路口交通灯的变化规律要求:
(a)南北路口的绿灯、东西路口的红灯同时亮30秒左右。
(b)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(c)南北路口的红灯、东西路口的绿灯同时亮30秒左右。
(d)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(e)转(a)重复。
2.5.4参考程序
datasegment
ioportequ0d400h-0280h
io8255aequioport+28ah;8255C口地址
io8255bequioport+28bh;8255控制端口地址
portc1db24h,44h,04h,44h,04h,44h,04h;六个灯可能
db81h,82h,80h,82h,80h,82h,80h;的状态数据
db0ffh;结束标志
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
moval,90h;设置8255为C口输出
movdx,io8255b
outdx,al
movdx,io8255a
re_on:
xorbx,bx;从portc1开始依次取出六个灯的状态数据
on:
moval,portc1[bx]
cmpal,0ffh;状态数据是否为ffh
jere_on;若是,转re_on
outdx,al;否则,点亮相应的灯
incbx
movcx,4500
testal,21h;判断是否两个绿灯亮
jzde1;没有,转del,短延时
movcx,65535;有,长延时
de1:
movdi,9000
de0:
decdi
jnzde0
loopde1
pushdx
movah,06h
movdl,0ffh
int21h
popdx
jzon;没有,转到on
exit:
movah,4ch;返回DOS
int21h
codeends
endstart