資源簡介
該設計采用AT89C51(AT89C51數據手冊)單片機作為主控制芯片,外接燈光閃爍功能和8音調鍵。

代碼片段和文件信息
#include???//包含51單片機寄存器定義的頭文件
sbit?P14=P1^4;??????//將P14位定義為P1.4引腳
sbit?P15=P1^5;??????//將P15位定義為P1.5引腳
sbit?P16=P1^6;??????//將P16位定義為P1.6引腳
sbit?P17=P1^7;??????//將P17位定義為P1.7引腳
unsigned?char?keyval;????//定義變量儲存按鍵值
sbit?sound=P3^7;????//將sound位定義為P3.7
unsigned?int?C;?????//全局變量,儲存定時器的定時常數
unsigned?int?f;?????//全局變量,儲存音階的頻率
//以下是C調低音的音頻宏定義
#define?l_dao?262???//將“l_dao”宏定義為低音“1”的頻率262Hz
#define?l_re?286????//將“l_re”宏定義為低音“2”的頻率286Hz
#define?l_mi?311????//將“l_mi”宏定義為低音“3”的頻率311Hz
#define?l_fa?349????//將“l_fa”宏定義為低音“4”的頻率349Hz
#define?l_sao?392???//將“l_sao”宏定義為低音“5”的頻率392Hz
#define?l_la?440????//將“l_a”宏定義為低音“6”的頻率440Hz
#define?l_xi?494????//將“l_xi”宏定義為低音“7”的頻率494Hz
???????
?????//以下是C調中音的音頻宏定義
#define?dao?523?????//將“dao”宏定義為中音“1”的頻率523Hz
#define?re?587??????//將“re”宏定義為中音“2”的頻率587Hz
#define?mi?659??????//將“mi”宏定義為中音“3”的頻率659Hz
#define?fa?698??????//將“fa”宏定義為中音“4”的頻率698Hz
#define?sao?784?????//將“sao”宏定義為中音“5”的頻率784Hz
#define?la?880??????//將“la”宏定義為中音“6”的頻率880Hz
#define?xi?987??????//將“xi”宏定義為中音“7”的頻率53
??????
//以下是C調高音的音頻宏定義
#define?h_dao?1046?????//將“h_dao”宏定義為高音“1”的頻率1046Hz
#define?h_re?1174??????//將“h_re”宏定義為高音“2”的頻率1174Hz
#define?h_mi?1318??????//將“h_mi”宏定義為高音“3”的頻率1318Hz
#define?h_fa?1396?????//將“h_fa”宏定義為高音“4”的頻率1396Hz
#define?h_sao?1567????//將“h_sao”宏定義為高音“5”的頻率1567Hz
#define?h_la?1760?????//將“h_la”宏定義為高音“6”的頻率1760Hz
#define?h_xi?1975?????//將“h_xi”宏定義為高音“7”的頻率1975Hz
/**************************************************************
函數功能:軟件延時子程序
**************************************************************/
?void?delay20ms(void)???
{
???unsigned?char?ij;
for(i=0;i<100;i++)
?for(j=0;j<60;j++)
???????????;
?}
/*******************************************
函數功能:節拍的延時的基本單位,延時200ms
******************************************/
void?delay()???????????????
???{
?????unsigned?char?ij;
??for(i=0;i<250;i++)
????for(j=0;j<250;j++)
??????????? ?;
???}
/*******************************************
函數功能:輸出音頻
入口參數:F
******************************************/
void?Output_Sound(void)
{
??C=(46083/f)*10; ???//計算定時常數
??TH0=(8192-C)/32;?????//可證明這是13位計數器TH0高8位的賦初值方法
??TL0=(8192-C)%32;?????//可證明這是13位計數器TL0低5位的賦初值方法
??TR0=1;???????????????//開定時T0
??delay();?????????????//延時200ms,播放音頻
??TR0=0;???????????????//關閉定時器
??sound=1;????????//關閉蜂鳴器
??keyval=0xff; ????//播放按鍵音頻后,將按鍵值更改,停止播放
}
/*******************************************
函數功能:主函數
******************************************/
void?main(void)
??{??
?? ???EA=1;?????????//開總中斷
???ET0=1;?????????//定時器T0中斷允許
ET1=1;????????//定時器T1中斷允許
TR1=1;????????//定時器T1啟動,開始鍵盤掃描
??????TMOD=0x10;????//分別使用定時器T1的模式1,T0的模式0
?????TH1=(65536-500)/256;??//定時器T1的高8位賦初值
??TL1=(65536-500)%256;??//定時器T1的高8位賦初值 ? ???
?while(1)????????????//無限循環
???{
????switch(keyval)
????{
????case?1:f=dao;????????????//如果第1個鍵按下,將中音1的頻率賦給f
????Output_Sound();????//轉去計算定時常數?
?break;
?case?2:f=
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????9603??2018-06-01?21:43??電子琴.cpp
評論
共有 條評論