心形花样流水灯设计报告Word格式.doc
《心形花样流水灯设计报告Word格式.doc》由会员分享,可在线阅读,更多相关《心形花样流水灯设计报告Word格式.doc(18页珍藏版)》请在冰点文库上搜索。
此外,AT89S52设计和配置了振荡频率可
为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
引脚图如右图所示。
此次设计把51单片机的4个I/O口与32个5mm高亮LED灯相接,通过单片机控制各I/O引脚的高低电平控制LED的亮灭从而形成各种不同亮灭的花样。
2.点阵显示设计:
(1)8*8点阵原理图:
从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;
因此要实现一根柱形的亮法,如图所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:
一根竖柱:
对应的列置1,而行则采用扫描的方法来实现。
一根横柱:
对应的行置0,而列则采用扫描的方法来实现。
(2)74HC245:
74HC245是一种三态输出、八路信号收发器,主要应用于大屏显示,以及其它的消费类电子产品中增加驱动
主要特性:
☆采用CMOS工艺
☆宽电压工作范围:
3.0V—5.0V
☆双向三态输出
☆八线双向收发器
☆封装形式:
SOP20、SOP20-2、TSSOP20、DIP20
此次设计采用74HC245来驱动8*8点阵,74HC245一端与51单片机的P0口想连,另一端则与点阵的输入端相连,从而通过单片机控制驱动点阵。
三、硬件设计
心型流水灯的硬件设计如下图:
点阵显示的硬件设计图如下:
本次设计通过74HC245来驱动8*8点阵,74HC245的输入端与51单片机的P0口想连,74HC245的输出端则与点阵的行相连,而点阵的列则与单片机的P3口相连,通过单片机控制、74HC245驱动,从而完成了点阵的显示。
四、软件设计
心形花样流水灯的程序如下:
#include<
reg52.h>
#include<
intrins.h>
#define uintunsignedint
#define ucharunsignedchar
ucharcodetable[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
//逐个点亮0~7
ucharcodetable1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
//逐个点亮7~0
ucharcodetable2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
//逐个灭0~7
ucharcodetable3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
//逐个灭7~0
/***********************************************************/
voiddelay(uintt);
//延时
voidzg(uintt,uchara);
//两边逐个亮
voidqs(uintt,uchara);
//全部闪烁
voidzgxh(uintt,uchara);
//逆时针逐个点亮
voiddjs(uintt,uchara);
//对角闪
voidlbzgm(uintt,uchara);
//两边逐个灭
voidnszgm(uintt,uchara);
//逆时针逐个灭
voidsztl(uintt,uchara);
//顺时逐个同步亮
voidnztl(uintt,uchara);
//逆时逐个同步亮
voidsztm(uintt,uchara);
//顺时逐个同步灭
voidnztm(uintt,uchara);
//逆时逐个同步灭
voidhwzjl(uintt,uchara);
//横往中间亮
voidhwzjm(uintt,uchara);
//横往中间灭
voidnzdl(uintt,uchara);
//逆时逐段亮
voidnzdgl(uintt,uchara);
//逆时逐段一个点亮
voidjgs(uintt,uchara);
//间隔闪
/**********************************************************/
voidzg(uintt,uchara)//两边逐个亮
{
uchari,j;
for(j=0;
j<
a;
j++)
{
P0=P1=P2=P3=0xff;
P0=0x7f;
delay(t);
for(i=0;
i<
7;
i++)
{
P0=table1[i+1];
P2=table1[i];
delay(t);
}
P2=0x00;
P1=0xfe;
P1=table[i+1];
P3=table1[i];
delay(t);
P3=0x00;
}
}
voidqs(uintt,uchara) //全部闪烁
ucharj;
for(j=0;
{
P0=P1=P2=P3=0xff;
delay(t);
P0=P1=P2=P3=0x00;
}
voidzgxh(uintt,uchara)//逆时针逐个点亮
for(j=0;
P0=P1=P2=P3=0xff;
for(i=0;
8;
{
P0=table1[i];
}
for(i=0;
P1=table[i];
P3=table[i];
P2=table[i];
}
voidnszgm(uintt,uchara)//逆时针逐个灭
P0=P1=P2=P3=0x00;
P0=table3[i];
P1=table2[i];
P3=table2[i];
P2=table2[i];
voiddjs(uintt,uchara)//对角闪
P0=P3=0x00;
delay(t);
P1=P2=0x00;
voidlbzgm(uintt,uchara)//两边逐个灭
uchari,j;
for(j=0;
{
P0=P2=0x00;
P3=0x01;
for(i=7;
i>
1;
i--)
P1=table[i-1];
P3=table1[i-2];
P1=0xfe;
P3=0xff;
P1=0xff;
P2=0x01;
P0=table1[i-1];
P2=table1[i-2];
P0=0x7f;
P2=0xff;
P0=0xff;
voidsztl(uintt,uchara)//顺时逐个同步亮
P0=table[i];
P1=P2=P3=table1[i];
voidnztl(uintt,uchara)//逆时逐个同步亮
P1=P2=P3=table[i];
voidsztm(uintt,uchara)//顺时逐个同步灭
P0=table2[i];
P1=P2=P3=table3[i];
voidnztm(uintt,uchara)//逆时逐个同步灭
P1=P2=P3=table2[i];
voidhwzjl(uintt,uchara)//横往中间亮
P0=P2=P1=table1[i];
voidhwzjm(uintt,uchara)//横往中间灭
P0=P2=P1=table3[i];
voidnzdl(uintt,uchara)//逆时逐段亮
P3=0xff;
P2=0xff;
voidnzdgl(uintt,uchara)//逆时逐段一个点亮
uchari,j,k,l;
k=table1[0];
P0=k;
l=table[0];
P1=P2=P3=l;
k=_crol_(k,-1);
P0=k;
l=_crol_(l,1);
P1=P2=P3=l;
voidjgs(uintt,uchara)//间隔闪
P0=0x55;
P1=P2=P3=0xaa;
P0=0xaa;
P1=P2=P3=0x55;
voidmain()
uchari;
while
(1)
zg(100,1);
//两边逐个亮
lbzgm(100,1);
//两边逐个灭
jgs(300,10);
djs(100,20);
////////////////////////////////////////////
P1=P2=P3=0xff;
for(i=0;
3;
P0=0x00;
delay(800);
P0=0xff;
}
for(i=0;
P1=0x00;
P1=0xff;
P3=0x00;
P3=0xff;
P2=0x00;
P2=0xff;
qs(500,3);
/////////////////////////////////////////////
6;
zgxh(50,1);
nszgm(50,1);
djs(100,20);
qs(200,10);
djs(100,50);
5;
sztl(200,1);
//顺时逐个同步亮
nztm(200,1);
nztl(200,1);
sztm(200,1);
//顺时逐个同步灭
djs(300,10);
nzdgl(300,10);
zgxh(100,1);
nszgm(100,1);
nzdl(200,3);
jgs(50,100);
//////////////////////////////////////////////////
nzdgl(50,40);
4;
qs(100,10);
}
djs(1000,10);
10;
hwzjl(200,1);
hwzjm(200,1);
}
zg(300,1);
lbzgm(300,1);
//顺时逐个同步亮
djs(500,20);
djs(100,30);
djs(50,50);
delay(1000);
voiddelay(uintt)
uintx,y;
for(x=t;
x>
0;
x--)
for(y=120;
y>
y--);
点阵显示的程序如下:
RS_CNT EQU 30H
NUM EQU 31H
TCON_T EQU 32H
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START:
MOV RS_CNT,#00H
MOV NUM,#00H
MOV TCON_T,#00H
MOV TMOD,#01H
MOV TH0,#(65536-5000)/256
MOV TL0,#(65536-5000)MOD256
MOV IE,#82H
SETB TR0
SJMP $
INT_T0:
MOV DPTR,#TABLE
MOV A,RS_CNT
MOVC A,@A+DPTR
MOV P3,A
MOV DPTR,#TABLE1
MOV A,NUM
MOV B,#8
MUL AB
ADD A,RS_CNT
CPL A
MOV P0,A
INC RS_CNT
CJNE A,#8,NEXT
NEXT:
INC TCON_T
MOV A,TCON_T
CJNE A,#200,RETUNE
INC NUM
CJNE A,#7,RETUNE
MOV NUM,#00H
RETUNE:
RETI
TABLE:
DB 080H,040H,020H,010H,008H,004H,002H,001H
TABLE1:
DB 00H,00H,42H,42H,7EH,42H,42H,00H
DB 30H,48H,44H,22H,44H,48H,30H,00H
DB 00H,00H,7EH,02H,02H,7EH,00H,00H
DB 00H,10H,10H,10H,10H,10H,10H,00H
DB 02H,2AH,2AH,7EH,2AH,6AH,22H,10H
DB 00H,22H,7AH,2AH,7AH,22H,7EH,20H
END
五、系统测试
点阵的测试图:
心形花样流水灯测试图:
两边逐个点亮花型逆时针熄灭花型
顺时针逐个熄灭的花型顺时针逐个点亮的花型
对角逐个闪花型竖向中间灭花型
六、总结与体会
在本次设计中出现了很多问题:
第一次焊接好之后,接通电源,没有任何反应。
经仔细检查之后没有发现什么错误,也向老师和许多同学请教过,结果还是没一点反应,于是第一次的焊接宣告失败,无奈只好在从新开始焊。
第二次焊接的时候吸取了第一次的一些经验与教训,给每个I/O口都加上了200欧的电阻,并不断的纠正了自己的焊接方法,一步一步的,经过一下午的努力终于焊接好了,接通电源,一切正常工作,真是黄土不负有心人。
通过这学期单片机的学习我学到了不少东西,学会了有的东西需要自己通过自己的努力来解决。
这次单片机作品的制作学会了焊接的初步技术,以及