專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

基于51單片機之16鍵電子琴實驗例程

作者:CaKen   來源:轉(zhuǎn)自CaKen工作室   點擊數(shù):  更新時間:2014年08月28日   【字體:

**************************  Copyright(C) CaKe  ****************************************

========================================================================================
==============**版權信息  : CaKen工作室                                ==============
==============**文件名    : main.c              ==============
==============**作者      : CaKen              ==============
==============**版本號    : V1.0               ==============
==============**時間      : 2014.08.23               ==============
==============**功能描述  : 16鍵電子琴實驗測試         ==============
========================================================================================
****************************************************************************************
 
#include"reg52.h"
 
#define uchar unsigned  char      //宏定義
#define uint  unsigned  int
 
#define  CaKen_KEY1  P1          //定義按鍵
#define  CaKen_KEY2  P2
 
sbit CaKen_SPEAKER = P3^7;         //蜂鳴器
 
uchar CaKen_MUSIC;        //全局變量
uchar CaKen_STH0;
uchar CaKen_STL0;
 
unsigned int code Tab[]=        //電子琴音頻符
{
64021,64103,64260,64400,           //低音3開始
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178
};
 
=====================================================================================
==================函數(shù)名: main
======================================================================================
void main()
{
   TMOD = 0x01;          //定時器0工作模式=方式1 (0 0 0 1) 16位定時器/計數(shù)器
   ET0  = 1;       //定時器0中斷允許
   EA   = 1;       //開啟總中斷
 
   CaKen_KEY1=0xff;   //按鍵初始化,高電平
   while(1)        //進入循環(huán)
     {
   if(CaKen_KEY1!=0xff|CaKen_KEY2!=0xff)
        {
       switch(~CaKen_KEY1)  //顯示的列位置
     {
       case 0x01: CaKen_MUSIC = 1;break;
    case 0x02: CaKen_MUSIC = 2;break;
    case 0x04: CaKen_MUSIC = 3;break;
    case 0x08: CaKen_MUSIC = 4;break;
    case 0x10: CaKen_MUSIC = 5;break;
    case 0x20: CaKen_MUSIC = 6;break;
    case 0x40: CaKen_MUSIC = 7;break;
    case 0x80: CaKen_MUSIC = 8;break;
    default:break;
   }
    switch(~CaKen_KEY2)
    {
    case 0x01: CaKen_MUSIC = 9 ;break;
    case 0x02: CaKen_MUSIC = 10;break;
    case 0x04: CaKen_MUSIC = 11;break;
    case 0x08: CaKen_MUSIC = 12;break;
    case 0x10: CaKen_MUSIC = 13;break;
    case 0x20: CaKen_MUSIC = 14;break;
    case 0x40: CaKen_MUSIC = 15;break;
    case 0x80: CaKen_MUSIC = 16;break;
    default:break;
     }
  
     CaKen_STH0 = Tab[CaKen_MUSIC]/256;
     CaKen_STL0 = Tab[CaKen_MUSIC]%6;
     TR0  = 1; //開啟定時器0 進入定時器中斷函數(shù)
 
     }
    else
    {
      CaKen_SPEAKER = 1;        //關蜂鳴器
   TR0 = 0;            //關定時器
    }
  }  
}
 
======================================================================================
  ==================函數(shù)名:定時器中斷服務函數(shù)
=======================================================================================
 
void CaKen_QQ1145266160_TIMER0(void) interrupt 1
{
   TH0 = CaKen_STH0;
 TL0 = CaKen_STL0;
 CaKen_SPEAKER = ~CaKen_SPEAKER;
}
 
 
 
 
=======================================================================================
 -------------------      CaKen工作室  原創(chuàng)作品     --------------------
 -------------------            CaKen工作室  版權所有       --------------------
========================================================================================
 
關閉窗口