最近做了簡單的小玩意,基于51單片機的流水燈,流水燈跟隨《生日快樂歌》的節拍閃爍,覺得挺有意思的,給大家分享出來,如有不好,歡迎指正!
所有工程文件都在附件,包含源碼、電路圖、hex文件等。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (56.24 KB, 下載次數: 60)
下載附件
2021-10-26 20:45 上傳
UD{)TCH{%OK~6ZK@BB67.png (263.53 KB, 下載次數: 93)
下載附件
仿真電路圖
2021-10-26 11:21 上傳
同時蜂鳴器播放生日快樂歌
單片機源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define led_8 P0
- sbit speaker=P2^7;
- unsigned char code yp[]={70,70,63,70,53,56,70,70,63,
- 70,47,53,70,70,35,42,53,56,
- 63,39,39,42,53,47,53,-1}; //音譜表
- unsigned int code yl[]={225,75,300,300,300,600,225,75,300,300,300,600,225,75,
- 300,300,300,300,300,475,75,300,300,300,600,-1}; //每個音對應的演奏長度
- void ys(unsigned int x)
- {
- while(x--);
- }
- void music()
- {
- unsigned int m=0,n,s;
- led_8=0xff;
- while(yp[m]!=-1||yl[m]!=-1) //沒遇到結束符-1則執行下列音樂段
- {
- for(n=0;n<yl[m];n++)
- {
- speaker=~speaker; //揚聲器按音譜發音
- for(s=0;s<yp[m];s++);
- }
- ys(10); //每個音符的演奏長度
- led_8=~led_8; //8只LED燈閃爍
- m++; //指向下一個音符與演奏時間值
- }
- }
- void main()
- {
- while(1)
- {
- music();
- ys(500);
- }
- }
復制代碼
51hei.png (9.36 KB, 下載次數: 76)
下載附件
2021-10-26 20:43 上傳
所有資料51hei附件下載:
task4.zip
(39.74 KB, 下載次數: 50)
2021-10-26 11:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|