当前位置:文档之家› 心形花样流水灯设计报告

心形花样流水灯设计报告

《专业方向课程设计》课程设计报告题目:心形花样流水灯与点阵显示专业:电子信息工程班级:二班学号:姓名:指导老师:重庆交通大学信息科学与工程学院设计时间:2013年9 月8 日到2013 年11 月16 号一、设计任务说明随着社会的发展,单片机得到了广泛的应用,人们越来越重视单片机的应用。

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

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

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

1.流水灯设计:(1)AT89C51单片机:AT89C51具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

A T89C51引脚图此外,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<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charuchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐个点亮0~7 uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐个点亮7~0 uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个灭0~7uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐个灭7~0/***********************************************************/void delay(uint t); //延时void zg(uint t,uchar a);//两边逐个亮void qs(uint t,uchar a);//全部闪烁void zgxh(uint t,uchar a); // 逆时针逐个点亮void djs(uint t,uchar a); //对角闪void lbzgm(uint t,uchar a);//两边逐个灭void nszgm(uint t,uchar a); // 逆时针逐个灭void sztl(uint t,uchar a);//顺时逐个同步亮void nztl(uint t,uchar a);//逆时逐个同步亮void sztm(uint t,uchar a);//顺时逐个同步灭void nztm(uint t,uchar a);//逆时逐个同步灭void hwzjl(uint t,uchar a); //横往中间亮void hwzjm(uint t,uchar a); //横往中间灭void nzdl(uint t,uchar a); //逆时逐段亮void nzdgl(uint t,uchar a); //逆时逐段一个点亮void jgs(uint t,uchar a); //间隔闪/**********************************************************/void zg(uint t,uchar a)//两边逐个亮{uchar i,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;delay(t);for(i=0;i<7;i++){P1=table[i+1];P3=table1[i];delay(t);}P3=0x00;delay(t);}}void qs(uint t,uchar a) //全部闪烁{uchar j;for(j=0;j<a;j++){P0=P1=P2=P3=0xff;delay(t);P0=P1=P2=P3=0x00;delay(t);}}void zgxh(uint t,uchar a) // 逆时针逐个点亮{uchar i,j;for (j=0;j<a;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);}}}void nszgm(uint t,uchar a) // 逆时针逐个灭{uchar i,j;for(j=0;j<a;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);}}void djs(uint t,uchar a) //对角闪{uchar j;for(j=0;j<a;j++){P0=P1=P2=P3=0xff;P0=P3=0x00;delay(t);P0=P1=P2=P3=0xff;P1=P2=0x00;delay(t);}}void lbzgm(uint t,uchar a)//两边逐个灭{uchar i,j;for (j=0;j<a;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);}}void sztl(uint t,uchar a)//顺时逐个同步亮{uchar i,j;for(j=0;j<a;j++){P0=P1=P2=P3=0xff;for(i=0;i<8;i++){P0=table[i];P1=P2=P3=table1[i];delay(t);}}}void nztl(uint t,uchar a)//逆时逐个同步亮{uchar i,j;for(j=0;j<a;j++){P0=P1=P2=P3=0xff;for(i=0;i<8;i++){P0=table1[i];P1=P2=P3=table[i];delay(t);}}}void sztm(uint t,uchar a)//顺时逐个同步灭{uchar i,j;for(j=0;j<a;j++){P0=P1=P2=P3=0x00;for(i=0;i<8;i++){P0=table2[i];P1=P2=P3=table3[i];delay(t);}}}void nztm(uint t,uchar a)//逆时逐个同步灭{uchar i,j;for(j=0;j<a;j++){P0=P1=P2=P3=0xff;for(i=0;i<8;i++){P0=table3[i];P1=P2=P3=table2[i];delay(t);}}}void hwzjl(uint t,uchar a) //横往中间亮{uchar i,j;for (j=0;j<a;j++){P0=P1=P2=P3=0xff;for(i=0;i<8;i++){P0=P2=P1=table1[i];P3=table[i];delay(t);}}}void hwzjm(uint t,uchar a) //横往中间灭{uchar i,j;for (j=0;j<a;j++){P0=P1=P2=P3=0x00;for(i=0;i<8;i++){P0=P2=P1=table3[i];P3=table2[i];delay(t);}}}void nzdl(uint t,uchar a) //逆时逐段亮{uchar i,j;for (j=0;j<a;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;}}void nzdgl(uint t,uchar a) //逆时逐段一个点亮{uchar i,j,k,l;for (j=0;j<a;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);}}}void jgs(uint t,uchar a) //间隔闪{uchar j;for (j=0;j<a;j++){P0=0x55;P1=P2=P3=0xaa;delay(t);P0=0xaa;P1=P2=P3=0x55;delay(t);}}void main(){uchar i;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);}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);}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);}}void delay(uint t){uint x,y;for (x=t;x>0;x--){for (y=120;y>0;y--);}}点阵显示的程序如下:RS_CNT EQU 30HNUM EQU 31HTCON_T EQU 32HORG 00HLJMP STARTORG 0BHLJMP INT_T0START: MOV RS_CNT,#00HMOV NUM,#00HMOV TCON_T,#00HMOV TMOD,#01HMOV TH0,#(65536-5000)/256MOV TL0,#(65536-5000)MOD 256MOV IE,#82HSETB TR0SJMP $INT_T0: MOV TH0,#(65536-5000)/256MOV TL0,#(65536-5000)MOD 256MOV DPTR,#TABLEMOV A,RS_CNTMOVC A,@A+DPTRMOV P3,AMOV DPTR,#TABLE1MOV A,NUMMOV B,#8MUL ABADD A,RS_CNTMOVC A,@A+DPTRCPL AMOV P0,AINC RS_CNTMOV A,RS_CNTCJNE A,#8,NEXTMOV RS_CNT,#00HNEXT: INC TCON_TMOV A,TCON_TCJNE A,#200,RETUNEMOV TCON_T,#00HINC NUMMOV A,NUMCJNE A,#7,RETUNEMOV NUM,#00HRETUNE: RETITABLE: 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,00HDB 00H,00H,7EH,02H,02H,7EH,00H,00HDB 00H,10H,10H,10H,10H,10H,10H,00HDB 02H,2AH,2AH,7EH,2AH,6AH,22H,10HDB 00H,10H,10H,10H,10H,10H,10H,00HDB 00H,22H,7AH,2AH,7AH,22H,7EH,20HEND五、系统测试点阵的测试图:心形花样流水灯测试图:两边逐个点亮花型逆时针熄灭花型顺时针逐个熄灭的花型顺时针逐个点亮的花型对角逐个闪花型竖向中间灭花型六、总结与体会在本次设计中出现了很多问题:第一次焊接好之后,接通电源,没有任何反应。

相关主题