MAX7219有下列几组寄存器:
MAX7219内部的寄存器主要有:译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。编程时只有正确操作这些寄存器,MAX7219才可工作。
分别介绍如下:
(1)译码控制寄存器(X9H)
MAX7219有两种译码方式:B译码方式和不译码方式。当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。实际应用中可以按位设置选择B译码或是不译码方式。
(2)扫描界限寄存器(XBH)
此寄存器用于设置显示的LED的个数(1~8),比如当设置为0xX4时,LED 0~5显示。 (3)亮度控制寄存器(XAH)
共有16级可选择,用于设置LED的显示亮度,从0xX0~0xXF (4)关断模式寄存器(XCH)
共有两种模式选择,一是关断状态,(最低位D0=0)一是正常工作状态(D0=1)。 (5)显示测试寄存器(XFH)
用于设置LED是测试状态还是正常工作状态,当测试状态时(最低位D0=1)各位显示全亮,正常工作状态(D0=0)。
工作时,MAX7219规定一次接收16位数据,在接收的16位数据中:D15~D12可以与操作无关,可以任意写入,D11~D8决定所选通的内部寄存器地址,D7~D0为待显示数据或是初始化控制字。在CLK脉冲作用下,DIN的数据以串行方式依次移入内部16位寄存器,然后在一个LOAD上升沿作用下,锁存到内部的寄存器中。注意在接收时,先接收最高位D16,最后是D0,因此,在程序发送时必须先送高位数据,在循环移位。由于51是8位单片机故需要分两次来传送数据。
3.4通信系统硬件设计
AT89C52单片机具有全双工串行UART通道,支持单片机进行数据的串行传输。除了单片机要与PC机制定通信协议,确定发送速率外还需要解决的问题就是信号电平问题。RS-232C标准规定了PC机发送数据总线TXD和接收数据总线RXD采用EIA电平,即传送数字“1”时传输线上的电平在-3~-15V之间;传送数字“0”时,传输线上的电平在+3~+15之间。但单片机串行口采用正逻辑TTL电平,即数字“1”时为+5V数字“0”时为-5V,所以单片机与计算机不能直接相连进行通信必须将RS-232C与TTL电平进行转换。在该显示系统中,MAX232为通信系统中最重要的硬件组成部分。电路如图3-7所示:
16
VCCC1104C2104P3.1 TX11101291513455C1+C1-C2+C2-T1INT2INR1OUTR2OUTGNDVDDVCC216104VCCT1OUTT2OUTR1INR2INVEE147138C461041627384951C31110P3.0 RXMAX232ACPED Connector 9
图3-7串口通信系统电路图
3.5 GPRS模块硬件设计
在市场上有很多GPRS模块,本次设计原打算使用华为EM310模块,但是由于硬件购买难以购买,故选用宏电H7000DTU模块。
宏电H7000DTU(Data Transfer Unit)是一款基于GPRS/GSM网络的无线数据通信产品。H7000利用运营商的无线网络,为客户搭建起一条无线通信链路。图3-8就是DTU在通信链路中的位置示意图。
图3-8 DTU在通信链路中的位置
第4章 系统软件设计
4.1总体程序设计
系统软件采用C语言编写,按照模块化的设计思路设计。首先分析程序所要实现的功能,程序要实现串口通信,静态显示两大大功能。其功能结构如图2-4所示。通信程序接收上位机数据,交给主程序处理再通过控制程序选择不同的显示程序进行显示。
主程序的工作流程如图4-1所示:
17
开 始 中断开始 系统初始N 从显示数组读取数据到显示寄存RI=1? Y N 起始位? Y 调用相应显示程接收显示数据及控制命令 读取显示控制命令选择显示将显示数据移入显示数组将控制命令赋值给控制字符 中 断 返 回
图4-1主程序流程图
程序开始时首先必须对单片机进行初始化,其中初始化的内容包括:中断优先级的设定,中断初始化,串行通信时通信方式的选择和波特率的设定,各IO口功能的设定等。初始化完成后程序进入待机状态等待中断的发生,该程序中主要用到了两个外部中断源和串行中断。外部中断源由按键的电平变化触发,外部中断主要功能是选择LED点阵显示屏的控制方式是由按键控制还是上位机控制和显示状态是静态显示还是动态显示。串行中断包括发送中断和接收中断都是由软件触发。中断产生后由预先初始化时设定跳转执行中断子程序。中断程序设定了LED点阵显示屏所要显示的内容和显示的方式,最后执行的是各种显示程序。按照设定的方式和内容显示出所需要的内容。
4.2显示程序的设计
4.2.1 LED显示屏的显示方式
LED点阵屏显示方式主要由静态显示和动态扫描显示两种。
对静态显示来说,每一个发光二极管都需要一套驱动电路,一帧画面输入以后便可一劳永逸地显示,除非我们改变了显示内容,需要重新输出新的点阵数据.这种方式系统原理相对简单一些,但所需的译码驱动装量很多,引线多而繁杂,不便于大屏幕的制造,成本高,其可靠性也较低.
另一种动态扫描显示是把整个LED屏幕分成若干部分,每一幅画面的显示是显示完一部分后,又显
18
示第二部分??直到显示完最后一部分又重新开始显示第一部分,重复循环进行.在重复扫描速度足够快的情况下,我们看到的就是一幅稳定的画面.也就是说采用动态扫描显示需要不断进行画面的刷新.在这种方式下其显示驱动电路可重复利用,引线也大大减少,从而使硬件成本降低,且屏幕上的发光二极管轮流发光,使用时的耗电量大大降低.大屏幕的制造、维护要容易许多,可靠性也增加了.
两种显示方式的比较再结合51单片机IO口数量有限的原因决定采用动态扫描的方式进行显示。 动态扫描分为行扫描和列扫描两种方式区别在于选通端和数据输入端分别是行还是列。先选通列然后再从行送入对应列的数据,这样从第1列到第8列循环往复,只要切换的速度足够的快利用人眼的延时特性就可以看见一幅稳定的画面。
4.2.2显示程序的设计
显示采用的是列扫描的显示方式,选通一列后按照列与数据元素的对应关系第i列对应的行数据为数组中的第i和第i+16个元素。将对应元素的由低至高位依次从端口输出具体做法为将元素向右逻辑移位后再与0X01相与,所得结果通过单片机端口输出到串并转换器的A端,锁存在锁存器里完成一列数据移位后再将其输出。如此依次循环选通各列来显示所需画面。
开 始开 始读入显示数组读入显示数组显 示显 示显示数组元素在数组中的位置前/后移一位显示数组元素逻辑左/右移一位移位次数是否为16Y移位次数是否为16Y图4-2左右移/上下移程序流程图
动态显示程序流程如图4-5所示,根据显示数据的存储原理通过改变实际LED列与数据逻辑列的方法来实现程序的左右移动。显示数据与列的对应关系为:第i列对应的数据为数组中i和第2×i个数据。所以当MAX7219选通时,而送入后一列的数据则相当于画面左移移位,同理送入前一列数据相当于右移一位。如此循环则产生一幅稳定运动的画面。
4.3通信程序的设计
系统采用串行中断的方式进行通信。MCS-51单片机的五个中断源两种类型:一类是外部中断源;
19
NN
另一类是内部中断源,包括两个定时器/计数器(T0和T1)的溢出中断和串行口的接收和发送中断。MCS-51单片机设置了4个专用寄存器用于中断控制,分别为定时器控制寄存器(TCON),串行口中断控制器(SCON),中断允许控制寄存器(IE),中断优先级控制寄存器(IP)。编程时通过设置其状态来管理中断系统。
在编辑中断程序时首先是将中断控制寄存器(IE)初始化。其控制位分布如表。EA为中断允许总控制位,EA=1时CPU开发中断;EA=1时。CPU屏蔽所有中断。ES、ET、EX1、ET0、EX0为对应的串行口中断、定时器/计数器1中断、外部中断1中断、定时器/计数器0中断、外部中断0中断的中断允许位。对应位为1时允许其中断,对应位为0时,禁止其中断。
D7 EA D6 — D5 — D4 ES D3 ET1 D2 EX1 D1 ET0 D0 EX0 表4-1中断允许寄存器格式
所以初始化时设定中断允许寄存器初值为0XFF,指令为IE=0XFF。程序设计时还要考虑到中断优先级的问题。因为不同的中断同时产生而CPU响应的顺序取决于内部查询顺序。
设置串口工作方式1,波特率9600,计算可得计数器初值的十六进制表示为0XFD。通信协议如表4-2所示: 数据结构 第1个字节 第2至第33个字节 第34个字节 内容 起始标志位‘S’ 显示数据 控制指令 作用 判断是否开始接收数据 LED的显示内容 控制LED显示方式 表4-2串口通信数据结构
具体串口中断程序流程图如图4-3所示,在主程序中先进行了串行中断的初始化,初始化内容包括了串行工作方式选择,波特率的设定,计数初值的设定。程序开始进入中断等待,当PC机向单片机发送数据时产生中断接收允许位RI置1,将SBUF(缓冲寄存器)中的值输入到暂存器中进行数据处理。首先判断数据是否设定的起始标志位‘S’如果是则开始接收起始位后的33个字节,不是则中断返回继续等待。接收到第34个字节后便将收到的数据发送回PC机进行验证比较。
20