一 选题介绍
题目:简易电子广告牌设计
意义: 由于单片机技术的不断发展和高亮度LED发光管的出现使得大屏幕高亮度LED电子广告屏成为可能,与传统的霓虹灯广告在显示效果以及可修改性上都有着无法比拟的优势,而且单片机的日益平民化以及LED技术的不断创新,使得高亮度高清晰的LED点阵广告牌与传统霓虹灯广告牌的成本日益接近。简易广告牌的设计发展在市场又很大的潜力
功能:实验箱上设有一个共阳极8×8点阵的红黄两色LED显示器。编程使LED显示器循环显示一条广告语,例如:欢迎光临。要求:广告语可以自己任意选择,但字数不少于3个;广告语的颜色红黄交替显示,例如:先显示红色广告语,再显示黄色广告语,如此交替循环;广告语中每个字符显示的时间由8253定时器控制,定时时间到显示下一个字符,设置每个字符显示的时间为数秒不等,可以自行设置;若键盘输入“R”则返回DOS,结束程序。
设计原理: 实验箱上是一个共阳极8×8点阵的红黄两色LED显示器该点阵对外引出24条线,其中8条行线,8条红色列线,8条黄色列线。若使某一种颜色、某一个LED发光,只要将与其相连的行线加高电平,列线加低电平即可。例如欲显示汉字“年”,采用逐列循环发光。
首先由“年”的点阵轮廓,确定点阵代码(如图所示)根据“年”的点阵代码,确定逐列循环发光的顺序如下:
① 行代码输出 44H; 红色列代码输 01H;第一列2个红色LED发光。
② 行代码输出 54H; 红色列代码输 02H;第二列3个红色LED发光。
③ 行代码输出 54H; 红色列代码输 04H;第三列3个红色LED发光。
④ 行代码输出 7FH; 红色列代码输 08H;第四列7个红色LED发光。
⑤ 行代码输出 54H; 红色列代码输 10H;第五列3个红色LED发光。
⑥ 行代码输出 DCH; 红色列代码输 20 H;第六列5个红色LED发光。
⑦ 行代码输出 44H; 红色列代码输 40 H;第七列2个红色LED发光。
⑧ 行代码输出 24H; 红色列代码输 80 H;第八列2个红色LED发光。
在步骤①~⑧之间可插入几ms的延时,重复进行①~⑧即可在LED上稳定的显示出红色“年”字。若想显示黄色“年”,只需把红色列码改为黄色列码即可。
电路图:
二 硬件设计:
1.基本工作原理和编程方法:
硬件电路连接:
重要芯片功能说明:
8*8LED显示器:
三个片选端,分别为行片选,红色列片选,黄色列片选。
8253可编程定时/计数器:
本实验中只使用计数器0,并将其设置为工作方式0,16为计数。
8255可编程并行接口:
8255有3种工作方式,在8255中有一个控制字用来选择工作方式和A、B、C三个端口。
按图1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
2.8255方式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发出的控制字及状态信息;
实验电路:
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口的电平值,直到低电平就显示下一个字,并且中间有一定的器件延时。
四 软件设计
流程图:
代码
;=========================================================================
ioport equ 0c400h-0280h ;实验箱的端口地址
proth equ ioport+280h ;行片选信号CS1端口地址
protlr equ ioport+288h ;红列片选信号 CS2端口地址
protly equ ioport+290h ;黄列片选信号 CS3端口地址
io8253a equ ioport+29bh ;8253控制字端口地 址
io8253b equ ioport+298h ;计数器0端口地址
io8253c equ ioport+299h ;计数器1端口地址
io8255a equ ioport+2a3h ;8255控制字端口地址
io8255b equ ioport+2a0h ;8255 P0口地址
;-------------------------------------------------------------------------
DATA SEGMENT
MESS DB 'Strike the "r" key ,return to DOS!',0AH,0DH,'$' ;运行界面信息提示
min1 DB 00h,01h,02h,03h,04h,05h,06h,07h
count2 db ? ;定义计字变量
BUFF dw ? ;定义行码地址变量
BUFF1 DB 43h,21h,11H,0ffh,00h,0ffh,24h,22h ;“北”字
BUFF2 DB 00H,41H,07AH,68H,0EFH,69H,7AH,41H ;“京”字
BUFF3 DB 0C2H,84H,0FFH,85H,42H,80H,7FH,20H ;“你”字
BUFF4 DB 48H,68H,5FH,49H,3DH,0E2H,3DH,20H ;“好” 字
DATA ENDS
;-------------------------------------------------------------------------
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
;-------------------------------------------------------------------------
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH,09
INT 21H ;显示提示信息
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
mov dx,io8255a ;设8255A口输入
mov al,9bh
out dx,al
mov al,16h ;设置8253通道0为工作方式3,二进制计数
mov dx,io8253a
out dx,al
mov al,70h ;设置8253通道1为工作方式0,先低后高,二进制计数
mov dx,io8253a
out dx,al
mov dx,io8253b ;计数器0的端口地址
mov al,0fh ;写低8位计数值
out dx,al
agn: mov count2,04h ;赋值给计字变量
mov bx,offset buff1
mov buff,bx ;给行赋初值
c2: mov dx,io8253c ;计数器1的端口地址
mov al,0ffh ;先写低8位计数值
out dx,al
mov al,0ffh ;再写高8位计数值
out dx,al
d2: mov ah,01h ;列初值
mov cx,0008h ;列循环次数
mov si,offset min1
next: mov dh,count2 ;判断字变量是否已经为0
cmp dh,00h
jz agn1 ;是,转向agn1显示黄色字
d4: mov al,[si]
mov bx, buff
xlat ;得到第一行码
mov dx,proth
out dx,al ;显示第一行码
mov al,ah
mov dx,protlr
out dx,al ;显示第一列,红色字
shl ah,01 ;左移1位
inc si
push cx
mov cx,0ffffh
delay2: loop delay2 ;延时
mov cx,0ffffh
delay5: loop delay5 ;延时
mov dx,io8255b
in al,dx ;从8255A口读一字节
test al,01 ;判PA0口是否为0
jz d5 ;若不为0,表示定时时间未到,则转d5
dec [count2] ;为0,则计字变量减1
mov dx,buff
add dx,08h ;把下一个字的行代码地址给buff
mov buff,dx
mov al,00 ;不为0,则继续往下执行
mov dx,protlr ;关闭所有列显示
out dx,al
jmp c2 ;跳转回去,循环显示
d5: pop cx
loop next ;循环显示
mov al,00 ;不为0,则继续往下执行
mov dx,protlr ;关闭所有列显示
out dx,al
mov ah,01
int 16h ;判断是否按了"r"
jz b1
call PANDUAN
b1: jmp d2 ;不是,则循环显示
;-------------------------------------------------------------------------
a8: jmp a3
;-------------------------------------------------------------------------
a6: jmp agn
;-------------------------------------------------------------------------
a7: jmp a3
;-------------------------------------------------------------------------
;显示黄色字体
;-------------------------------------------------------------------------
agn1: mov count2,04h ;赋值给计字变量
mov bx,offset buff1
mov buff,bx ;给行赋初值
c1: mov dx,io8253c ;计数器1的端口地址
mov al,0ffh ;先写低8位计数值
out dx,al
mov al,0ffh ;再写高8位计数值
out dx,al
d1: mov ah,01h ;列初值
mov cx,0008h ;列循环次数
mov si,offset min1
next1: mov dh,count2 ;判断字变量是否已经为0
cmp dh,00h
jz a6 ;是,转向agn显示红色字
d7: mov al,[si]
mov bx, buff
xlat ;得到第一行码
mov dx,proth
out dx,al ;显示第一行码
mov al,ah
mov dx,protly
out dx,al ;显示第一列,黄色字
shl ah,01 ;左移1位
inc si
push cx
mov cx,0ffffh
delay3: loop delay3 ;延时
mov cx,0ffffh
delay4: loop delay4 ;延时
mov dx,io8255b
in al,dx ;从8255A口读一字节
test al,01 ;判PA0口是否为0
jz d8 ;若不为0,则转d8
dec [count2] ;为0,则表示定时时间已到,计字变量减1
mov dx,buff
add dx,08h ;把下一个字的行代码地址给buff
mov buff,dx
mov al,00 ;不为0,则继续往下执行
mov dx,protly ;关闭所有列显示
out dx,al
jmp c1 ;调回循环显示
d8: pop cx
loop next1 ;循环显示
mov al,00 ;不为0,则继续往下执行
mov dx,protly ;关闭所有列显示
out dx,al
mov ah,01
int 16h
jz b2
call PANDUAN
b2: jmp d1 ;不是,则循环显示
;-------------------------------------------------------------------------
DELAY PROC NEAR ;延迟子程序
push cx
mov cx,0ffh
ccc: loop ccc
pop cx
ret
DELAY ENDP
;-------------------------------------------------------------------------
PANDUAN PROC NEAR
mov ah,00
int 16h ;判断是否按了"r"
CMP AL,52H
JZ a3
ret
PANDUAN ENDP
;------------------------------------------------------------------------
a3: MOV AH,4CH ;是"r",返回
INT 21H
CODE ENDS
END START ;整个程序结束
;-------------------------------------------------------------------------
五,心得体会
通过一次综合的小型微机应用系统的软硬件设计,通过课程设计,进一步巩固所学的知识,并将所学的内容加以综合运用。将所学的理论与实际问题或应用相结合,进一步培养了我们自主学习的能力,综合运用知识的能力,以及创新实践的能力。并且了解双色点阵LED显示器的基本原理 ,掌握PC机控制双色点阵LED显示程序的设计方法 。
参考文献:
1). 许兴存 曾琪琳编著 《微型计算机接口技术》
北京 电子工业出版社 2003.8.
2). 戴梅萼 史嘉权编著《微型计算机技术及应用》
北京 清华大学出版社 2004.1.
微机原理课程设计设计报告姓名朱文斋班级学号30905020xx教师张荣标20xx年1月5日微机原理课程设计一目的结合微型计算机原理…
河北科技大学课程设计报告学生姓名学号专业班级课程名称学年学期指导教师年月课程设计成绩评定表目录一课程设计的目的1二设计题目1三设计…
接口技术基础实验报告学院计算机科学与技术学院班级计091学号09130220xx姓名曹恒楼指导老师顾晖时间20xx616接口技术课…
微机原理课程设计报告设计名称:LED七段数码管数字钟学院:电子信息学院班级:电科091提交时间:20##年6月15日一:设计内容设…
南京航空航天大学微机原理课程设计数据采集系统中断法微机原理课程设计数据采集系统中断法南京航空航天大学微机原理课程设计数据采集系统中…
中南大学本科生课程设计(实践)任务书、设计报告(大学计算机基础)题目学生姓名指导教师学院专业班级学生学号课程设计实践报告计算机基础…
西安科技大学课程设计报告课程名称计算机组成原理课题名称复杂模型计算机的设计专业计算机科学与技术班级计科1001班姓名李用维念文洪吴…
课程设计课程名称计算机绘图课程设计题目名称别墅建筑设计学生学院经济管理学院专业班级土资20xx级1班学号3106006265学生姓…
计算机网络课程设计报告一.课程设计的题目、目的及要求.......................................…
目录第一章实训任务概述111实训目的112实训任务1第二章课程设计结果221指令的执行流程222位扩展和字扩展523设计计算机运算…