0 GP
程式
作者:瑋│2007-11-21 12:08:49│巴幣:0│人氣:292
今天8051實習作了一個很有趣的程式
雖然我自己不太會做辣....
最後連燒程式都沒燒成功ˊˋ
不過可以任意改節拍感覺挺好玩的
希望之後能夠融會貫通~
/* 生日快樂歌實驗(happy.c) */
#include <reg51.h>
sbit speaker = P3^7; /*宣告輸出端*/
unsigned char i=0; /*宣告變數*/
unsigned char tone_H, tone_L; /*宣告計時量變數*/
void beat_125(unsigned char); /*宣告節拍函數*/
unsigned char song[]={ 5,3,3,4,2,2,1,2,3,4,5,5,5,15};//歌曲
unsigned char beat[]={ 8,8,16,8,8,16,8,8,8,8,8,8,8,16};//節拍
tone[]={ 1012, 956, 852, 759, 716, 638,
568, 506, 478, 426, 379 ,0};//音階定義
// ========主程式 ===============
main()
{
speaker=0; /*喇叭初始值*/
IE=0x82; //EA,ET0=1
TMOD=0x11; //Timer0-M0=1
// 初始設定
while(song[i]!=15) /*while迴圈開始*/
{
TH0=tone_H=(65536-tone[song[i]])/256;
TL0=tone_L=(65536-tone[song[i]])%256;
TR0=1;
// 設定 TH0,TL0 音階
// 放歌
beat_125(beat[i]); /*指定節拍*/
i++; /*下一個音*/
TR0=0; // 停止
} /*結束播放*/
} /*主程式結束*/
//====Timer 0中斷副程式==================
void tone_timer(void) interrupt 1 /* Timer 0中斷副程式開始*/
{ TH0=tone_H; /*填入計時量之高八位元*/
TL0=tone_L; /*填入計時量之低八位元*/
speaker=~speaker; /*喇叭反相輸出*/
} /*結束中斷副程式*/
//====節拍函數==================
void beat_125(unsigned char x) /*節拍函數開始*/
{ unsigned char i,j,k; /*宣告變數*/
for (i=0;i<x;i++) /*i迴圈*/
for (j=0;j<125;j++) /*j迴圈*/
for (k=0;k<120;k++); /*k迴圈*/
}
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=916663
All rights reserved. 版權所有,保留一切權利
相關創作
留言共 2 篇留言
KO:
大家都沒做出來= ="
11-21 23:01
瑋:
嗯是阿ˊˋ
這段程式還是直接從佑齊的電腦上貼過來的= =
不過也謝謝你幫我留言~
11-26 21:24
我要留言提醒:您尚未登入,請先
登入再留言
0喜歡★jerryandhis 可決定是否刪除您的留言,請勿發表違反站規文字。
前一篇:段考.模擬考.統測ˊˋ...
後一篇:幫巴哈想的一首打油詩~...