楼主要的是32灯心形流水灯,这里的难点是流水灯,也就是灯是按一定顺序一个一个亮,并一个一个灭,它不同于静态显示一个心形图案,比静态显示难度大点。考虑到楼主是个初学者,做32灯的心形流水灯需要器件复杂,初学者很容易做不下来而放弃,所以建议楼主改用单片机+8X8的LED发光矩阵做一个20灯的心形流水灯,这样比较容易实现,技术上同样可以得到很大煅练。
基于单片机+8X8LED发光矩阵,本人为楼主设计了一个心形流水灯方案。需要单片机1只,最小系统板1块,8X8LED发光矩阵1个,杜帮线16根。利用单片机控制发光矩阵发光,先静态显示一个心形图案,然后先按顺时针顺显示心形,完后再按逆时针顺序显示心形,完后重新开始。依此循环。
下面是设计图:
下面是相应程序:
- #include<reg52.h>
- unsigned char hdata[]={0x38,0x44,0x42,0x21,0x21,0x42,0x44,0x38};
- unsigned char heart[][2]={{4,2},{5,1},{6,1},{7,2},{7,3},{7,4},{6,5},{5,6},{4,7},{3,7},{2,6},{1,5},{0,4},{0,3},{0,2},{1,1},{2,1},{3,2}};
- void delay(int ii){int i,j;for(i=0;i<ii;i++)for(j=0;j<110;j++);}
- void heart1()
- {int i;
- for(i=0;i<8;i++)
- {P2=1<<i;P3=~hdata[i];}
- }
- void heart2()
- {int i;
- for(i=0;i<18;i++)
- {P2=1<<heart[i][0];
- P3=~(1<<heart[i][1]);
- delay(5);
- }
- for(i=17;i>=0;i--)
- {P2=1<<heart[i][0];
- P3=~(1<<heart[i][1]);
- delay(5);
- }
- }
- main()
- {int i;
- while(1)
- {for(i=0;i<2500;i++)heart1();
- for(i=0;i<20;i++)heart2();
- }
- }
复制代码
附件有完整的proteus设计和相配套的程序:
ask5a.zip
(24.7 KB, 下载次数: 16)
|