微机原理课程设计报告简易电子广告牌设计.docx
《微机原理课程设计报告简易电子广告牌设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告简易电子广告牌设计.docx(13页珍藏版)》请在冰豆网上搜索。
![微机原理课程设计报告简易电子广告牌设计.docx](https://file1.bdocx.com/fileroot1/2022-12/8/fde09fae-09c0-4f70-93b2-e848688e712b/fde09fae-09c0-4f70-93b2-e848688e712b1.gif)
微机原理课程设计报告简易电子广告牌设计
SouthChinaUniversifyofTechnology
本科实验报告
微机原理课稈设计报告
学院电子和信息学院
专业信息工程1班
学生姓名李土荣
指导教师
提交日期10年01月18日
学号2
座位号21
一课程设计题目介绍
题目:
简易电子广告牌设计
功能:
“实验箱上设有一个共阳极8X8点阵的红黄两色LED显示器。
编程使LED
显示器循环显示一条广告语,例如:
北京你好。
要求:
广告语可以自己任意选择,但字数不少于3个;广告语的颜色红黄交替显示,例如:
先显示红色广告语,再显示黄色广告语,如此交替循环;广告语中每个字符显示的时间由8253定时器控制,定时时间到显示下一个字符,设置每个字符显示的时间为数秒不等,可以自行设置;若键盘输入“R'则返回DOS结束程序。
设计说明:
点阵LEE显示器是将许多LED类似矩阵一样排列在一起组成的显示器件,双色点阵LED是在每一个点阵的位置上有红绿或红黄或红白两种不同颜色的发光二极管。
当微机输出的控制信号使得点阵中有些LE[发光,有些不发光,即可显示出特定的信息,包括汉字、图形等。
实验箱上是一个共阳极8X8点阵的红黄两色LED显示器,其点阵结构参考教师实验指导书实验24。
该点阵对外引出24条线,其中8条行线,8条红色列线,8条黄色列线。
若使某一种颜色、某一个LED发光,只要将和其相连的行线加高电平,列线加低电平即可。
例如欲显示汉字“年”,采用逐列循环发光。
首先由“年”的点阵轮廓,确定点阵代码(如图所示)根据“年”的点阵代
码,确定逐列循环发光的顺序如下:
1行代码输出44H;红色列代码输01H;第一列2个红色LED发光。
2行代码输出54H;红色列代码输02H;第二列3个红色LED发光。
3行代码输出54H;红色列代码输04H;第三列3个红色LED发光。
4行代码输出7FH;红色列代码输08H;第四列7个红色LED发光。
5行代码输出54H;红色列代码输10H;第五列3个红色LED发光。
6行代码输出DCH红色列代码输20H;第六列5个红色LED发光。
7行代码输出44H;红色列代码输40H;第七列2个红色LED发光。
8行代码输出24H;红色列代码输80H;第八列2个红色LED发光。
在步骤①〜⑧之间可插入几m啲延时,重复进行①〜⑧即可在LED上稳定的显示出红色“年”字。
若想显示黄色“年”,只需把红色列码改为黄色列码即可。
实验仪上的点阵LED及驱动电路参考教师实验指导书实验24,行代码、红色列代码、黄色列代码各用一片74LS273锁存。
行代码输出的数据通过行驱动器7407加至点阵的8条行线上,红和黄列代码的输出数据通过驱动器DS7545反相后分别加至红和黄的列线上。
行锁存器片选信号为CS1,红色列锁存器片选信号为CS2黄色列锁存器片选信号为CS3接线方法:
行片选信号CS1接280H;红列片选信号CS2接288H;黄列片选信号CS3接290H。
电路图:
'7
IXlIJJTi
二课程设计的目的
进行一次综合的小型微机使用系统的软硬件设计。
通过课程设计,进一步巩固所学的知识,并将所学的内容加以综合运用。
将所学的理论和实际问题或使用相结合,进一步培养自主学习的能力,综合运用知识的能力,以及创新实践的能力。
并且了解双色点阵LED显示器的基本原理,掌握P(机控制双色点阵LED显示程序的设计方法。
三硬件设计:
8253的基本工作原理和编程方法:
按图1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)
CLKG<
R6TFR
11•
CS
0UT0
U58253
280H*^*,
.”……一.£叱
按图2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为
可编程定时器/计数器(8253)
参考流程图:
幵皓
1-,/
设计飒器D为工雅方金3
向订数野0送初值1000
先送诋字节后送高字节
设计般器l为
工作方式3
向计数耦1送初值L0D0
先送诋字节后晟字节
绪朿'
28255方式0的工作原理:
(1)三个数据端口A、B、C,每个端口均为8位,可选择输入或输出操作;
(2)A组控制和B组控制:
端口A和端口C的高4位构成A组端口B和断口C的低4位构成B组,分别又A组和B组控制电路控制。
两组控制电路内各有一个控制寄存器,接受CPU输出的控制字,决定各端口的工作方式;
(3)数据总线缓冲器:
这是个三态双向的8位缓冲器,起着8255A和CPU数据总线接口的作用,用来传送输入/输出的数据、CPU发出的控制字及状态信息;
(4)读/写控制逻辑接收CPU发出的地址A1、A0及控制(•、、RESET)
和片选(')信号,产生给A组、B组的控制信号,以完成对数据、状态及控制信息的传送。
实验电路:
k0*—k1kZ•-k3i
■-
k5i
k?
•
288H
•・-
参考流程图:
FC9
PA□
FC1
FA1
PC2
F"
PC3
Ph3
PC4
P4
PCS
PC6
FAC
FG7
FAV
cs
1J18
S255
■L0
«LZ
•L4
L7
设量8255C口输入A口输出
*
F
从c口输入戳据
开始
将此数据自直口输出
3实验系统原理图及硬件原理说明:
1、用8253的计数器0和计数器1作为1MHz时间的的分频,使间脉冲变成1Hz,由计数器1的OUT口输出,并把OUT口接到8255的PA0端口,目的是让8255去读这个端口的值,为程序中的定时,当时间到时就变换字。
2、8253的两个计数器用工作方式2(分频器)和工作方式3(方波发生器),8255采用工作方式0,输出口为A口的第一个口PA0。
3、显示块的三个片选端口分别接的是实验板上I/O口地址的298h(行显示),288h(红色列显示线),290h(黄色列显示线)
4、接通电源,运行测试程序,由8253计时,8255检测8253OUT口的电平值,直到低电平就显示下一个字,并且中间有一定的器件延时。
五软件设计
流程图:
主程序
子程序:
六讨论和感想:
七源程序的清单:
ioportequ0c400h-0280hprothequioport+280hprotlrequioport+288hprotlyequioport+290hio8253aequioport+29bhio8253bequioport+298hio8253cequioport+299hio8255aequioport+2a3hio8255bequioport+2a0h
;实验箱的端口地址
;行片选信号CS1端口地址;红列片选信号CS2端口地址;黄列片选信号CS3端口地址
;8253控制字端口地址
;计数器0端口地址
;计数器1端口地址
;8255控制字端口地址
;8255P0口地址
DATASEGMENT
MESSDB'Strikethe"r"key,returntoDOS!
',0AH,0DH,'$';运行界面信息提示
min1DB00h,01h,02h,03h,04h,05h,06h,07h
count2db?
;定义计字变
量
BUFFdw?
;定义行码地
址变量
BUFF1DB43h,21h,11H,0ffh,00h,0ffh,24h,22h;“北”字
BUFF2DB00H,41H,07AH,68H,0EFH,69H,7AH,41H;“京”字
BUFF3DB0C2H,84H,0FFH,85H,42H,80H,7FH,20H
BUFF4DB48H,68H,5FH,49H,3DH,0E2H,3DH,20H
DATAENDS
;“你”字
;“好”字
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMESS
MOVAH,09
INT21H;显示提示信息
movdx,io8255a
moval,9bhoutdx,al
moval,16h
movdx,io8253aoutdx,al
moval,70h
;设8255A口输入
;设置8253通道0为工作方式
3,二进制计数
;设置8253通道1为工作方式0,先低后高,二进
制计数
movdx,io8253a
outdx,al
movdx,io8253bmoval,0fhoutdx,al
agn:
movcount2,04hmovbx,offsetbuff1movbuff,bxc2:
movdx,io8253cmoval,0ffhoutdx,almoval,0ffhoutdx,al
d2:
movah,01hmovcx,0008hmovsi,offsetmin1next:
movdh,count2cmpdh,00hjzagn1
d4:
moval,[si]
movbx,buff
;计数器0的端口地址
;写低8位计数值
;赋值给计字变量
;给行赋初值
;计数器1的端口地址
;先写低8位计数值
;再写高8位计数值
;列初值
;列循环次数
;判断字变量是否已经为0
;是,转向agn1显示黄色字
xlat
;得到第一行码
movdx,proth
outdx,al
;显示第一行码
moval,ah
movdx,protlr
outdx,al
;显示第一列,红色字
shlah,01
;左移1位
incsi
pushcx
movcx,0ffffh
delay2:
loopdelay2
;延时
movcx,0ffffh
delay5:
loopdelay5
;延时
movdx,io8255b
inal,dx
;从8255A口读一字节
testal,01
;判PA0口是否为0
jzd5
;若不为0,表示定时时间未到,则转d5
dec[count2]
;为0,则计字变量减1
movdx,buff
adddx,08h
;把下一个字的行代码地址给buff
movbuff,dx
moval,00
;不为0,则继续往下执行
movdx,protlr
;关闭所有列显示
outdx,al
jmpc2
;跳转回去,循环显示
d5:
popcx
loopnext
;循环显示
moval,00
;不为0,则继续往下执行
movdx,protlr
;关闭所有列显示
outdx,al
movah,01
int16h
;判断是否按了"r"
jzb1
callPANDUAN
b1:
jmpd2
;不是,则循环显示
a8:
jmpa3
J
a6:
jmpagn
J
a7:
jmpa3
J
;显示黄色字体
agn1:
movcount2,04h
;赋值给计字变量
movbx,offsetbuff1
movbuff,bxc1:
movdx,io8253cmoval,0ffhoutdx,almoval,0ffhoutdx,ald1:
movah,01hmovcx,0008hmovsi,offsetmin1next1:
movdh,count2cmpdh,00hjza6d7:
moval,[si]
movbx,buffxlatmovdx,prothoutdx,almoval,ahmovdx,protlyoutdx,alshlah,01
;给行赋初值
;计数器1的端口地址
;先写低8位计数值
;再写高8位计数值
;列初值
;列循环次数
;判断字变量是否已经为0;是,转向agn显示红色字
;得到第一行码
;显示第一行码
;显示第一列,黄色字
;左移1位
incsipushcx
movcx,0ffffh
delay3:
loopdelay3
;延时
movcx,0ffffh
delay4:
loopdelay4
;延时
movdx,io8255b
inal,dx
;从8255A口读一字节
testal,01
;判PA0口是否为0
jzd8
;若不为0,则转d8
dec[count2]
;为0,则表示定时时间已到,计字变量减1
movdx,buff
adddx,08h
;把下一个字的行代码地址给buff
movbuff,dx
moval,00
;不为0,则继续往下执行
movdx,protly
;关闭所有列显示
outdx,al
jmpc1
;调回循环显示
d8:
popcx
loopnext1
;循环显示
moval,00
;不为0,则继续往下执行
movdx,protly
;关闭所有列显示
outdx,al
movah,01
int16h
jzb2
callPANDUAN
b2:
jmpd1
;不是,则循环显示
DELAYPROCNEAR;延迟子程序
pushcx
movcx,0ffh
ccc:
loopccc
popcx
ret
DELAYENDP
;判断是否按了"r"
PANDUANPROCNEARmovah,00int16h
CMPAL,52H
JZa3
ret
PANDUANENDP
a3:
MOVAH,4CH
INT21H
CODEENDS
;是"r",返回
;整个程序结束
ENDSTART