LED点阵心形流水灯单片机设计文档格式.docx

上传人:b****1 文档编号:839951 上传时间:2023-04-29 格式:DOCX 页数:24 大小:798.62KB
下载 相关 举报
LED点阵心形流水灯单片机设计文档格式.docx_第1页
第1页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第2页
第2页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第3页
第3页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第4页
第4页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第5页
第5页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第6页
第6页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第7页
第7页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第8页
第8页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第9页
第9页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第10页
第10页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第11页
第11页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第12页
第12页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第13页
第13页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第14页
第14页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第15页
第15页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第16页
第16页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第17页
第17页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第18页
第18页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第19页
第19页 / 共24页
LED点阵心形流水灯单片机设计文档格式.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

LED点阵心形流水灯单片机设计文档格式.docx

《LED点阵心形流水灯单片机设计文档格式.docx》由会员分享,可在线阅读,更多相关《LED点阵心形流水灯单片机设计文档格式.docx(24页珍藏版)》请在冰点文库上搜索。

LED点阵心形流水灯单片机设计文档格式.docx

ALE/PROG:

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

PSEN:

程序储存允许(PSEN)输出。

是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP:

外部访问允许,欲使CPU只访问外部程序存储器(地址为0000H-FFFFH),EA端须保持低电平(接地)。

如EA端为高电平(接VCC端),CPU则执行内部程序存储器的指令。

FLASH存储器编程时,该引脚加上相应的编程允许电源VPP。

  XTAL1:

振荡器反相放大器和内部时钟发生电路的输入端。

  XTAL2:

振荡器反相放大器的输出端。

P0口:

P0口是一个8位漏极开路的双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用作高阻抗输入。

P1口:

P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。

作为输入口时要向端口写“1”。

引脚号第二功能:

  P1.0T2(定时器/计数器T2的外部计数输入),时钟输出

  P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)

  P1.5MOSI(在系统编程用)

  P1.6MISO(在系统编程用)

  P1.7SCK(在系统编程用)

  P2口:

P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。

同样作为输入使用时先向该端口写“1”。

  P3口:

P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。

作为输入时先向P3端口写“1”。

  端口引脚第二功能:

  P3.0RXD(串行输入口)

  P3.1TXD(串行输出口)

  P3.2INTO(外中断0)

  P3.3INT1(外中断1)

  P3.4TO(定时/计数器0)

  P3.5T1(定时/计数器1)

  P3.6WR(外部数据存储器写选通)

P3.7RD(外部数据存储器读选通)

此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。

2.1.5存储器结构

  MCS-51器件有单独的程序存储器和数据存储器。

外部程序存储器和数据存储器都可以64K寻址。

  程序存储器:

如果EA引脚接地,程序读取只从外部存储器开始。

  对于89S52,如果EA接VCC,程序的读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻址,寻址地址为:

2000H~FFFFH。

  数据存储器:

AT89S52有256字节片内数据存储器。

高128字节与特殊功能寄存器重叠。

也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。

  当一条指令访问高于7FH的地址时,寻址方式决定CPU访问高128字节RAM还是特殊功能寄存器空间。

直接寻址方式访问特殊功能寄存器(SFR)

2.1.6中断源

  AT89S52有6个中断源:

两个外部中断(INT0和INT1),三个定时中断(定时器0、1、2)和一个串行中断。

每个中断源都可以通过置位或清除特殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。

IE还包括一个中断允许总控制位EA,它能一次禁止所有中断。

如图2-4所示,IE.6位是不可用的。

对于AT89C51,IE.5位也是不能用的。

用户软件不应给这些位写1。

它们为AT89系列新产品预留。

  

符号

位地址

功能

EA

IE.7

中断总允许控制位。

EA=0,中断总禁止;

EA=1,各中断由各自的控制位设定

IE.6

预留

ET2

IE.5

定时器2中断允许控制位

ES

IE.4

串行口中断允许控制位

ET1

IE.3

定时器1中断允许控制位

EX1

IE.2

外部中断1允许控制位

ET0

IE.1

定时器0中断允许控制位

EX0

IE.0

外部中断0允许控制位

图2-4中断允许控制寄存器

1.1.216乘16点阵显示模块

本点阵屏采用4块8*8点阵组合,形成一个16*16的点阵,加驱动集成电路SN74HC164和74HC595组成。

通过软件控制,本屏以动态扫描的显示方式,可显示文字、图形、动画等多种花样。

1、SN74HC164是串行移位寄存器,串行输入并行输出,当清零端CLR为高电平时,每来一个时钟脉冲CLK寄存器中的数据就会从Qa向Qh方向移动一位,即Qa→Qb、Qb→Qc、Qc→Qd、Qd→Qe、Qe→Qf、Qf→Qg、Qg→Qh,同时两个输入端A和B与非的结果进入Qa,SN74HC164的逻辑功能如图1-2所示。

图1-2SN74HC164的逻辑功能图

2、74HC595有一个8位串行输入,并行输出的移位寄存器,该寄存器向一个8位D型存储寄存器提供数据。

74HC595N的存储寄存器具备三态输出。

移位寄存器和存储寄存器分别有独立的时钟。

74HC595N的移位寄存器带有最高优先级的直接清零端(SRCLR)、串行输入端(SER)和用于级联的串行输出端。

当输出使能端(OE)为高时,74HC595的输出将处于高阻态。

  不管是移位寄存器时钟(SRCLK)还是存储寄存器时钟(RCLK),都是上升沿触发。

如果当两个时钟绑定在一起时,则移位寄存器将一直领先存储寄存器一个时钟脉冲。

SN74HC595特性:

8位串行输入,并行输出移位;

宽工作电压范围:

2.0~6.0V高强度电流三态输出,最多可驱动高达15个LSTTL负载;

低功耗,最大ICC=80μA;

典型tpd=13ns;

5V下驱动电流为±

6mA;

移位寄存器可直接清零低输入电流,最大1μA;

8位移位寄存器,具有三态输出锁存。

最后,集成了74HC595、74HC154的点阵实物图见图1-3所示。

3、点阵主要技术参数:

显示容量:

16*16个字符

图1-3点阵实物图

芯片工作电压:

4.5—5.5V

工作电流:

2.0mA(5.0V)

模块最佳工作电压:

5.0V

4、引脚功能说明

VCC5V电源

GND接地

DS串行数据输入

STcp并行数据输出时钟SHcp串行数据输入时钟

CS选择器使能A0--A316位数据选择器输入

不算电源线,共8线,算电源为10线。

本点阵已将驱动集成电路74HC595、74HC154等放在点阵后面了,引入10线及信号即可显示。

2系统设计

2.1系统设计方案

利用TC89C52RC单片机,16*16点阵LED,74HC164N和74HC595N芯片,TIP127三极管组成的汉字点阵显示系统。

本系统主要分成屏体和控制器两大部分。

屏体的主要部分是LED点阵,还有行列驱动电路。

LED点阵屏采用16*16LED显示模块连接而成。

一块16行16列显示屏,其LED发光器件数量相当大,不适合使用静态驱动电路,而采用动态扫描驱动电路。

扫描驱动电路采用多行的同名列共用一套驱动器,行驱动器一行的行线连接到电源的一端,列驱动器一列的列连接到电源的另一端。

控制电路负责有序地选通各行,选通每一行之前还要把该行该列的数据准备好,一旦该行选通,这一行上的LED发光器件就可以根据列数据进行显示。

本系统的控制电路采用单片机方法,由于单片机的I/O口数量少,驱动能力不强,则要扩展一定的硬件电路,才能满足显示屏的需要。

硬件电路大体上可分为单片机控制器、LED显示屏行列驱动电路、LED点阵屏三部分,LED显示屏驱动电路使用通用的数字电路并尽量减少外围硬件,做到电路简单、适应性强、成本不高、维护方便等要求。

为了增强汉字点阵的显示效果,LED汉字点阵显示系统也可以有多种显示模式。

最简单的显示模式是静态显示。

同静态显示模式相对应有多种动态显示模式,它们所显示的文字是动态的。

按照文字运动的特点可以分为平移、闪烁、旋转、缩放等多种显示模式。

产生不同显示模式的方法可以通过一定的算法从原来的显示数据产生。

不过当算法太复杂时就会太浪费时间,也可以考虑预先生成刷新数据,存储备用。

本系统采用动态显示的模式,所谓的动态显示模式是指逐行轮流点亮。

我们把所有的同一行发光管的阳极连接在一起,把所有第一列发光管的阴极连接一起,先送出对应第一行的发光管亮灭的数据并且锁存,然后选通第一行使其点亮一定的时间然后熄灭;

再送出第二行的数据并且锁存,然后宣统第二行使其点亮同样的时间,然后熄灭;

直到第第十六行显示完后再重新点亮第一行,这样反复轮回。

如图2所示。

图2系统的整体结构图

2.2点阵部分程序流程图

2.3流水灯部分

基于单片机的流水灯是一个小设计,其原理就不详细说明。

单片机1(左)控制流水灯,单片机2(右)控制点阵。

下面是系统连线图:

图2—1系统电路连线图

2.2实物照片

具体的实物照片如下图

实物图一

实物图二

图2—3实物照片图三

3合并程序流程图

心形流水灯一个间隔一个亮起

心形流水灯全亮然后全灭

4部分程序源代码

点阵单片机程序

/**********************************************************************/

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharN=7;

//N表示有多少个汉字,如要加多个字,只需改动N的值即可

sbitDS=P1^0;

//74HC595串行数据

sbitSTcp=P1^1;

//74HC595并行输出时钟

sbitSHcp=P1^2;

//74HC595串行时钟

sbitCS=P1^3;

//74HC154输出有效信号

//=============P2口作为74HC154的选择控制数据输入=================

//=============P2口整体控制A0--A4,所以无需单独控制每个信号===========

//sbitA0=P3^0;

//sbitA1=P3^1;

//sbitA2=P3^2;

//sbitA3=P3^3;

//===========================字模表==============================

//================取模方法:

阴码,逆向,逐行========================

//==============================================================

ucharcodeHanzi[]=

{

/*

0x60,0x02,0x1C,0x0A,0x10,0x12,0x10,0x12,0x10,0x02,0xFF,0x7F,0x10,0x02,0x10,0x12,

0x70,0x14,0x1C,0x0C,0x13,0x04,0x10,0x0A,0x90,0x49,0x10,0x50,0x14,0x60,0x08,0x40,//*"

我"

0

0x00,0x1F,0xFC,0x09,0x48,0x08,0x90,0x04,0xFC,0x7F,0x44,0x40,0x42,0x00,0xFC,0x3F,

0x20,0x00,0xE0,0x0F,0x30,0x04,0xD0,0x02,0x08,0x03,0xC6,0x0C,0x31,0x70,0x0C,0x20,//*"

爱"

1

0x90,0x00,0x90,0x01,0x88,0x20,0xC8,0x7F,0x44,0x20,0x2C,0x12,0x16,0x02,0x45,0x0A,

0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,0x04,0x01,0x00,0x00,//*"

你"

2

*/

0x70,0x14,0x1C,0x0C,0x13,0x04,0x10,0x0A,0x90,0x49,0x10,0x50,0x14,0x60,0x08,0x40,/*"

3*/

/*(16X16,宋体)*/

0x20,0x00,0xE0,0x0F,0x30,0x04,0xD0,0x02,0x08,0x03,0xC6,0x0C,0x31,0x70,0x0C,0x20,/*"

4*/

0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,0x04,0x01,0x00,0x00,/*"

5*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,

0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x08,0x00,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,

};

//====================延时程序==========================

voiddelay(uintN)

uchari;

uintj;

for(j=0;

j<

N;

j++)

for(i=125;

i>

0;

i--);

}

//=====================逐行测试==============================

//=================目的:

查看有无坏点========================

voiddisplay_test(ucharN)

uchari,j;

100;

{

DS=0;

//整行显示

for(i=0;

i<

16;

i++)

{

SHcp=0;

SHcp=1;

}

STcp=0;

STcp=1;

P3=N;

CS=0;

delay(10);

//本程序太长,省去部分,需要完整程序请

CS=1;

//联系QQ154401855(或154401856)下载

}

//++++++++++++++++++++++++++++++静态显示+++++++++++++++++++++++++++++++

//====================++++++++++显示程序===============================

//N表示传递过来的第几个文字,一个文字占32个字节,所以M为32的倍数

//=====================================================================

voiddisplay_state(ucharM)

uchari,j,n,cont=0;

uchartemp;

for(n=0;

n<

50;

n++)//重复显示50次,以便能清楚显示

{

i=i+2)

temp=~Hanzi[M+i+16];

//取一字模数据存放于temp,高8位

//进行8次转换,使8位并行数据转换为串行数据

for(j=0;

8;

{

if(temp&

0x80)//并行数据转为串行数据,高位在前

DS=1;

else

DS=0;

SHcp=0;

SHcp=1;

//SHcp上升沿锁存一位数据

temp=temp<

<

1;

//左移一位,进行下一次转换

}

temp=~Hanzi[M+i];

//取一字模数据存放于temp,低8位

STcp=0;

STcp=1;

//STcp上升沿使8位数据并行输入

P3=cont;

//cont计数器作为74HC154的选择信号,由P2口输出

CS=0;

//74HC154使能,开启显示

delay

(2);

//延时一下,以便有足够的点亮时间

CS=1;

//关显示,不关显示会出现花屏现象

cont++;

//cont计数器加一

for(i=1;

0x80)

DS=0;

SHcp=0;

SHcp=1;

cont=0;

//+++++++++++++++++++动态显示文字++++++++++++++++++++++++

voiddisplay_move(void)

uchartemp,hang;

for(hang=0;

hang<

32*N;

hang=hang+2)//每次上移一行,即实现动态移动显示效果

10;

n++)

……//程序太长,省略一部分,需要完整程序请

}//联系QQ154401855(或154401856)下载

//=========================主函数===============================

voidmain(void)

P1=0xFF;

P2=0xFF;

while

(1)

/*

i

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2