课程论文首页
院、系(部) 电子信息工程系 专业
电信
班级
092
学号
910706210
姓名
李志民
课程教师
林志雄
课程名称
科研专题与论文写作
论文题目 基于 Protues 与 C 语言的 LED 广告屏设计
成绩
评
语
复
核
人
意
见
签字:
年 月
日
签字:
年 月
日
基于 Protues 与 C 语言的 LED 广告屏设计
李志民
摘要:设计选用由4个8×8点阵模块组合而成的16×16 LED 点阵显示屏,以AT89S52 单片机为主控芯片,
采用74hc595作为数据扫描和74hc154译码器驱动。设计中主要运用了Proteus仿真设计软件,给出了完整设
计电路和Keil编程软件的C语言程序,并画出了编程思路的流程图。通过调试、运行,最终完成了一个完整
的仿真电路设计,其功能是在16×16的LED点阵中移动循环显示出"李志民论文题"六个汉字。其中大部分功
能是通过Protues仿真软件实现的。
关键词:Proteus 仿真;单片机;汉字移动显示;LED 点阵
0 引言
LED 显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光
率高、使用寿命长、组态灵活、色彩丰富、制作简单,安装方便以及对室内外环境适应能力
强等优点,被广泛应用于各种公共场合广泛应用于金融证券、银行利率、商业广告、文化娱
乐等方面。 本文介绍的是一种可用在实验室等场合的公告牌的LED 点阵电子显示屏设计。
公告内容随时可以更新,能实现汉字或图片的移动循环显示。考虑到所需元器件的易购性,
本设计使用了4个8×8 的点阵发光管模块,组成16×16 发光点阵,显示待定的中文、字符
以及数字。
1
LED 显示的基本原理
8×8 点阵的外观及引脚如图 1 所示,其等效电路如图 2 所示。由等效电路中可以看出,
只要合理的控制各个 LED 的阳极和阴极的电位,就可以控制 LED 的点亮和熄灭。但一般情
况下,8×8 点阵只能显示数字和之母,并不能显示汉字及更为复杂的图形信息,主要是因
为它们没有足够的信息显示单位,一般情况下要完全显示出常用汉字至少需要 16×16 点阵,
但由于 Prouteus 元件库中没有 16×16LED 点阵模块,为了达到显示要求,每个汉字可由 4
个 8×8LED 模块组成。组合方式为先对每个 8×8 模块行列引脚连接好总线,然后四个单色
模块紧密组合一起成为一个 16×16 模块。
(图一 8×8 点阵的外观及引脚图)
(图二 8×8 点阵的等效电路)
驱动电路采用动态扫描驱动方式,采用一个74hc154译码器和两个74hc595共同驱动,单
片机上电复位后,按逆向式逐列扫描,在某一时刻只有一列的LED被对应的字模数据驱动点
亮。只要扫描时间合适,利用人眼的视觉暂留特性,看上去整个字符就显示在LED点阵显示
器上。
2 汉字显示电路设计
汉字点阵的控制电路采用AT89C52单片机,硬件电路由单片机接口电路、LED显示屏行列
驱动电路、LED点阵显示屏三部分组成,如图3所示,电路用Proteus软件画出,根据选用的
译码器不同而变化,具体画法参见文献[1]。
3 汉字显示程序设计
(图3 汉字点阵显示电路原理图)
设计中,先通过汉字取模软件获得“李志民论文题”六个字相对应于16×16点阵的16
进制代码,并定义为数组。在主程序中,先通过设定一个循环16次的For语句嵌套来扫描一
次完整的16列点阵,并通过CP上升沿把数据送入移位寄存器,即为一个完整的汉字,然后设
定每个汉字显示3次,利用人眼的视觉暂留特性,看上去整个字符就显示在LED点阵显示器
上。接着设定移动效果,因为是16×16点阵,即每一列都有两个8×8,只要设定让每列显示
完3次之后再把字模表的数据指针+2即可实现移动一列的效果,并通过一个大循环实现汉字
的不断左移效果,当全部移动完毕之后,再用while大循环使之回到起点继续左移,最终实
现常见广告屏的汉字的移动循环效果。
根据以上硬件电路和单片机控制原理,编程思路如图4所示。
注:完整的程序附录在最后。
(图4 程序流程图)
4 仿真及结果
仿真方法是:
(1)在 Keil C51 仿真软件下创建项目,并把上述源程序添加到项目中,通过编译产生一
个".hex"为后缀的文件,此文件就是用于烧写到 Proteus 软件中 AT89C52 芯片的文件,参考
文献[2]。
(2)把生成的".hex"为后缀的文件添加到 Proteus 软件中绘制的 AT89C52 芯片中作为控制
程序。方法参见文献[3]。
(3)在 Proteus 软件仿真电路图中点击左下角的运行按钮,则可在 LED 显示点阵中看到"
李志民论文题"六个汉字轮流移动显示的结果。从而达到一般广告屏的效果。六个字显示出
来如图 5 所示。
5 结束语
(图 5 最终显示效果)
在本文中采用 Proteus 设计 16×16 点阵显示广告屏,借助其功能强大的仿真系统对设
计的系统进行实时仿真,以检测系统设计的正确性与合理性,并可以根据仿真电路图制作硬
件电路,这种设计具有传统逻辑设计方法所无法比拟的优越性。
参考文献:
[1] 周润景.基于 Proteus 的电路与单片机系统设计与仿真 [M].北京:北京航空航天大学出版社,2005.
[2] 金炯泰,金奎焕 .如何使用 KEIL8051C 编译器[M].北 京:北京航空航天大学出版社,2002.
[3] 李秀忠.单片机应用技术[M].北京:人民邮电出版 社,2007.
[4] 曹巧嫒 .单片机原理及应用[M].北京 :电子工业出版社,2002.
[5] 潘永雄 .新编单片机与应用[M].西安 :西安电子科技大学出版社,2003.
附录:完整的程序代码如下:
#include
#define uchar unsigned char
sbit ST_CP=P3^2;
uchar code bmp[32*8]={
//字模表
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*" ",0*/
0x80,0x08,0x84,0x08,0x44,0x08,0x44,0x08,0x24,0x09,0x14,0x49,0x0C,0x89,0xFF,0x79
,
0x0C,0x0D,0x14,0x0B,0x24,0x09,0x44,0x08,0x44,0x08,0x84,0x08,0x80,0x08,0x00,0x00,
/*"李",1*/
0x08,0x40,0x08,0x38,0x88,0x00,0x88,0x00,0x88,0x3C,0x88,0x40,0x88,0x40,0xFF,0x42
,
0x88,0x4C,0x88,0x40,0x88,0x40,0x88,0x70,0x88,0x04,0x08,0x08,0x08,0x30,0x00,0x00,
/*"志",2*/
0x00,0x00,0x00,0x00,0xFE,0xFF,0x22,0x41,0x22,0x21,0x22,0x11,0x22,0x01,0x22,0x01
,
0xE2,0x03,0x22,0x0D,0x22,0x11,0x22,0x21,0x3E,0x41,0x00,0xF1,0x00,0x00,0x00,0x00,
/*"民",3*/
0x40,0x00,0x40,0x00,0x42,0x00,0xCC,0x7F,0x00,0x20,0x40,0x10,0x20,0x00,0x90,0x3F
,
0x0C,0x44,0x03,0x42,0x0C,0x41,0x90,0x40,0x20,0x40,0x40,0x70,0x40,0x00,0x00,0x00,
/*"论",4*/
0x08,0x80,0x08,0x80,0x08,0x40,0x38,0x40,0xC8,0x20,0x08,0x11,0x09,0x0A,0x0E,0x04
,
0x08,0x0A,0x08,0x11,0xC8,0x20,0x38,0x40,0x08,0x40,0x08,0x80,0x08,0x80,0x00,0x00,
/*"文",5*/
0x80,0x80,0x80,0x60,0xBE,0x1C,0xAA,0x20,0xAA,0x7F,0xAA,0x44,0xBE,0x44,0x80,0x44
,
0x02,0x50,0xF2,0x4B,0x1A,0x44,0xD6,0x43,0x12,0x44,0xF2,0x4B,0x02,0x50,0x00,0x00,
/*"题",6*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*" ",7*/
};
// 延时毫秒@12M,ms最大值255
void delay(uchar ms)
{
uchar i;
while(ms--)
for(i=0;i<110;i++);
}
void main()
{
uchar base,col;
while(1)
{
for(base=0;base<=224;base=base+2) //控制移动效果。偶数 32*(8-1)=224;
{
for(col=0;col<16;col++) // 显示一个汉字
{
SBUF=bmp[base+col*2];
delay(1);
SBUF=bmp[base+col*2+1];
delay(1);
P1=col;
ST_CP=0;
ST_CP=1;
delay(1);
}
//CP上升沿
//移位寄存器的数据进入数据存储寄存器
//延时显示
}
}
}