4.2.2 点阵数据表达方式
该显示系统的显示数据采取纵向取模方向正向的数据存储方式
即数据是纵向的,一个像素对应一个位。8个像素对应一个字节,字节的位顺序是上高下低,比如从上到下8个点的状态是“*-----*-”(*为黑点,-为白点),则转换的字模数据是0x82(B1000_0010)。如图(4-3)所示,一幅16×16的点阵画面点阵数据按照B1B2B3……B31B32存储。所以一幅画面的数据量为32字节。画面显示时选通的第i列对应的数组元素为第i和i+16个元素[16]。 4.2.3 显示程序的设计
显示程序分为静态显示程序、左移显示、右移显示、上移显示、下移显示五种种显示方式。其中上下左右移动程序都调用了静态显示程序为子程序。静态显示程序流程图如图4-4所示: 开 始
初 始 化
读取显示数
依次选通列,行74LS164的
CLOCK端置低,锁存器禁止输出
对应行数组元素与0X01相与,
相与结果写入单片机端口输出
数组元素右移一位,对应
74LS164 CLOCK端置高
右移次数是否为8? Y 锁存器允许输出
N
图4-4 静态显示程序流程图
显示采用的是列扫描的显示方式,选通一列后按照列与数据元素的对应关系第i列对应的行数据为数组中的第i和第i+16个元素。将对应元素的由低至高位依次从端口输出具体做法为将元素向右逻辑移位后再与0X01相与,所得结果通过单片机端口输出到串并转换器的A端,锁存在锁存器里完成一列数据移位后再将其输出。如此依次循环选通各列来显示所需画面[17]。
开 始开 始读入显示数组读入显示数组显 示显 示显示数组元素在数组中的位置前/后移一位显示数组元素逻辑左/右移一位移位次数是否为16Y移位次数是否为16Y图4-5 左右移/上下移程序流程图
动态显示程序流程如图4-5所示,根据显示数据的存储原理通过改变实际LED列与数据逻辑列的方法来实现程序的左右移动。显示数据与列的对应关系为:第i列对应的数据为数组中i和第2×i个数据。所以当ULN2803选通时,而送入后一列的数据则相当于画面左移移位,同理送入前一列数据相当于右移一位。如此循环则产生一幅稳定运动的画面。
显示数组中,第1至16个元素的第8至第1位LED显示屏中的第1至第8行。同理第17至32个元素的第8至第1位LED显示屏中的第9至第16行。所以将元素数据进行逻辑位移便能产生上下移动的效果[18]。 4.3 通信程序的设计
系统采用串行中断的方式进行通信。MCS-51单片机的五个中断源两种类型:一类是外部中断源;另一类是内部中断源,包括两个定时器/计数器(T0和T1)
NN
的溢出中断和串行口的接收和发送中断。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时,禁止其中断。
表4-1 中断允许寄存器格式
D7 EA D6 — D5 — D4 ES D3 ET1 D2 EX1 D1 ET0 D0 EX0 所以初始化时设定中断允许寄存器初值为0XFF,指令为 IE=0XFF。程序设计时还要考虑到中断优先级的问题。因为不同的中断同时产生而CPU响应的顺序取决于内部查询顺序。
设置串口工作方式1,波特率9600,计算可得计数器初值的十六进制表示为0XFD。通信协议如表4-2所示:
表4-2 串口通信数据结构
数据结构 第1个字节 第2至第33个字节 内容 作用 起始标志位‘S’ 判断是否开始接收数据 显示数据 LED的显示内容 控制指令 控制LED显示方式 具体串口中断程序流程图如图4-6所示,在主程序中先进行了串行中断的初始化,初始化内容包括了串行工作方式选择,波特率的设定,计数初值的设定。程序开始进入中断等待,当PC机向单片机发送数据时产生中断接收允许位RI置1,将SBUF(缓冲寄存器)中的值输入到暂存器中进行数据处理。首先判断数据是否设定的起始标志位‘S’如果是则开始接收起始位后的33个字节,不是则中断返回继续等待。接收到第34个字节后便将收到的数据发送回PC机进行验证比较。
第34个字节
中断开始 RI=1? N Y 接收串口数据 N 起始位‘S’ Y 接收起始位后33位数据 N 接收到第34位? Y 将第2位起的32 位数据发回PC机 中断返回
图4-6 通信程序流程图
所有软件编写完成后都必须经过编译才能被单片机识别使用。为了减小软件的修改和优化难度,先把各子程序写为一个可单独执行的完整程序。各子程序编译没有错误后再输入单片机进行验证,这两项都通过后再将所有的程序整合到一起形成一个完整的程序再进行编译和验证。
六、调试
把显示屏电路和显示屏驱动电路分别做在两块电路板上,显示屏电路的行扫描信号输出管脚和列显示信号数据输出管脚分别引用两排16针的排针引出,排针长的那一头接到电路板的底层,以方便插入驱动电路的插槽中。同样在驱动电路用两排16脚的插槽将行扫描信号输出管脚和列显示信号数据输出管脚引出,在画PCB时应当注意屏电路PCB中两排排针之间的距离要与驱动电路PCB中两排插槽之
间的距离一样,才能保证能正确地将显示屏电路板排到驱动电路电路板上方。以下为该电路的实物图与PCB。
七、设计总结
1、为方便调试应该给该电路加上一个下载电路部分,每次烧程序调试都要把芯片取出插入,容易损坏芯片的管脚。
2、为了合适大部分的取字模软件,在画原理图应当考虑列显示屏显示信号输入管脚由左到右的接法;大部分的取字模软件都是从左到右的取模方式,所以应当把显示屏的列信号显示输入管脚从左到右接地接到单片机P2,P0口时由高位接到低位。
八、心得体会
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
说实话,课程设计真的有点累.然而,当我一着手清理自己的设计成果,漫漫回味1周的心路历程,一种少有的成功喜悦即刻使倦意顿消.虽然这是我刚学会走完的第一步,也是人生的一点小小的胜利,然而它令我感到自己成熟的许多,另我有了一中”春眠不知晓”的感 悟. 通过课程设计,使我深深体会到,干任何事都必须耐心,细致.课程设计过程中,许多计算有时不免令我感到有些心烦意乱:有2 次因为不小心我计算出错,只能毫不情意地重来.但一想起老师平时对我们耐心的教导,想到今后自己应当承担的社会责任,想到世界上因为某些细小失误而出现的令世人无比震惊的事故,我不禁时刻提示自己,一定呀养成一种高 度负责,认真对待的良好习惯.这次课程设计使我在工作作风上得到了一次难得的磨练