51单片机16x16点阵设计 下载本文

课程设计说明书 第3 页

图2 51单片机内部结构

51是MCS-51系列单片机的一个产品。MCS-51系列单片机是Intel公司推出的通用型单片机,51单片机系列指的是MCS-51系列和其他公司的51衍生产品。这些衍生品是在基本型基础上增强了各种功能的产品。这些产品给8位单片机注入了新的活力,给它的开发应用开拓了更广泛的前景。

51系列的内部结构可以划分为CPU、存储器、并行口、串行口、定时器/计数器、中断逻辑几部分。

(1)中央处理器

51的中央处理器由运算器和控制逻辑构成,其中包括若干特殊功能寄存器(SFR)。算术逻辑单元ALU能对数据进行加、减、乘、除等算术运算;“与”、“或”、“异或”等逻辑运算以及位操作运算。

PSW的格式如下所示,其各位的含义是:

表1 PSW寄存器各位的含义

D7 CY D6 AC D5 F0 D4 RS1 D3 RS0 D2 OV D1 D0 P CY:进位标志。有进位/错位时CY=1,否则CY=0。

AC:半进位标志。当D3位向D4位产生进位/错位时,AC=1,否则AC=0,常用于十进制调整运算中。

课程设计说明书 第4 页

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等。

(2)存储器组织

51单片机在物理上有四个存储空间:片内程序存储器和片外程序存储器、片内数据存储器和片外数据存储器[4]。

图3 51存储器组织结构

程序存储器的某些单元是保留给系统使用的:0000H~0002H单元是所有执行程序的入口地址,复位以后,CPU总是丛0000H单元开始执行程序。0003H~002AH单元均匀地分为五段,用做五个中断服务程序的入口。用户程序不应进入上述区域。

51的RAM虽然字节数不很多,但却起着十分重要的作用。256个字节被分为两个区域:00H~7FH时真正的RAM区,可以读写各种数据。而80H~FFH是专门用于特殊功能寄存器(SFR)的区域。对于8051安排了21个特殊功能寄存器,每个寄存器为8位,所以实际上128个字节并没有全部利用。

内部RAM的各个单元,都可以通过直接地址来寻找,对于工作寄存器,则一般都直接用R0~R7,对特殊功能寄存器,也是直接使用其名字较为方便。8051内部特殊功能寄存器都是可以位寻址的,并可用“寄存器名.位”来表示,如ACC.0,B.7等。

课程设计说明书 第5 页

(3)AT89C51芯片

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含4k bytes的反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域[5]。AT89C51引脚图如图4所示。

图4AT89C51引脚图

AT89C51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个十六位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位[6]。 2.2 点阵显示原理

一般的点阵都是8x8的,即横竖都有8个发光二极管,如图5所示。

观察二极管正负极,我们可以很容易发现,如果赋予P0=0xff;P2=0x00;那么所有的发光二极管将被点亮,从而点阵就可以实现全亮。类似的,如果需要实现某一列或者

课程设计说明书 第6 页

某一行全亮,也可以进行类似的赋值。比如,我们要实现第一列全亮,第一列全亮就要求P20=0;其他为1则代码为P0=0xff;P2=0xfe;但是如果需要让点阵显示一个字符的话,上述赋值则不能达到目的,需要通过动态扫描来实现。扫描包括行扫描和列扫描,我们可以任意使用其中一种。假设我们使用行扫描,就是首先令P07为1,即P00=0x80;然后观察在这一行上有哪些二极管被点亮,点亮的那一列所对应的端口就为0,不亮的就为1,记下此时P2数值,短暂延时过后,令P06=1,即P00=0x40;然后观察在这一行上有哪些二极管被点亮,点亮的那一列就为0,不亮的就为1,记下此时P2数值,同理如此重复下去,直到P00=0x01;那么所有的P0和P2的数值就构成了两个长度为8的数组,我们可以在程序中每个一段时间按顺序发送一组代码,只要时间段足够短,那么我们就可以在点阵上看到稳定的字符了。

图5 8x8点阵示意图

2.3 列驱动电路

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。具体就16×16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;…… 第十六行之后又重新燃亮第一行,这样反复轮回。采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两个部分。对于串行传输方