心形花样流水灯设计报告.docx

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

心形花样流水灯设计报告.docx

《心形花样流水灯设计报告.docx》由会员分享,可在线阅读,更多相关《心形花样流水灯设计报告.docx(27页珍藏版)》请在冰点文库上搜索。

心形花样流水灯设计报告.docx

心形花样流水灯设计报告

《专业方向课程设计》课程

设计报告

题目:

心形花样流水灯与点阵显示

专业:

电子信息工程

班级:

二班

学号:

姓名:

指导老师:

 

重庆交通大学信息科学与工程学院

设计时间:

2013年9月8日到2013年11月16号

一、设计任务说明

随着社会的发展,单片机得到了广泛的应用,人们越来越重视单片机的应用。

比如温度是和每个人息息相关的,并且在有的生产车间里还要进行温度时时测量,甚至是对温度的进一步调控等,这些都是单片机的应用之例。

本设计是用单片机和点阵加一个小的流水灯电路,这次作品的初衷是希望通过单片机学习,做个生日礼物送给朋友。

二、总体设计

本系统主要有AT89C51单片机、5mm彩色LED灯、74HC245、8*8LED点阵、200欧电阻等元件组成。

1.流水灯设计:

(1)AT89C51单片机:

AT89C51具有如下特点:

40个引脚,8kBytesFlash片内程序存储器,

256bytes的随机存取数据存储器(RAM),

32个外部双向输入/输出(I/O)口,

5个中断优先级2层中断嵌套中断,

2个16位可编程定时计数器,

2个全双工串行通信口,

看门狗(WDT)

AT89C51引脚图

电路,片内时钟振荡器。

此外,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口想连,另一端则与点阵的输入端相连,从而通过单片机控制驱动点阵。

三、硬件设计

心型流水灯的硬件设计如下图:

此次设计把51单片机的4个I/O口与32个5mm高亮LED灯相接,通过单片机控制各I/O引脚的高低电平控制LED的亮灭从而形成各种不同亮灭的花样。

点阵显示的硬件设计图如下:

本次设计通过74HC245来驱动8*8点阵,74HC245的输入端与51单片机的P0口想连,74HC245的输出端则与点阵的行相连,而点阵的列则与单片机的P3口相连,通过单片机控制、74HC245驱动,从而完成了点阵的显示。

四、软件设计

心形花样流水灯的程序如下:

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

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

{

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;

delay(t);

for(i=0;i<7;i++)

{

P1=table[i+1];

P3=table1[i];

delay(t);

}

P3=0x00;delay(t);

}

}

 

voidqs(uintt,uchara)//全部闪烁

{

ucharj;

for(j=0;j

{

P0=P1=P2=P3=0xff;

delay(t);

P0=P1=P2=P3=0x00;

delay(t);

}

}

 

voidzgxh(uintt,uchara)//逆时针逐个点亮

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0xff;

for(i=0;i<8;i++)

{

P0=table1[i];

delay(t);

}

for(i=0;i<8;i++)

{

P1=table[i];

delay(t);

}

for(i=0;i<8;i++)

{

P3=table[i];

delay(t);

}

for(i=0;i<8;i++)

{

P2=table[i];

delay(t);

}

}

}

voidnszgm(uintt,uchara)//逆时针逐个灭

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0x00;

for(i=0;i<8;i++)

{

P0=table3[i];delay(t);

}

for(i=0;i<8;i++)

{

P1=table2[i];delay(t);

}

for(i=0;i<8;i++)

{

P3=table2[i];delay(t);

}

for(i=0;i<8;i++)

{

P2=table2[i];delay(t);

}

}

voiddjs(uintt,uchara)//对角闪

{

ucharj;

for(j=0;j

{

P0=P1=P2=P3=0xff;

P0=P3=0x00;

delay(t);

P0=P1=P2=P3=0xff;

P1=P2=0x00;

delay(t);

}

}

 

voidlbzgm(uintt,uchara)//两边逐个灭

{

uchari,j;

for(j=0;j

{

P0=P2=0x00;

P3=0x01;delay(t);

for(i=7;i>1;i--)

{

P1=table[i-1];P3=table1[i-2];

delay(t);

}

P1=0xfe;P3=0xff;delay(t);

P1=0xff;P2=0x01;delay(t);

for(i=7;i>1;i--)

{

P0=table1[i-1];

P2=table1[i-2];

delay(t);

}

P0=0x7f;P2=0xff;delay(t);

P0=0xff;delay(t);

}

}

 

voidsztl(uintt,uchara)//顺时逐个同步亮

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0xff;

for(i=0;i<8;i++)

{

P0=table[i];

P1=P2=P3=table1[i];

delay(t);

}

}

}

voidnztl(uintt,uchara)//逆时逐个同步亮

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0xff;

for(i=0;i<8;i++)

{

P0=table1[i];

P1=P2=P3=table[i];

delay(t);

}

}

}

voidsztm(uintt,uchara)//顺时逐个同步灭

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0x00;

for(i=0;i<8;i++)

{

P0=table2[i];

P1=P2=P3=table3[i];

delay(t);

}

}

}

 

voidnztm(uintt,uchara)//逆时逐个同步灭

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0xff;

for(i=0;i<8;i++)

{

P0=table3[i];

P1=P2=P3=table2[i];

delay(t);

}

}

}

voidhwzjl(uintt,uchara)//横往中间亮

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0xff;

for(i=0;i<8;i++)

{

P0=P2=P1=table1[i];

P3=table[i];delay(t);

}

}

}

voidhwzjm(uintt,uchara)//横往中间灭

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0x00;

for(i=0;i<8;i++)

{

P0=P2=P1=table3[i];

P3=table2[i];delay(t);

}

}

}

voidnzdl(uintt,uchara)//逆时逐段亮

{

uchari,j;

for(j=0;j

{

P0=P1=P2=P3=0xff;

for(i=0;i<8;i++)

{

P0=table1[i];

delay(t);

}

P0=0xff;

for(i=0;i<8;i++)

{

P1=table[i];

delay(t);

}

P1=0xff;

for(i=0;i<8;i++)

{

P3=table[i];

delay(t);

}

P3=0xff;

for(i=0;i<8;i++)

{

P2=table[i];

delay(t);

}

P2=0xff;

}

}

voidnzdgl(uintt,uchara)//逆时逐段一个点亮

{

uchari,j,k,l;

for(j=0;j

{

k=table1[0];

P0=k;l=table[0];

P1=P2=P3=l;delay(t);

for(i=0;i<8;i++)

{

k=_crol_(k,-1);

P0=k;

l=_crol_(l,1);

P1=P2=P3=l;

delay(t);

}

}

}

voidjgs(uintt,uchara)//间隔闪

{

ucharj;

for(j=0;j

{

P0=0x55;P1=P2=P3=0xaa;

delay(t);

P0=0xaa;P1=P2=P3=0x55;

delay(t);

}

}

 

voidmain()

{

uchari;

while

(1)

{

zg(100,1);//两边逐个亮

lbzgm(100,1);//两边逐个灭

jgs(300,10);

djs(100,20);//对角闪

////////////////////////////////////////////

P1=P2=P3=0xff;

for(i=0;i<3;i++)

{

P0=0x00;delay(800);

P0=0xff;delay(800);

}

P0=0x00;

for(i=0;i<3;i++)

{

P1=0x00;delay(800);

P1=0xff;delay(800);

}

P1=0x00;

for(i=0;i<3;i++)

{

P3=0x00;delay(800);

P3=0xff;delay(800);

}

P3=0x00;

for(i=0;i<3;i++)

{

P2=0x00;delay(800);

P2=0xff;delay(800);

}

qs(500,3);

/////////////////////////////////////////////

for(i=0;i<6;i++)

{

zgxh(50,1);

nszgm(50,1);

}

djs(100,20);//对角闪

for(i=0;i<3;i++)

{

zg(100,1);//两边逐个亮

lbzgm(100,1);//两边逐个灭

}

qs(200,10);djs(100,50);

for(i=0;i<5;i++)

{

sztl(200,1);//顺时逐个同步亮

nztm(200,1);

nztl(200,1);

sztm(200,1);//顺时逐个同步灭

}

djs(300,10);//对角闪

nzdgl(300,10);//逆时逐段一个点亮

jgs(300,10);//间隔闪

for(i=0;i<3;i++)

{

zgxh(100,1);

nszgm(100,1);

}

nzdl(200,3);//逆时逐段亮

jgs(50,100);//间隔闪

//////////////////////////////////////////////////

nzdgl(50,40);//逆时逐段一个点亮

for(i=0;i<4;i++)

{

zg(100,1);qs(100,10);

lbzgm(100,1);

}

for(i=0;i<3;i++)

{

zgxh(100,1);

nszgm(100,1);

}

 

djs(1000,10);

for(i=0;i<10;i++)

{

hwzjl(200,1);//横往中间亮

hwzjm(200,1);//横往中间灭

}

djs(300,10);//对角闪

for(i=0;i<5;i++)

{

zgxh(100,1);

nszgm(100,1);

}

djs(100,20);//对角闪

zg(300,1);

lbzgm(300,1);

for(i=0;i<5;i++)

{

sztl(200,1);//顺时逐个同步亮

nztm(200,1);

nztl(200,1);

sztm(200,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>0;y--);

}

}

点阵显示的程序如下:

RS_CNTEQU30H

NUMEQU31H

TCON_TEQU32H

ORG00H

LJMPSTART

ORG0BH

LJMPINT_T0

START:

MOVRS_CNT,#00H

MOVNUM,#00H

MOVTCON_T,#00H

MOVTMOD,#01H

MOVTH0,#(65536-5000)/256

MOVTL0,#(65536-5000)MOD256

MOVIE,#82H

SETBTR0

SJMP$

INT_T0:

MOVTH0,#(65536-5000)/256

MOVTL0,#(65536-5000)MOD256

MOVDPTR,#TABLE

MOVA,RS_CNT

MOVCA,@A+DPTR

MOVP3,A

MOVDPTR,#TABLE1

MOVA,NUM

MOVB,#8

MULAB

ADDA,RS_CNT

MOVCA,@A+DPTR

CPLA

MOVP0,A

INCRS_CNT

MOVA,RS_CNT

CJNEA,#8,NEXT

MOVRS_CNT,#00H

NEXT:

INCTCON_T

MOVA,TCON_T

CJNEA,#200,RETUNE

MOVTCON_T,#00H

INCNUM

MOVA,NUM

CJNEA,#7,RETUNE

MOVNUM,#00H

RETUNE:

RETI

TABLE:

DB080H,040H,020H,010H,008H,004H,002H,001H

TABLE1:

DB00H,00H,42H,42H,7EH,42H,42H,00H

DB30H,48H,44H,22H,44H,48H,30H,00H

DB00H,00H,7EH,02H,02H,7EH,00H,00H

DB00H,10H,10H,10H,10H,10H,10H,00H

DB02H,2AH,2AH,7EH,2AH,6AH,22H,10H

DB00H,10H,10H,10H,10H,10H,10H,00H

DB00H,22H,7AH,2AH,7AH,22H,7EH,20H

END

五、系统测试

点阵的测试图:

心形花样流水灯测试图:

两边逐个点亮花型逆时针熄灭花型

顺时针逐个熄灭的花型顺时针逐个点亮的花型

对角逐个闪花型竖向中间灭花型

六、总结与体会

在本次设计中出现了很多问题:

第一次焊接好之后,接通电源,没有任何反应。

经仔细检查之后没有发现什么错误,也向老师和许多同学请教过,结果还是没一点反应,于是第一次的焊接宣告失败,无奈只好在从新开始焊。

第二次焊接的时候吸取了第一次的一些经验与教训,给每个I/O口都加上了200欧的电阻,并不断的纠正了自己的焊接方法,一步一步的,经过一下午的努力终于焊接好了,接通电源,一切正常工作,真是黄土不负有心人。

通过这学期单片机的学习我学到了不少东西,学会了有的东西需要自己通过自己的努力来解决。

这次单片机作品的制作学会了焊接的初步技术,以及一些查找问题的方法。

软件方面由于本人的技术有限只是对别人的一些程序进行更改,然后通过不断的调试,一步一步实现单片机的预定功能。

由于本人水平有限,扩展部分做的不是太好,希望其他人能够继续改进。

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

当前位置:首页 > 农林牧渔 > 林学

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

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