本科生毕业论文
选通第1列选通第2列选通第16列选通LED第1列16×16LED选通LED第2列16×16LED选通LED第16列16×16LED读取所需要显示的数据至显示寄存器按数据导通相应行从数据中读取第1列对应的行数据按数据导通相应行从数据中读取第2列对应的行数据按数据导通相应行从数据中读取第16列对应的行数据 图4-2 扫描显示程序原理图
4.2.2 点阵数据表达方式
该显示系统的显示数据采取纵向取模方向正向的数据存储方式如图4-3,
图4-3 点阵数据原理图
即数据是纵向的,一个像素对应一个位。8个像素对应一个字节,字节的位顺
21
本科生毕业论文
序是上高下低,比如从上到下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 静态显示程序流程图
显示采用的是列扫描的显示方式,选通一列后按照列与数据元素的对应关系第
22
本科生毕业论文
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)的溢出中断和串行口的接收和发送中断。MCS-51单片机设置了4个专用寄存器用于
23
NN
本科生毕业论文
中断控制,分别为定时器控制寄存器(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个字节 第34个字节 内容 起始标志位?S? 显示数据 控制指令 作用 判断是否开始接收数据 LED的显示内容 控制LED显示方式 具体串口中断程序流程图如图4-6所示,在主程序中先进行了串行中断的初始化,初始化内容包括了串行工作方式选择,波特率的设定,计数初值的设定。程序开始进入中断等待,当PC机向单片机发送数据时产生中断接收允许位RI置1,将SBUF(缓冲寄存器)中的值输入到暂存器中进行数据处理。首先判断数据是否设定的起始标志位?S?如果是则开始接收起始位后的33个字节,不是则中断返回继续等待。接收到第34个字节后便将收到的数据发送回PC机进行验证比较。
24