日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机两只老虎 c语言,基于51单片机做音乐盒(两只老虎)

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51单片机两只老虎 c语言,基于51单片机做音乐盒(两只老虎) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*********************************************************************************

項目:音頻音樂盒

設計時間:2017.4.10

硬件描述:

軟件描述:

* 【實驗平臺】: QX-MCS51 單片機開發板

* 【外部晶振】: 11.0592mhz

* 【主控芯片】: STC89C52

* 【編譯環境】: Keil μVisio3

* 【程序功能】: 實驗板唱歌實驗(歌曲:兩只老虎)

* 【使用說明】:

**********************************************************************************/

#include

#define uchar unsigned char

bit flag; //標志音樂輸出腳電平的高低

uchar ptr = 0x00; //取音符

uchar high; //計數器高位

uchar low; //計數器低位

// 本曲譜為 "兩只老虎",前兩個十六進制表示發聲頻率,后一個表示發聲時間,0x7F,0xFF 表示休止符

// 0x00 表示結束

// 1 _ 1_ 1 .5

uchar code music[] = {

0xFC,0x44,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x09,0x7F, 0xFC,0x44,0xFF,

// 1 _ 2 3_1? ? ? ?? ? 5

0xFC,0x44,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x09,0x7F, 0xFC,0x44,0xFF,

// 1_ 2 3_1

0xFD,0x09,0x7F, 0xFD,0x34,0x7F, 0xFD,0x82,0xFF,

// 3_ 4 5

0xFD,0x09,0x7F, 0xFD,0x34,0x7F, 0xFD,0x82,0xFF,

// 3_ 4 5

0xFD,0x82,0x7F, 0xFD,0xCB,0x7F, 0xFD,0x82,0x7F, 0xFD,0x34,0x7F,0xFD,0x09,0X7F,0XFC,0X44,0XFF,

// 5_ 6 5_4 3 1

0xFD,0x82,0x7F, 0xFD,0xCB,0x7F, 0xFD,0x82,0x7F, 0xFD,0x34,0x7F,0xFD,0x09,0X7F,0XFC,0X44,0XFF,

// 5_ 6 5_4 3 1

0xFC,0xAC, 0X7F,0xFC,0x44,0X7F, 0xFC,0xAC,0X7F,0xFA,0x44,0xFF,

// 2 5??1 0

0xFC,0xAC,0X7F, 0xFC,0x44,0X7F, 0xFC,0xAC,0X7F, 0xFA,0x44,0xFF,

// 2 5??1 0

0x00//結束

};

void Init(void); //初始化函數

void DelayMs(unsigned int time); //毫秒級延時函數

void main()

{

uchar time;

Init();

TH0 = high;

TL0 = low;

while (1)

{

if (music[ptr] != 0xFF && music[ptr] != 0x00)//判斷是否是正常音符

{

TR0 = 0;

P2_3 = 1;

DelayMs(10); //間歇

TR0 = 1;

high = music[ptr]; //取設置頻率數值的高8 位

low = music[ptr + 1]; //取設置頻率數值的低8 位

time = music[ptr + 2]; //取發聲時間

DelayMs(time);

ptr += 3;

}

else if (music[ptr] == 0xFF) //判斷是否是休止符

{

time = music[ptr + 2];

DelayMs(time);

ptr += 3;

}

else //結束符,停止2 秒后繼續

{

TR0 = 0;

P2_3 = 1;

DelayMs(2000);

ptr = 0;

}

}

}

/*********************************************************************************

* 名稱:Count1(void) interrupt 1

* 功能:設置計時器0 溢出中斷,每中斷一次改變P2_3 引腳電平

*********************************************************************************/

void Count1(void) interrupt 1

{

TH0 = high;

TL0 = low;

if (flag == 0) //改變P2_3 引腳電平

{

P2_3 = 0;

flag = 1;

}

else

{

P2_3 = 1;

flag = 0;

}

}

/*********************************************************************************

* 名稱:Init()

* 功能:設置計數器0 工作方式,16 位計數,溢出中斷方式

**********************************************************************************/

void Init()

{

TMOD = 0x01; //定時器0 處于計時方式,16 位

EA = 1;

ET0 = 1; //定時器0 溢出中斷

}

/*********************************************************************************

* 名稱:DelayMs(unsigned int time)

* 功能:延時time * 1ms 時間

*********************************************************************************/

void DelayMs(unsigned int time)

{

unsigned int i;

unsigned int j;

for (j =0; j < time; j++) //每個循環 約 3ms

{

for (i =0; i < 363; i++)

{;}

}

}

總結

以上是生活随笔為你收集整理的51单片机两只老虎 c语言,基于51单片机做音乐盒(两只老虎)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。