电子琴

    xiaoxiao2021-03-25  134

    /*-----------------------------------------------   名称:电子琴   论坛:www.doflye.net   编写:shifang   日期:2009.5   修改:无   内容:8个按键控制8个音符          ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #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;   }
    转载请注明原文地址: https://ju.6miu.com/read-7322.html

    最新回复(0)