搜索
您的当前位置:首页正文

51单片机电子琴设计C程序

来源:爱够旅游网


#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define KeyPort P3

/*------------------------------------------------

全局变量

------------------------------------------------*/

unsigned char High,Low; //定时器预装值的高8位和低8位

sbit SPK=P1^2; //定义喇叭接口

unsigned char code freq[][2]={

0xD8,0xF7,//00440HZ 1

0xBD,0xF8,//00494HZ 2

0x87,0xF9,//00554HZ 3

0xE4,0xF9,//00587HZ 4

0x90,0xFA,//00659HZ 5

0x29,0xFB,//00740HZ 6

0xB1,0xFB,//00831HZ 7

0xEF,0xFB,//00880HZ `1

};

/*------------------------------------------------

函数声明

------------------------------------------------*/

void Init_Timer0(void);//定时器初始化

/*------------------------------------------------

主函数

------------------------------------------------*/

void main (void)

{

unsigned char num;

Init_Timer0(); //初始化定时器0,主要用于数码管动态扫描

SPK=0; //在未按键时,喇叭低电平,防止长期高电平损坏喇叭

while (1) //主循环

{

switch(KeyPort)

{

case 0xfe:num= 1;break;

case 0xfd:num= 2;break;

case 0xfb:num= 3;break;

case 0xf7:num= 4;break;

case 0xef:num= 5;break;

case 0xdf:num= 6;break;

case 0xbf:num= 7;break;

case 0x7f:num= 8;break;

default:num= 0;break;

}

if(num==0)

{

TR0=0;

SPK=0; //在未按键时,喇叭低电平,防止长期高电平损坏喇叭

}

else

{

High=freq[num-1][1];

Low =freq[num-1][0];

TR0=1;

}

}

}

/*------------------------------------------------

定时器初始化子程序

------------------------------------------------*/

void Init_Timer0(void)

{

TMOD |= 0x01; //使用模式1,16位定时器,使用\"|\"符号可以在使用多个定时器时不受影响

EA=1; //总中断打开

ET0=1; //定时器中断打开

//TR0=1; //定时器开关打开

}

/*------------------------------------------------

定时器中断子程序

------------------------------------------------*/

void Timer0_isr(void) interrupt 1

{

TH0=High;

TL0=Low;

SPK=!SPK;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top