资源简介

本文件是基于51单片机的16音节电子琴仿真设计,并附有c语言程序,proteus完整接线图,c程序有详细的注释方便同学们的理解。且有详细实验报告供同学们参考

资源截图

代码片段和文件信息

#include 
#define uchar  unsigned char
#define uint unsigned int
 
//共阳极数码管编码
uchar code DSY_Table[] = 
{ 0xc00xf90xa40xb00x990x920x820xf80x80  //012345678
  0x900x880x830xc60xa10x860x8e0xBF  };  //9ABCDEF-
//各音符对应的延时  
uint code Tone_Delay_Table[] = 
 {  6402164103642606440064524645806468464777
    6482064898649686503065058651106515765178 }; 

sbit BEEP = P3^0;    //蜂鸣器
uchar KeyNo;         //按键序号
//-------------------------
//延时
//-------------------------
void DelayMS(uchar x)
{
 uchar i;
 while ( x-- ) for(i = 0;i < 120; i++);
 }

//----------------------------------
//键盘矩阵扫描子程序
//----------------------------------

void Keys_Scan()

   uchar Tmpk;
   //高四位置0,放入四行
   P1 = 0x0F;
   DelayMS(2);
  //按键后00001111将变成0000XXXXX中1个为03个仍为1
  //下面的异或操作会把3个1变成0,唯一的0变成1
  Tmp = P1 ^ 0x0F;
  //判断按键发生于0~3列中的哪一列
 switch (Tmp)
 {
  case 1: k = 0;break;
  case 2: k = 1;break;
  case 4: k = 2;break;
  case 8: k = 3;break;
  default:return;  //无键按下
 }
 //低四位置0,放入四列
 P1 = 0xF0;
 DelayMS(2);
 //按键后11110000将变成XXXX0000,X中1个为03个仍为1
 //下面的表达式会将高四位移至低四位,并将其中唯一的0变为1,其余为0
 Tmp = (P1 >> 4)^0x0F;
 //对0~3行分别附加起始值04812
 switch (Tmp)
 {
  case 1: k += 0; break;
  case 2: k += 4; break;
  case 4: k += 8; break;
  case 8: k += 12; break;
  default:return;
  }
  KeyNo = k;
 }

//------------------------------------------------
//定时器0中断程序,不同频率的声音由该中断产生
//------------------------------------------------

void Play_Tone() interrupt 1
{
 TH0 = Tone_Delay_Table[ KeyNo ] / 256;
 TL0 = Tone_Delay_Table[ KeyNo ] % 256;
 BEEP = ~BEEP;
 }

//--------------------------------------------
//主程序
//--------------------------------------------
void main()
{
 P0 = 0xFF;    //初始值
 TMOD = 0x01;
 IE = 0x82;
 while(1)
 {
   P1 = 0xF0;          //发送扫描码
   if  (P1  !=  0xF0)  //如果有键按下
   {
      Keys_Scan();     //扫描键盘矩阵
      P0 = DSY_Table[ KeyNo ];  // 显示按键
  P0 = ~P0; 
      TR0 = 1;         //启动定时器,根据KeyNo发音
    }
    else 
    {
      TR0 = 0;         //停止播放
     }
     DelayMS(2);
  }
 }     

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      146432  2019-06-20 19:31  电子琴\单片机原理课程设计-电子琴.doc
     目录           0  2019-06-20 15:43  电子琴\
     目录           0  2019-06-20 15:43  电子琴\1\
     文件        4591  2019-06-20 15:06  电子琴\1\1.LST
     文件        3899  2019-06-20 15:06  电子琴\1\1.OBJ
     文件        2357  2019-06-20 15:06  电子琴\1\1.c
     文件       18769  2019-06-20 15:40  电子琴\1\2.pdsprj
     文件        2245  2019-06-20 15:40  电子琴\1\2.pdsprj.7QRGKBQR4BYJOSO.Administrator.workspace
     文件       19264  2019-06-17 21:57  电子琴\1\Backup Of 2.pdsbak
     文件        6376  2009-05-07 14:37  电子琴\1\STARTUP.A51
     文件       14048  2019-06-20 15:06  电子琴\1\STARTUP.LST
     文件         758  2019-06-20 15:06  电子琴\1\STARTUP.OBJ
     文件        4047  2019-06-20 15:06  电子琴\1\dian
     文件        7346  2019-06-20 15:06  电子琴\1\dian.M51
     文件         895  2019-06-20 15:06  电子琴\1\dian.hex
     文件          38  2019-06-20 15:06  电子琴\1\dian.lnp
     文件         377  2019-06-20 15:06  电子琴\1\dian.plg
     文件       55640  2019-06-20 15:40  电子琴\1\dian.uvopt
     文件       13389  2019-06-17 21:57  电子琴\1\dian.uvproj
     文件       55642  2019-06-17 21:57  电子琴\1\dian_uvopt.bak
     文件       13390  2019-06-17 16:37  电子琴\1\dian_uvproj.bak

评论

共有 条评论