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
•
版权声明:本文标题:89S51单片机的16×16点阵汉字显示的设计 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710277366a565746.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论