#include
unsignedint m=1;
void delayms(int n) //延时
{
int i;
for(;n>0;n--)
for(i=330;i>0;i--)
;
}
void way1() //花样1:32个LED灯同时从灭到亮
{ int k;
k=m+5;
while(k)
{
inti=5,j=5;
for(;j>0;j--)
P0=0X00;
P1=0X00;
P2=0X00;
P3=0X00;
delayms(200);
for(;i>0;i--)
P0=0Xff;
P1=0Xff;
P2=0Xff;
P3=0Xff;
delayms(200);
k--;
}
}
void way2() //花样2:交叉点亮,从右往左依次点亮,再依返回。{
unsignedint k;
unsigned char temp,temp1,sum=0;
unsignedinti,j;
k=m;
while(k)
{
for(j=2;j>0;j--)
P0=0X00;P1=0X00;P2=0X00; P3=0X00;//r->l delayms(500);
P0=0Xff;
P1=0Xff;
P2=0xff;
P3=0xff;
temp=0x01;
for(i=0;i<9;i++)
{
P0=~temp;
delayms(70);
temp=temp<<1;
}
temp=0x01;
for(i=0;i<9;i++)
{
P2=~temp;
delayms(70);
temp=temp<<1;
}
temp=0x01;
for(i=0;i<9;i++)
{
P3=~temp;
delayms(70);
temp=temp<<1;
}
temp=0x01;
for(i=0;i<9;i++)
{
P1=~temp;
delayms(70);
temp=temp<<1;
}
P0=0X00;P1=0X00;P2=0X00; P3=0X00;//l->r delayms(500);
P0=0Xff;
P1=0Xff;
P2=0xff;
P3=0xff;
temp=0x80;
for(i=0;i<9;i++)
{
P1=~temp;
delayms(70);
temp=temp>>1;
}
temp=0x80;
for(i=0;i<9;i++)
{
P3=~temp;
delayms(70);
temp=temp>>1;
}
temp=0x80;
for(i=0;i<9;i++)
{
P2=~temp;
delayms(70);
temp=temp>>1;
}
temp=0x80;
for(i=0;i<9;i++)
{
P0=~temp;
delayms(70);
temp=temp>>1;
}
P0=0X00;P1=0X00;P2=0X00; P3=0X00; delayms(500);
P0=0Xff;
P1=0Xff;
P2=0xff;
P3=0xff;
temp=0x01;temp1=0x80;
for(i=0;i<9;i++)
{
P0=~temp;
P1=~temp1;
temp=temp<<1;temp1=temp1>>1;
delayms(70);
}
temp=0x01;temp1=0x80;
for(i=0;i<9;i++)
{
P2=~temp;
P3=~temp1;
temp=temp<<1;temp1=temp1>>1;
delayms(70);
}
temp=0x01;temp1=0x80;
for(i=0;i<9;i++)
{
P3=~temp;
P2=~temp1;
temp=temp<<1;temp1=temp1>>1;
delayms(70);
}
temp=0x01;temp1=0x80;
for(i=0;i<9;i++)
{
P1=~temp;
P0=~temp1;
temp=temp<<1;temp1=temp1>>1;
delayms(70);
}
}
k--;
}
}
void way3()
{
unsignedint i,sum,sum1,k,temp1;
unsignedint temp=0x01;
k=m;
P0=0Xff; //两边同时向下闪
P1=0Xff;
P2=0xff;
P3=0xff;
while(k)
{
temp1=0xfe;
temp=0x7f;
sum=0;
for(i=0;i<8;i++)
{
P0=temp1;
P1=temp;
delayms(100);
temp1=temp1<<1;
temp=temp>>1;
}
temp1=0xfe;
temp=0x7f;
sum=0;
for(i=0;i<8;i++)
{
P2=temp1;
P3=temp;
delayms(100);
temp1=temp1<<1;
temp=temp>>1;
}
P0=0X00; //全亮
P1=0X00;
P2=0x00;
P3=0x00;
delayms(100);
temp=0x01; //返回
temp1=0x80;
sum=0;sum1=0;
for(i=0;i<8;i++)
{
sum=sum+temp;P3=sum;temp=temp<<1;
sum1=sum1+temp1;P2=sum1;temp1=temp1>>1;
delayms(100);
}
P2=0Xff; P3=0xff;
delayms(100);
temp=0x01;
temp1=0x80;
sum=0;sum1=0;
for(i=0;i<8;i++)
{
sum=sum+temp;P1=sum;temp=temp<<1;
sum1=sum1+temp1;P0=sum1;temp1=temp1>>1;
delayms(100);
}
P0=0Xff; //两边同时向上闪
P1=0Xff;
P2=0xff;
P3=0xff;
temp1=0xfe;
temp=0x7f;
sum=0;
for(i=0;i<8;i++)
{
P3=temp1;
P2=temp;
delayms(100);
temp1=temp1<<1;
temp=temp>>1;
}
temp1=0xfe;
temp=0x7f;
sum=0;
for(i=0;i<8;i++)
{
P1=temp1;
P0=temp;
delayms(100);
temp1=temp1<<1;
temp=temp>>1;
}
P0=0X00; //全亮
P1=0X00;
P2=0x00;
P3=0x00;
delayms(100);
temp=0x01; //返回
temp1=0x80;
sum=0;sum1=0;
for(i=0;i<8;i++)
{
sum=sum+temp;P0=sum;temp=temp<<1;
sum1=sum1+temp1;P1=sum1;temp1=temp1>>1;
delayms(100);
}
temp=0x01;
temp1=0x80;
sum=0;sum1=0;
for(i=0;i<8;i++)
{
sum=sum+temp;P2=sum;temp=temp<<1;
sum1=sum1+temp1;P3=sum1;temp1=temp1>>1;
delayms(100);
}
k--;
}
}
void way4() //相间交叉闪烁
{
unsignedint temp=0x55;
unsignedintk,j;
k=m+3;j=m+3;
while(k)
{
P0=~temp;
P1=~temp;
P2=~temp;
P3=~temp;
delayms(200);
P0=temp;
P1=temp;
P2=temp;
P3=temp;
delayms(200);
k--;
}
while(j)
{
P0=temp;
P1=temp;
P2=temp;
P3=temp;
delayms(200);
P0=~temp;
P1=~temp;
P2=~temp;
P3=~temp;
delayms(200);
j--;
}
}
void way5()
{
unsigned intk,j; //8个灯一起亮并旋转k=m+4;j=m+4;
while(k)
{
P0=0xaa;delayms(200);
P0=0xff;
P0=0x55;delayms(200);
P0=0xff;
P2=0xaa;delayms(200);
P2=0xff;
P2=0x55;delayms(200);
P2=0xff;
P3=0xaa;delayms(200);
P3=0xff;
P3=0x55;delayms(200);
P3=0xff;
P1=0xaa;delayms(200);
P1=0xff;
P1=0x55;delayms(200);
P1=0xff;
}
while(j)
{
P1=0x55;delayms(200);
P1=0xff;
P1=0xaa;delayms(200);
P1=0xff;
P3=0x55;delayms(200);
P3=0xff;
P3=0xaa;delayms(200);
P3=0xff;
P2=0x55;delayms(200);
P2=0xff;
P2=0xaa;delayms(200);
P2=0xff;
P0=0x00;delayms(200);
P0=0xff;
P0=0xaa;delayms(200);
P0=0xff;
j--;
}
}
void way6() //两边同时对称闪{
unsignedint i,j,sum,sum1,k,temp1; k=m+1;
while(k)
{
P0=0Xff;
P1=0Xff;
P2=0xff;
P3=0xff;
for(j=3;j>0;j--)
{
temp1=0xfe;
for(i=0;i<8;i++)
{
P0=temp1;
P3=temp1;
delayms(100);
temp1=temp1<<1;
temp1=0xfe;
for(i=0;i<8;i++)
{
P2=temp1;
P1=temp1;
delayms(100);
temp1=temp1<<1;
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0Xff;
delayms(100);
}
for(j=3;j>0;j--)
{
temp1=0x7f; //返回
for(i=0;i<8;i++)
{
P1=temp1;P2=temp1;temp1=temp1>>1;
delayms(100);
}
temp1=0x7f;
for(i=0;i<8;i++)
{
P3=temp1;P0=temp1;temp1=temp1>>1;
delayms(100);
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0xff;
delayms(100);
}
way3();
for(j=3;j>0;j--)
{
temp1=0xfe;
for(i=0;i<8;i++)
{
P0=temp1;
P3=temp1;
delayms(100);
temp1=temp1<<1;
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0Xff;
delayms(100);
temp1=0xfe;
for(i=0;i<8;i++)
{
P2=temp1;
P1=temp1;
delayms(100);
temp1=temp1<<1;
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0Xff;
delayms(100);
}
for(j=3;j>0;j--)
{
temp1=0xfe;
for(i=0;i<8;i++)
{
P0=temp1;
P3=temp1;
delayms(100);
temp1=temp1<<1;
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0Xff;
delayms(100);
temp1=0xfe;
for(i=0;i<8;i++)
{
P2=temp1;
P1=temp1;
delayms(100);
temp1=temp1<<1;
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0Xff;
delayms(100);
}
for(j=3;j>0;j--)
{
temp1=0x7f; //返回for(i=0;i<8;i++)
{
P1=temp1;P2=temp1;
delayms(100);
temp1=temp1>>1;
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0xff;
delayms(100);
temp1=0x7f;
for(i=0;i<8;i++)
{
P3=temp1;P0=temp1;
delayms(100);
temp1=temp1>>1;
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0xff;
delayms(100);
}
k--;
}
}
void way7()
{
unsignedint temp,temp1,temp2,i,j;
temp1=0xfe;
for(j=0;j<8;j++)
{
temp=temp1;
for(i=0;i<8;i++)
{
P0=temp;
temp=temp<<1;
delayms(100);
}
P0=temp1;
delayms(100);
temp=temp1;
for(i=0;i<8;i++)
{
P2=temp;
temp=temp<<1;
delayms(100);
}
P2=temp1;
delayms(100);
temp=temp1;
for(i=0;i<8;i++)
{
P3=temp;
temp=temp<<1;
delayms(100);
}
P3=temp1;
delayms(100);
temp=temp1;
for(i=0;i<8;i++)
{
P1=temp;
temp=temp<<1;
delayms(100);
}
P1=temp1;
delayms(100);
temp1=temp1<<1; delayms(100);
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0xff;
delayms(100);
temp2=0x7f;
for(j=0;j<8;j++)
{
temp=temp2;
for(i=0;i<8;i++)
{
P1=temp;
temp=temp>>1;
delayms(100); }
P1=temp2; delayms(100);
temp=temp2;
for(i=0;i<8;i++)
{
P3=temp;
temp=temp>>1;
delayms(100); }
P3=temp2; delayms(100); temp=temp2;
for(i=0;i<8;i++)
{
P2=temp;
temp=temp>>1;
delayms(100); }
P2=temp2; delayms(100); temp=temp2;
for(i=0;i<8;i++)
{
P0=temp;
temp=temp>>1;
delayms(100);
}
P0=temp2;
delayms(100);
temp2=temp2>>1;
delayms(100);
}
P0=0Xff; //全灭
P1=0Xff;
P2=0xff;
P3=0xff;
delayms(100);
}
void main()
{
while (1)
{
way1();
way2();
way3();
way6();
way3();
way7();
way4();
way5();
}
}
作为一个电子技术爱好者,先就做一个最简单的心形流水灯玩玩吧。 本教程主要特点就是简单,不要你懂原理,不要你懂编程,只要最基本的元件和材料就可以完成。 首先我们来准备和认识元件。 1、最大的一个部件,洞洞板也叫万能板,9*15cm的刚刚好。便宜的万能板1元一块,你也可以用双面喷锡的质量好的玻纤板,4元一块。 2、主角单片机。要求用40脚的,刚好驱动32个led。建议用STC89C52RC,最常见便宜而且不用复位电路。 3、led,5mm的颜色随你喜欢,32个,注意长脚为正极。我用的是白发蓝,你也可以用不同的颜色组合各种效果。 4、电阻,限制led的工作电流,这个严格讲要经过计算,咱们随便作就不管了,200欧姆到1K欧姆的都可以,只是led的亮度有点区别。贴片电阻和直插的都可以,建议用贴片美观,熟练了焊起来更快,只要稍加练习就可以,实在没信心直插的也可以,反正在背面也没用什么影响。 5、镊子,焊接贴片电阻要用到。 6、晶振和瓷片电容。 晶振采用12MHz的,电容15pF-33pF都可以。 7、导线几根,连接电源和飞线用,当然飞线越少越好,一是美观,二是飞线容易出问题。 8、焊接工具。烙铁、焊锡、烙铁架、海绵、斜口钳等等,大家自己有啥样就用什么。我的是坏烙铁拼凑的白菜白光,看着烂用着还可以。 9、还有最好用IC座,一是保护单片机二是方便拆卸和烧录。第一个是固定式IC座,元,第二个是活体的,用的更方便,4元一个。 10、电源部分。这里可以废物利用,用废弃的手机电池,在正负极接上导线,安装XH插头,插座焊在洞洞板上。不必在意电压,只是点亮led,手机电池标准电压,充满这里用没问题。可以加一个拨动开关控制电源。 接下来开始焊接,注意元件的位置和极性。 先焊最小系统,ic座,晶振、电容这些,然后是led,注意正极(长脚)朝外,负极(断脚)朝向单片机。接着是led的负极用锡接过线接到单片机的io口,注意中间接电阻。最后连
井冈山大学 机电工程学院 单片机 课程设计报告 课程名称:单片机 设计题目:心形流水灯 姓名:玉红 专业:生物医学工程 班级:11级医工本一班 学号:110615017 指导教师:王佑湖 2013年11月27日
目录 1引言 (2) 1.1设计任务 (2) 1.2设计要求……………………………………………… ..2 2 课题综述 (2) 2.1课题的来源 (2) 2.2面对的问题 (2) 3 系统分析 (2) 3.1 STC89C52单片机引脚图及引脚功能介绍 (2) 4 系统设计 (4) 4.1硬件设计 (4) 4.1.1硬件框图 (4) 4.1.2硬件详细设计 (5) 4.2 软件设计 (5) 4.3 硬件原理图 (6) 4.4 元件清单 (6) 4.5 硬件焊接
图 (6) 4.6 代码编写 (7) 5心得体会 (7) 6致 (8) 参考文献 (8) 1 引言 单片机课程设计主要是为了让我们增进对STC89C51单片机电路 的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目 的。 1.1设计任务 设计一个单片机控制的流水灯系统 1.2设计要求 (1)32个LED灯; (2)可实现多种的亮灯(如左循环,右循环,间隔闪,90度交叉闪等)。 2 课题综述
2.1 课题的来源 当今社会,这种由单片机芯片控制各种硬件工作的技术也日益成熟,并普及在交通、化工、机械等各个领域。而流水灯这项技术在生活中的应用更是广泛,较为贴近生活。而流水灯控制的设计所需要的知识也正好吻合了我们本学期对于单片机这门课程的学习,所以设计流水灯控制的这个课题让我们对知识的学习和巩固都有了进一步的加深。 2.2 面对的问题 这次课程设计是通过STC89C52位单片机实现。但面对的问题却是两方面的:一个是软件的设计,也就是实现流水灯控制功能的程序编辑;另一个是硬件的设计,需要我们自己连接、焊接电路板。而更为严峻的就是设计的最后还要将软硬件相结合。 3 系统分析 3.1 STC 89C52单片机引脚图及引脚功能介绍 本次设计的目的在于加深STC89C52单片机的理解,首先来简单认识一下,它的引脚如图3-1所示: 图3.1 STC89C52
涸洲湾职业技术学院 七彩心形流水灯说明书 别: 级: 专业: _______ 学号: _______ 职称: 实验师 班 姓名: 导师姓名
2016年11月20日 目录 1.前言.............................................. 错误!未定义书签。 2.系统设计技术参数要求............................... 错误!未定义书签。 3.系统设计........................................... 错误!未定义书签。 3.1系统设计总体框图.............................. 错误!未定义书签。 3.2各模块原理说明................................ 错误!未定义书签。 3.3系统总原理阁说明.............................. 错误!未定义书签。 3.4系统印刷电路板的制作图........................ 错误!未定义书签。 3.5系统的操作说明................................ 错误!未定义书签。 3.6系统操作注意事项.............................. 错误!未定义书签。 系统设计参考文件................................. 错误!未定义书签。 致谢词........................................... 错误!未定义书签。 附录............................................. 错误!未定义书签。
LED心形流水灯加程序 1.原件清单:一个万能板,一个底座,一个STC89C52芯片,32个LED 灯,32个贴片电阻,两个30uf电容,一个晶振。 2.原理图: 注:电源处的复位可以不用;就是上面红框里的内容 3.正面图
背面图: 亮灯图: 4. 程序代码: #include