樓主要的是32燈心形流水燈,這里的難點是流水燈,也就是燈是按一定順序一個一個亮,并一個一個滅,它不同于靜態顯示一個心形圖案,比靜態顯示難度大點。考慮到樓主是個初學者,做32燈的心形流水燈需要器件復雜,初學者很容易做不下來而放棄,所以建議樓主改用單片機+8X8的LED發光矩陣做一個20燈的心形流水燈,這樣比較容易實現,技術上同樣可以得到很大煅練。
基于單片機+8X8LED發光矩陣,本人為樓主設計了一個心形流水燈方案。需要單片機1只,最小系統板1塊,8X8LED發光矩陣1個,杜幫線16根。利用單片機控制發光矩陣發光,先靜態顯示一個心形圖案,然后先按順時針順顯示心形,完后再按逆時針順序顯示心形,完后重新開始。依此循環。
下面是設計圖:
ask5a.JPG (54.23 KB, 下載次數: 48)
下載附件
2019-3-7 14:19 上傳
下面是相應程序:
- #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)
2019-3-7 14:23 上傳
點擊文件名下載附件
|