单片机课程设计点阵汉字显示.docx
《单片机课程设计点阵汉字显示.docx》由会员分享,可在线阅读,更多相关《单片机课程设计点阵汉字显示.docx(22页珍藏版)》请在冰豆网上搜索。
单片机课程设计点阵汉字显示
摘要
单片机是计算机技术、大规模集成电路技术和控制技术的综合产物。
经过30多年的发展历程,单片机应用已十分广泛和深入。
所以可以毫不夸张地说,任何设备和产品的自动化、数字化和智能化都离不开单片机。
现在,凡是电脑控制的设备和产品,必有单片机嵌入其中。
这一切表明,单片已成为人类生活中不可或缺的助手。
随着单片机应用的日益广泛,利用单片机控制汉字显示屏被广泛地应用与汽车报站器,广告屏等领域。
本文详细介绍了基于51单片机的LED显示屏控制系统的显示原理,对16*16点阵汉字进行显示,显示屏由4个8*8的LED点阵模块组成一个16*16点阵LED。
系统仿真利用PORTEUS仿真软件和KEIL软件的联调对LED点阵显示屏系统进行调试。
关键词:
LED点阵显示屏单片机PROTEUS仿真
1硬件设计
1.1设计框图及介绍
LED点阵总体框图如图1.1所示,点阵电路大体上可以分成微机本身的硬件、显示驱动电路、控制信号电路三部分。
控制电路部分包括一个51CUP和一些外围电路。
在整个电路当中此控制电路部分相当于一个上位机,它负责控制整个电路以及相应的程序的运行、与PC机的串行通讯、以及给屏体电路部分发送命令。
点阵显示屏体、以及它的行和列的各个驱动电路。
由于两部分的电路在制板时可以放到一起,所以可以将其字库放到控制电路部分使用串行通讯方式来与屏体电路部分进行数据和命令的传送。
此显示电路采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。
由行译码器给出的行选通信号,从第一行开始,按顺序依次对各行进行扫描(把该行与电源的一端接通)。
另一方而,根据各列锁存的数据,确定相应的列驱动器是否将该列与电源的另一端接通。
接通的列,就在该行该列点燃相应的LED;未接通的列所对应的LED熄灭。
可通过扫描输出口的控制实现颜色的转换。
图1.1点阵显示的总体框图
1.251系列单片机简介
单片机(Microcontroller,又称微处理器)是在一块硅片上集成了各种部件的微型机,这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。
8051单片机的基本结构见图1.2。
图1.28051单片机的基本结构
8051是MCS-51系列单片机的一个产品。
MCS-51系列单片机是Intel公司推出的通用型单片机,8051单片机系列指的是MCS-51系列和其他公司的8051衍生产品。
这些衍生品是在基本型基础上增强了各种功能的产品。
这些产品给8位单片机注入了新的活力,给它的开发应用开拓了更广泛的前景。
8051系列的内部结构可以划分为CPU、存储器、并行口、串行口、定时器/计数器、中断逻辑几部分。
(1)中央处理器
8051的中央处理器由运算器和控制逻辑构成,其中包括若干特殊功能寄存器(SFR)。
算术逻辑单元ALU能对数据进行加、减、乘、除等算术运算;“与”、“或”、“异或”等逻辑运算以及位操作运算。
ALU只能进行运算,运算的操作数可以事先存放到累加器ACC或寄存器TMP中,运算结果可以送回ACC或通用寄存器或存储单元中,累加器ACC也可以写为A。
B寄存器在乘法指令中用来存放一个乘数,在除法指令中用来存放除数,运算后B中为部分运算结果。
程序状态字PSW是个8位寄存器,用来寄存本次运算的特征信息,用到其中七位。
PSW的格式如下所示,其各位的含义是:
CY:
进位标志。
有进位/错位时CY=1,否则CY=0。
AC:
半进位标志。
当D3位向D4位产生进位/错位时,AC=1,否则AC=0,常用于十进制调整运算中。
F0:
用户可设定的标志位,可置位/复位,也可供测试。
RS1、RS0:
四个通用寄存器组选择位,该两位的四种组合状态用来选择0~3寄存器组。
。
OV:
溢出标志。
当带符号数运算结果超出-128~+127范围时OV=1,否则OV=0。
当无符号数乘法结果超过255时,或当无符号数除法的除数为0时OV=1,否则OV=0。
P:
奇偶校验标志。
每条指令执行完,若A中1的个数为奇数时P=1,否则P=0,即偶校验方式。
控制逻辑主要包括定时和控制逻辑、指令寄存器、译码器以及地址指针DPTR和程序寄存器PC等。
单片机是程序控制式计算机,即它的运行过程是在程序控制下逐条执行程序指令的过程:
从程序存储器中取出指令送指令存储器IR,然后指令译码器ID进行译码,译码产生一系列符合定时要求的微操作信号,用以控制单片机的各部分动作。
8051的控制器在单片机内部协调各功能部件之间的数据传送、数据运算等操作,并对单片机发出若干控制信息。
这些控制信息的使用专门的控制线,诸如PSEN、ALE、EA以及RST,也有一些是和P3口的某些端子合用,如WR和RD就是P3.6和P3.7,他们的具体功能在介绍8051引脚是一起叙述。
(2)存储器组织
8051单片机的存储器结构特点之一是将程序存储器和数据存储器分开,并有各自的寻址机构和寻址方式,这种结构称为哈佛结构单片机。
这种结构与通用微机的存储器结构不同,一般微机只有一个存储器逻辑空间,可随意安排ROM或RAM,访存时用同一种指令,这种结构称为普林斯顿型。
8051单片机在物理上有四个存储空间:
片内程序存储器和片外程序存储器、片内数据存储器和片外数据存储器。
8051片内有256K数据存储器RAM和4KB的程序存储器ROM。
除此之外,还可以在片外扩展RAM和ROM,并且各有64KB的寻址范围。
也就是最多可以在外部扩展2*64KB存储器。
8051的存储器组织结构如图2.3所示。
图1.38051存储器组织结构
64K字节的程序存储器(ROM)空间中,有4K字节地址区对于片内ROM和片外ROM是公用的,这4K字节地址是0000H~FFFH。
而1000H~FFFFH地址区为外部ROM专用。
CPU的控制器专门提供一个控制信号EA用来区分内部ROM和外部ROM的公用地址区:
当EA接高电平时,单片机从片内ROM的4K字节存储器区取指令,而当指令地址超过0FFFH后,就自动的转向片外ROM取指令。
当EA接低电平时,CPU只从片外ROM取指令。
程序存储器的某些单元是保留给系统使用的:
0000H~0002H单元是所有执行程序的入口地址,复位以后,CPU总是丛0000H单元开始执行程序。
0003H~002AH单元均匀地分为五段,用做五个中断服务程序的入口。
用户程序不应进入上述区域。
8051的RAM虽然字节数不很多,但却起着十分重要的作用。
256个字节被分为两个区域:
00H~7FH时真正的RAM区,可以读写各种数据。
而80H~FFH是专门用于特殊功能寄存器(SFR)的区域。
对于8051安排了21个特殊功能寄存器,每个寄存器为8位,所以实际上128个字节并没有全部利用。
内部RAM的各个单元,都可以通过直接地址来寻找,对于工作寄存器,则一般都直接用R0~R7,对特殊功能寄存器,也是直接使用其名字较为方便。
8051内部特殊功能寄存器都是可以位寻址的,并可用“寄存器名.位”来表示,如ACC.0,B.7等。
1.3LED点阵介绍
8×8单色点阵共需要64个发光二极管组成,且每个二极管是放置在行线与列线的叉点上。
对于点阵型LED显示可以采用共阴极或共阳极,本系统采用共阳极,其硬件电路如图1.1所示。
当行上有一正选通信号时,列选端八位数据为0的发光二极管便导通点亮。
这样只需要将图形或文字的显示编码作为列信号跟对应的行信号进行逐次扫描,就可以逐行点亮点阵。
只要扫描速度大于24Hz,由于扫描时间很快,人眼的视觉有暂留效应,就可以看到显示的是完整的图形或文字。
8×8点阵LED结构下图1.5所示。
图1.48×8点阵外观及引脚图
图1.58*8LED点阵结构
1.4LED显示方式
汉字显示屏用于显示汉字、字符及图像信息,在公共汽车、银行、医院及户外广告等地方都有广泛的应用。
下面是简单的汉字显示屏的制作,由单片机控制汉字的显示内容。
为了降低成本,使用了四块8×8的LED点阵发光管的模块,组成了一个16×16的LED点阵显示屏,如图2.10所示。
在这里仅做了四个汉字的显示,在实际的使用中可以根据这个原理自行的扩展显示的汉字,下面是介绍汉字显示的原理。
图1.6四块8×8的LED点阵组成16×16的LED点阵
LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。
以16×16点阵为例,把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第1行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定的时间,然后熄灭;再送出第2行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;….第16行之后,又重新燃亮第1行,反复轮回。
当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。
该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。
显示数据传输采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
但串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。
对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以致影响到LED的亮度。
采用串行传输中列数据准备和列数据显示的时间矛盾,可以采用重叠处理的方法。
即在显示本行各列数据的同时,传送下一行的列数据。
为了达到重叠处理的目的,列数据的显示就需要有锁存功能。
对于列数据准备来说,它应能实现串入并出的移位功能。
这样,本行已准备好的数据打入并行锁存器进行显示时,串行移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。
LED点阵显示模块进行的方法有两种:
(1)水平方向(X方向)扫描,即逐列扫描的方式(简称列扫描方式):
此时用一个P口输出列码决定哪一列能亮(相当于位码),用另一个P口输出行码(列数据),决定该行上那哪个LED亮(相当于段码)。
能亮的列从左到右扫描完16列(相当于位码循环移动16次)即显示出一个完整的图像。
(2)竖直方向(Y方向)扫描,即逐行扫描方式(简称行扫描方式):
此时用一个P口输出决定哪一行能亮(相当于位码),另一个P口输出列码(行数据,行数据为将列数据的点阵旋转90度的数据)决定该行上哪些LED灯亮(相当于段码)。
能亮的行从上向下扫描完16行(相当于位码循环移位16次)即显示一帧完整的图像。
本设计应用的是第一种的扫描方法,即水平方向(X方向)扫描。
每一个字由16行16列的点阵形成显示,即每个字均由256个点阵来表示,我们可以把每一个点理解为一个像素。
一般我们使用的16×16的点阵宋体字库,即所谓的16×16,是每一个汉字在纵横各16点的区域内显示的。
汉字库从该位置起的32字节信息记录了该字的字模信息。
事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。
我们以水平方向(x方向)扫描显示汉字的“江”为例来说明其扫描原理,每一个字由16行16列的点阵组成显示,如图下的,如果用8位的AT89S51的单片机来控制,由于单片机的总线为8位,一个字需要拆分成两个部分。
一般我们把它分解成上部分和下部分,上部分由8*16的点阵组成,下部分也由8*16的点阵组成。
在本例中单片机首先显示的是左上角的第一列的部分,即第0列的P00~P07口。
方向为P00到P07,显示汉字“江”的时候,P00到P04都是灭的,P05亮,即二进制00001000,转换为16进制为08H,如图2.11所示。
上半部分第一列完成之后,继续扫描下半部分的第一列,为了接线的方便,我们仍设计成由上往下的扫描方式,即从P27向P20方向扫描,从上图可以看到,这一列所有的都不亮,所以代码为00000000,16进制为00H,然后单片机转向上半部的第二列,除了P05亮,其他的都不亮,即为00000100,16进制为04H,这一列扫描完成之后继续进行下半部分的扫描,除了P21亮,其他的为不亮,为二进制00100000,即16进制20H。
按照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“江”的扫描代码为:
08H,20H,06H,20H,80H,7EH,63H,80H
0CH,04H,00H,04H,20H,04H,20H,04H
20H,04H,3FH,FCH,20H,04H,20H,04H
20H,04H,20H,04H,00H,04H,00H,00H
图1.7点阵显示原理图
由这个原理可以看到,无论显示何种字体或图像,都可以用这种方法来分析出它的扫描代码从而显示在屏幕上。
1.5硬件电路
在proteus中连接硬件电路图如图1.8所示
图1.8硬件电路图
2软件设计
2.1程序流程图
N
Y
2.2程序代码
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOVDPTR,#TAB;字码表初址赋值
MOVR1,#00H;列控制码
MOVR4,#96;移动“”及“单片机仿真”6个字符,共96列
CM:
MOVR5,#5;每屏反复显示5次
MOVR3,#16;列数
C1:
MOVR2,#0;取码指针
C16:
MOVP0,#00H
MOVP2,#00H;关显示
CLRP3.0
MOVA,R2
MOVCA,@A+DPTR;取当前列显示字码的第一个字节
MOVP0,A;送1~8行控制口
INCR2
MOVA,R2
MOVCA,@A+DPTR;取当前列的显示字码的第二个字节
MOVP2,A;送9~15行控制口
INCR2
MOVP1,R1;送列控制码
INCR1
ACALLD1MS;显示2MS
ACALLD1MS
DJNZR3,C16;一屏16列是否显示完
MOVR3,#16
DJNZR5,C1;未显示5次,继续
INCDPTR;一屏反复显示5次完,字码表初值加2
INCDPTR
DJNZR4,CM;96列未移动完,继续
AJMPMAIN;96列移动完,返回,重新从“”开始显示
D1MS:
MOVR6,#2
MOVR7,#248
DJNZR7,$
DJNZR6,$-4
RET
TAB:
DB000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H;
DB000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H;"",
DB000H,000H,000H,008H,000H,008H,0E0H,008H,0F4H,00DH,054H,005H,0F4H,07FH,0F8H,07FH;
DB01EH,005H,0FEH,005H,0FAH,006H,010H,002H,000H,006H,000H,004H,000H,000H,000H,000H;"单",0
DB000H,000H,000H,000H,000H,010H,000H,01CH,0FCH,00FH,0FCH,003H,040H,002H,040H,002H;
DB07EH,07FH,03EH,07FH,020H,000H,020H,000H,000H,000H,000H,000H,000H,000H,000H,000H;"片",1
DB000H,008H,040H,00CH,040H,006H,0DCH,03FH,0FEH,03FH,022H,011H,020H,01DH,0F0H,00FH;
DB0F0H,003H,0F0H,00FH,0F0H,01FH,010H,010H,000H,01CH,000H,01CH,000H,010H,000H,000H;"机",2
DB000H,001H,080H,001H,0C0H,000H,0F0H,03FH,0FCH,03FH,04CH,018H,040H,00CH,040H,027H;
DB0CCH,063H,0ECH,079H,028H,01FH,020H,007H,020H,000H,020H,000H,000H,000H,000H,000H;"仿",3
DB000H,000H,000H,010H,000H,098H,000H,0C8H,0E8H,06FH,0E8H,03FH,07CH,01BH,07EH,00AH;
DB0E6H,03FH,0E4H,07FH,004H,06CH,000H,004H,000H,004H,000H,000H,000H,000H,000H,000H;"真",4
END
3.主要芯片介绍
3.18051系列的单片机
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图片见下图附录1。
图3.189S51管脚图
(1).管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出
3.274HC154
(1)74HC154功能简介:
74HC154为4线-16线译码器,当选通端(E1、E2)均为低电平时,可将地址端(ABCD)的二进制编码在一个对应的输出端,以低电平译出。
如果将E1和E2中的一个作为数据输入端,由ABCD对输出寻址,74HC154还可作1线-16线数据分配器。
(2)引脚功能介绍
A、B、C、D译码地址输入端(低电平有效)
G1、G2选通端(低电平有效)
0-15输出端(低电平有效)
(3)74HC54真值表
图3.274HC54真值表
4PROTEUS仿真
Proteus仿真时,单片机需要加载程序,加载程序为.HEX文件。
本设计利用KeilμVision2,在新建Keil项目时选择AT89C52单片机作为CPU,将源程序导入,在“OptionsForTarget”对话窗口中,选中“Output”选项中的“CreateHEXFile”,编译链接后就可以生成.HEX文件。
在ProteusISIS中,选中AT89C51并单击鼠标左键,对AT89C51进行设置,设置单片机时钟频率为12MHz,按照正确的文件路径加载.HEX文件。
对单片机设置完毕后就可以开始仿真了。
仿真过程中如有硬件问题可在ProteusISIS中直接修改,如有软件问题可在KeilμVision2中直接修改,通过Keil与Proteus的联合调试就可以得到满意的结果。
利用Proteus实现了对点阵式LED滚动汉字显示屏的仿真,说明程序和电路图都没有问题。
仿真电路图:
仿真结果:
结果分析:
LED显示屏能滚动显示“单片机仿真”几个汉字,实现了程序功能。
5心得体会
通过这次的课程设计作品的制作让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。
通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的