|
/**************************************************************************************
* 電子琴
接線說明*
p2.7<-->蜂鳴器
P0<-->數碼管
P1<-->矩陣鍵盤
* ************************************************************************************* */
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
#include "key.h"
#define u8 unsigned char //對數據類型進行聲明定義
#define u16 unsigned int
#define smg P0
sbit led=P2^7; //定義P20口是led
sbit test1=P3^6;
u16 Tab_F[]={ 262,286,331,349,392,440,494,//低音
523,587,659,698,784,880,988,//中音
1046,1175,1318,1396,1568,1760,1975};//高音
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
u8 key_num;
u16 Freq,T_cnt;
bit beep;
/*******************************************************************************
* 函 數 名 : Timer0Init
* 函數功能 : 定時器0初始化
* 輸 入 : 無
* 輸 出 : 無
***+****************************************************************************/
void Timer0Init()
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=(65536-100)/256; //給定時器賦初值,定時1ms
TL0=(65536-100)%256;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
Timer0Init(); //定時器0初始化
while(1)
{
key_num=KeyDown();
if(key_num!=0xff)
{
P0=~smgduan[key_num]; //顯示按鍵
Freq=Tab_F[key_num]; //發聲
beep=1;
T_cnt=0;
EA=1;
}
};
}
/*******************************************************************************
* 函 數 名 : void Timer0() interrupt 1
* 函數功能 : 定時器0中斷函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer0() interrupt 1
{
static u16 i;
TH0=(65536-89)/256; //給定時器賦初值,定時0.1ms
TL0=(65536-89)%256;
i++;
//test1=~test1;
if(i>(5000/Freq))
{
i=0;
if(beep==1)
{led=~led;}
}
T_cnt++;
if(T_cnt==1000)
{
beep=0;
led=0;
EA=0;
}
}
|
-
-
電子琴.zip
2020-9-30 10:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
237.62 KB, 下載次數: 12, 下載積分: 黑幣 -5
|