admin 管理员组

文章数量: 1087675


2024年3月13日发(作者:matlab定义函数方法)

ELECTRONICS WORLD

技术交流

89S51单片机的16×16点阵汉字显示的设计

汕尾市职业技术学校 张光建

针对LED点阵显示汉字需要占用单片机多个并行口的问题,提

出了基于89S51单片机的16×16点阵汉字显示设计,利用74HC138

和74HC595对单片机并行口进行扩展,从硬件设计、软件设计方案

等关键环节,分别进行了详细讨论。

随着单片机技术的发展,LED点阵屏作为文字和图形显示的新

型媒体,由于亮度高、耗能低、色彩鲜艳、寿命长等特点,迅速出

现在学校、医院、车站等场所。但LED点阵显示需要占用单片机多

个并行口,而通用移位寄存器74HC595T和译码器74HC138,可以实

现对单片机IO的扩展,从而节约了大量的并口资源。本设计详细介

绍了74HC138和74HC595芯片在1616×16点阵LED显示屏的应用。

1 电路总体设计

16×16点阵汉字显示电路如图1所示,它由一片16×16点阵

LED显示屏、两片74HC138构成的行控制单元、两片74HC595构成

的列控制单元及AT89S51单片机构成。列控制单元用于输入数据,

而行控制单元用于逐行扫描。

图1 系统总体结构

1.1 16×16点阵工作原理

本设计采用的是共阴16×16点阵显示模块。它由256只发光二

极管按一定规律安装成方阵,从内部结构如图2所示,可以看出,

总共有16行和16列,每行的发光二极管阴极相连,每列的发光二极

管阳极相连。在行和列的交叉处有一个发光二极管,要使其中任一

个二极管发光,则其对应行为低电位,而对应的列为高电位即可。

1.2 行控制单元

行控制单元的控制原理是:先使第一行

Y

0

为低电平,其余行为

高电平,显示第一行数据;然后第二行

Y

1

为低电平,其余行电平,

显示第二行数据。按照这个规律每行以较快的速度不断进行刷

新,由于发光二极管的余辉效应和人的视觉暂留现象两个因素,

给人的印象就是一组静态的数据,不会产生闪烁感。动态显示能

够节省I/O端口,且功耗低。

本设计采用74HC138三位译码器。此译码器的原理如图3所

示。由于该译码器仅有8个输出,而16×16点阵显示模块有16行,

故采用两片74HC138级联控制16×16点阵显示模块的行。

134

图2 共阴16×16点阵显示模块内部结构

图3 两片74HC138级联电路图

74HC138的控制端为、和

E

3

,输入端为

A

0

A

1

A

2

,输出

端为

到。其工作原理为:(1)当、为低电位,

E

3

为高电平

时,74HC138才能工作;(2)当每一组输入数码与它对应的输出

端中只有一位为0,其余各端为1。例如

A

2

A

1

A

0

=110时,代表十进数

6的数字信号,只有

Y

6

输出为0,译码器输出为低电平有效。

两片74HC138级联的方法是:(1)输入端的连接方法:

A

0

A

1

A

2

采用并联方式;集成电路

U

1

的和集成电路

U

2

E

3

并联作为

A

3

端;(2)控制端的连接方法:集成电路

U

1

的和集成电路

U

2

并联作为使能端

EN

,低电平有效;集成电路

U

1

E

3

接电源,集

成电路

U

2

的接地。其工作原理为:(1)

EN

=1时,高电平无效,

两个集成电路

U

1

U

2

的均为1,停止工作;

EN

=0时,低电平有

效,两个集成电路

U

1

U

2

的均为0,正常工作。(2)当

A

3

A

2

A

1

A

0

的组合为0000到0111时,

A

3

=0,集成电路

U

1

的=0,低电平有效,

U

1

正常工作;集成电路

U

2

E

3

=0,低电平无效,

U

2

停止工作;当

A

3

A

2

A

1

A

0

的组合为1000到1111时,

A

3

=1,集成电路

U

1

的=1,高电

平无效,

U

1

停止工作;集成电路

U

2

E

3

=1,高电平有效,

U

2

正常工

作。由分析可知,

U

1

控制上半屏,而

U

2

控制下半屏。

1.3 列控制单元

列控制单元采用两片74HC595级联,如图4所示。74HC595把

串行输入信号转换成并行输出信号,其引脚功能如下:(1)串行

输入端为

DS

;(2)8位并行输出端为

Q

0

-

Q

7

,SQ为串行输出端,它

把数据输出到另一片74HC595的串行输入端;(3)

为移位寄

存器清零端,当位低电位时能把移位寄存器的数据清零。一般接高

电平;(4)

RCK

为数据输入时钟端。当该引脚上升沿时移位数据寄

存器的数据移位,从

Q

0

移到

Q

1

Q

1

移到

Q

2

,最后

Q

6

移到

Q

7

。当为下

ELECTRONICS WORLD

技术交流

降沿时移位数据寄存器的数据不变;(5)

RCK

为输出存储器锁存时

钟端。该引脚信号上升沿时移位寄存器的数据进入存储寄存器,下

降沿时存储寄存器数据不变:(6)

为使能端,一般接地。

74HC595的工作如下:当

SCK

引脚有一个上升沿脉冲时,DS的数

据送入移位寄存器一位,连续8个上升沿脉冲时,可以将一个8位数据

送入到移位寄存器。同时SQ也串行输出移位寄存器的高位值。当

RCK

引脚有一个上升沿脉冲时,移位寄存器中的值锁到锁存寄存器中。

当为低电平时,数据从

Q

0

-

Q

7

输出。

U

3

Q

0

-

Q

7

端控制16×16点阵

显示模块的

X

0

-

X

7

列,而U

4

Q

0

-

Q

7

端16×16点阵显示模块的

X

8

-

X

15

列。

图4 两片74HC595级联电路图

1.4 AT89S51的控制端口

AT89S51的P0.0-P0.4分别接行控制单元的

A

0

A

1

A

2

A

3

和EN四

个端口,而P0.5-P0.7分接列控制单元的

DS

RCK

SCK

三个端口。

2 用字模软件获取汉字点阵字模数据

任何一个汉字或字符号都是多个点组成的,汉字可以由16×16

点阵组成。目前点阵取模软件有多种,本设计采用PCtoL CD2002软

件。参数设置为:点阵格式为“阳码”,取模方式为“逐行式”,

取模走向为“顺向”,每行显示数据为“点阵16”。

3 绘制程序流程图

根据编程思路,该设计有四个模块:主程序模块、发送数据

字节模块、数据锁存模块和列控制模块。主程序不断循环控制上

半屏和下半屏的显示,实现汉字动态显示。剩下三个模块用于对

列的控制和数据的传送。程序流程图如图5所示。

参考程序如下:

#include

#include

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit _595_SCK = P0^7; //串行数据输入

sbit _595_RCK = P0^6; //存储寄存器时钟端

sbit _595_SDI = P0^5; //移位寄存器时钟端

sbit _138_EN = P0^4; //行控制使能端

/*********定义变量、函数和数组**********/

uchar dot_row;

void Ser_IN(unsigned char Data); //串行数据输入函数

void Par_OUT(void); //并行数据输出函数

void Delay1ms(unsigned int t);

uchar code Digit_Tab1[2][16] ={

{0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xC0,0x07,0xDE,0xF7,0xDE,

0xF7,0xDE,0xF7,0xC0,0x07},

{0xDE,0xF7,0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF5,0xF

E,0xFD,0xFE,0xFD,0xFF,0x01}

}; //汉字“电”取模,为二维数组,第一行为上半屏数据,

第二行为下半屏数据

/*********数据串行输入函数************/

void Ser_IN(unsigned char Data)

{

unsigned char i;

for(i = 0; i < 8; i++)

{

_595_SCK = 0; //当SCK上升沿到来时,数

据右移位一位数据到移位寄存器中

_595_SDI = Data & 0x01;

Data >>= 1;

_595_SCK = 1;

}

}

/*********数据并行输出函数************/

void Par_OUT(void)

{

_595_RCK = 0; //当SCK上升沿到来时,数据锁存到到锁

存寄存器中

_nop_();

_595_RCK = 1;

}

/*********主函数************/

void main(void)

{

TMOD = 0x01; //定时器0工作方式1,定时时间为1us

TH0 = (65536-1000) / 256;

TL0 = (65536-1000) % 256;

TR0 = 1;

ET0 = 1;

EA=1;

while(1);

}

/**********定时器0中断服务函数*******************/

void Timer0(void) interrupt 1

{

uchar dot_row;

TH0 = (65536 - 1000) / 256;

135

ELECTRONICS WORLD

技术交流

TL0 = (65536 - 1000) % 256;

for(dot_row=0;dot_row<8;dot_row++) //上半屏显示

{

Ser_IN(Digit_Tab1[0][2*dot_row+1]); //16位数据并行输出

Ser_IN(Digit_Tab1[0][2*dot_row]);

Par_OUT();

P0 = (P0&0xf0)|dot_row; //行控制输出

_138_EN=0;

_nop_();

_nop_();

}

for(dot_row=8;dot_row<16;dot_row++) //下半屏显示

{

Ser_IN(Digit_Tab1[1][2*(dot_row-8)+1]);

Ser_IN(Digit_Tab1[1][2*(dot_row-8)]);

Par_OUT();

P0 = (P0&0xf0)|dot_row;

_138_EN=0;

_nop_();

_nop_();

}

}

图6 调试后的效果图

图5 主程序点阵汉字显示流程图

经过调试,显示效果如图6所示,达到了设计效果。

作者简介:张光建(1973—),男,重庆,大学本科,电子技

术讲师,主要从事中职电子电工教学工作,研究方向:单片机。

(上接第133页)

IPAddress softGateway(192,168,4,1);

IPAddress softSubnet(255,255,255,0);

Config(softLocal,softGateway,softSubnet);

(softAPName,password);//创建AP网络

}

2.2.3 可移动终端APP软件设计

基于Android系统运行的APP为用户提供了查询温湿度数据的用

户交互界面、历史记录查询、终端节点设备管理等功能。

APP程序的使用多线程的编程模式创建一个网络线程专门负责

接收智能网关发送的节点数据,通过回调函数函数机制更新用户

界面。并保存温湿度的数据。APP界面基于Material Design的设计

风格增加界面的亲和性。使用第三方的MPAndroidChart图形库进

行界面的绘制,并通过SQLite数据库保存数据方便历史记录的查

询。APP与智能网关的数据包发送格式如表1所示。

表1 智能网关和APP协议格式

数据包头

FFFF

节点ID

2Byte

温度

2Byte

湿度

Byte

校验位

1Byte

束工作结束之后。首先对智能网关节点进行系统上电开始创建

Zigbee网络和WIFI网络,等待网络创建完成之后。启动终端设备

节点和设置可移动设备连接到WiFi网络,并运行APP程序。此时

通过APP可查看已经开始工作的终端节点采集的数据,为了更好

的标注每个终端节点,APP程序的节点管理功能可让用户给不同

节点编辑修改有意的备注名字,在APP显示数据时更能直观的确

定哪一个终端节点的数据设备。

结语:本文主要提出了一种在相对独立空间中基于无线传输

的温湿度采集的解决方案,通过CC2530芯片和Z-Stack协议构建

Zigbee网络,负责终端节点的数据传输,NodeMCU模块作为可

移动终端APP与Zigbee网络之间数据传递的桥梁,方便更多的可

移动设备查看数据创建了AP工作模式的WIFI网络。在可移动终

端的基于Android系统的APP程序和NodeMCU进行无线通信,获

取、保存温湿度数据并提供非常友好的用户交互界面。通过本解

决方案,可以有效的构建一个WSN网络,并且可进一步移植到其

它相关环境参数的采集和传输。

作者简介:李汉挺(1977—),男,山东济宁人,硕士,副

3 系统测试

将编写的代码程序下载对应的终端节点和智能网关的预备结

教授,济宁职业技术学院物联网研究所所长,主要研究方向:嵌

入式技术应用及物联网技术应用。

136


本文标签: 数据 点阵 显示 控制 节点