论文部分内容阅读
摘 要:LED汉字显示屏到处可见,被广泛应用于各种公共场合,如公交车报站器,广告屏以及公告牌等。本文详细介绍了采用C语言实现16X16点阵屏的控制方法。
关键词:单片机;C语言;16X16点阵
单片机,又名单片微型计算机,主要由中央处理器(CPU)、存储器(RAM,ROM)、输入/输出端口(I/O口),定時器系统等组成。而利用C语言程序设计控制的16X16点阵屏则更凸显出了单片机控制的便捷性和可操作性。
1 16X16点阵屏控制电路
由于16X16点阵屏有16根行线和16根列线,在控制的时候,就需要单片机的32个I/O口,为了节约单片机的端口,本次控制利用芯片74HC154芯片来实现。74HC154芯片是4-16线译码器,该译码器可以将4个引脚扩展为16个引脚来使用,E1和E2引脚必须同为低电平时才能工作,其连接电路如图1所示。
2 16X16点阵屏C程序设计
在字模软件中,每一个字都是由16行16列的点阵组成的,即国标汉子库中的每一个字均由256个点来表示,我们可以把每个点理解为一个像素,把每一个字的字形理解为一副图像。由于单片机的总线为8位,所以在显示时,我采用74HC154输出的低电平扫描行,用单片机的8位端口分别控制左半屏和右半屏。
#include //包含头文件
#define uint unsigned int
#define uchar unsigned char
#define hang P1 //定义行扫描
#define lieg P3 //定义列的高八位数据
#define lied P2 //定义列的低八位数据
void delay(uint); //定义延时函数
uchar code tab0[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //定义行扫描数据
uchar code tab1[]={/*-- 文字: 校 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x40,0x10,0x20,0x10,0x20,0x11,0xFE,0xFC,0x00,0x10,0x88,0x31,0x04,0x3A,0x02,
0x54,0x88,0x50,0x88,0x90,0x50,0x10,0x50,0x10,0x20,0x10,0x50,0x10,0x88,0x13,0x06};
void main() //主函数
{
uchar i;
while(1)
{
for(i=0;i<16;i )
{
hang=tab0[i]; //扫描行
lieg=tab1[2*i]; //送左半屏数据
lied=tab1[2*i 1]; //送右半屏数据
delay(1); //每行延时
}
}
}
void delay(uint x) //延时函数 延时x X 0.5ms
{uint i,j;
for(i=0;i<62;i )
for(j=0;j }运行上述程序,在Proteus仿真中,我们看到了显示的结果如图2所示。
上述点阵程序用起来灵活,方便,用户可根据自己显示的汉字要求,更改字模,也可根据汉字显示的个数,来适当修改程序。
3 结束语
用C语言程序实现16X16点阵屏的控制,思路清晰,编程简单,可操作性强,学习者在读程序时简便易懂,为后续学习液晶显示屏的控制打下基础。
作者简介
付文莉,女,讲师,主要从事于电气专业的教学。
谭琼,女,助理讲师,主要从事于电气专业的教学。
关键词:单片机;C语言;16X16点阵
单片机,又名单片微型计算机,主要由中央处理器(CPU)、存储器(RAM,ROM)、输入/输出端口(I/O口),定時器系统等组成。而利用C语言程序设计控制的16X16点阵屏则更凸显出了单片机控制的便捷性和可操作性。
1 16X16点阵屏控制电路
由于16X16点阵屏有16根行线和16根列线,在控制的时候,就需要单片机的32个I/O口,为了节约单片机的端口,本次控制利用芯片74HC154芯片来实现。74HC154芯片是4-16线译码器,该译码器可以将4个引脚扩展为16个引脚来使用,E1和E2引脚必须同为低电平时才能工作,其连接电路如图1所示。
2 16X16点阵屏C程序设计
在字模软件中,每一个字都是由16行16列的点阵组成的,即国标汉子库中的每一个字均由256个点来表示,我们可以把每个点理解为一个像素,把每一个字的字形理解为一副图像。由于单片机的总线为8位,所以在显示时,我采用74HC154输出的低电平扫描行,用单片机的8位端口分别控制左半屏和右半屏。
#include
#define uint unsigned int
#define uchar unsigned char
#define hang P1 //定义行扫描
#define lieg P3 //定义列的高八位数据
#define lied P2 //定义列的低八位数据
void delay(uint); //定义延时函数
uchar code tab0[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //定义行扫描数据
uchar code tab1[]={/*-- 文字: 校 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x40,0x10,0x20,0x10,0x20,0x11,0xFE,0xFC,0x00,0x10,0x88,0x31,0x04,0x3A,0x02,
0x54,0x88,0x50,0x88,0x90,0x50,0x10,0x50,0x10,0x20,0x10,0x50,0x10,0x88,0x13,0x06};
void main() //主函数
{
uchar i;
while(1)
{
for(i=0;i<16;i )
{
hang=tab0[i]; //扫描行
lieg=tab1[2*i]; //送左半屏数据
lied=tab1[2*i 1]; //送右半屏数据
delay(1); //每行延时
}
}
}
void delay(uint x) //延时函数 延时x X 0.5ms
{uint i,j;
for(i=0;i<62;i )
for(j=0;j
上述点阵程序用起来灵活,方便,用户可根据自己显示的汉字要求,更改字模,也可根据汉字显示的个数,来适当修改程序。
3 结束语
用C语言程序实现16X16点阵屏的控制,思路清晰,编程简单,可操作性强,学习者在读程序时简便易懂,为后续学习液晶显示屏的控制打下基础。
作者简介
付文莉,女,讲师,主要从事于电气专业的教学。
谭琼,女,助理讲师,主要从事于电气专业的教学。