欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 音樂發生器 keil代碼 [打印本頁]

作者: wuzi008    時間: 2021-3-26 13:20
標題: 音樂發生器 keil代碼
#include <reg51.h>
#define uint  unsigned int
#define uchar unsigned char
#define output P1                //P1口做輸出接口  
#define input  P1       //P1口做輸入接口


unsigned int code Soundtab[] = { 64580,64684,64777,64820,64898,64968,65030,65058,};  //設置T值
uint SoundTemp;        //用來存儲T值
sbit Sound = P3^7;          //揚聲器,接P3.7口

void delayms(uint xms)   //延時x毫秒
{
   uint x,y;
     for(x=xms;x>0;x--)
     for(y=110;y>0;y--);
}

void T0_INT(void) interrupt 1                  //中斷程序
{       
     Sound = ~Sound;                                  //電平取反,發音
         TH0 = SoundTemp/256;                          //除以256                  
     TL0 = SoundTemp;                 //載入定時半周期的初始值

}

void main()
{
        TMOD = 0X01;                    //定時器T0設置為方式1
        EA = 1;                                         
        ET0 = 1;                                  //使能 T0 中斷       
        TR0 = 0;                                //關閉T0定時器
        while(1)                                //循環
  {
               
         uint n;       
         uchar L,H;                             //臨時保存讀取的行或者列                                  
         output = 0x0f;               
            L = input;                                //讀取列
         if(0x0f != L)                   //如果按鍵按下
        {                                          
                delayms(5);                    //延時,用于消除抖動
                L = input;                        //再讀取列
                if(0x0f != L)                //說明按鍵按下       
                {
                        L = L & 0x0f;                //保留低4位
                        output = 0xf0;                        //準備讀取行
                        delayms(1);                             //延時
                        H = input;                            //讀取行
                        H = H & 0xf0;                //保留高4位
                        L = L | H;                    //將列和行的值合并
                }
        }
       
        if(L==0xee)
        {                                                                                //P1=11101110  P1^0與P1^4輸入低電平         說明是按鍵1按下
                  n=0;
                  SoundTemp = Soundtab[n];                         //讀取音調的簡譜碼T值
              TR0 = 1;                                            //啟動中斷
                  while(0xf0 != output);                    //檢測按鍵松開
              TR0 = 0;
                  Sound = 1        ;
        }       
        if(L==0xde)
        {                                                                                //P1=11011110  P1^0與P1^5輸入低電平         說明是按鍵2按下
                  n=1;
                  SoundTemp = Soundtab[n];                         //讀取音調的簡譜碼T值
              TR0 = 1;                                            //啟動中斷
                  while(0xf0 != output);                    //檢測按鍵松開
              TR0 = 0;
                  Sound = 1        ;
        }                       
        if(L==0xbe)
        {                                                                                //說明是按鍵3按下
                  n=2;
                  SoundTemp = Soundtab[n];                         //讀取音調的簡譜碼T值
              TR0 = 1;                                            //啟動中斷
                  while(0xf0 != output);                    //檢測按鍵松開
              TR0 = 0;
                  Sound = 1        ;
        }                
        if(L==0x7e)
        {                                                                                //說明是按鍵4按下
                  n=3;
                  SoundTemp = Soundtab[n];                         //讀取音調的簡譜碼T值
              TR0 = 1;                                            //啟動中斷
                  while(0xf0 != output);                    //檢測按鍵松開
              TR0 = 0;
                  Sound = 1        ;
        }
        if(L==0xed)
        {                                                                                //說明是按鍵5按下
                  n=4;
                  SoundTemp = Soundtab[n];                         //讀取音調的簡譜碼T值
              TR0 = 1;                                            //啟動中斷
                  while(0xf0 != output);                    //檢測按鍵松開
              TR0 = 0;
                  Sound = 1        ;
        }
        if(L==0xdd)
        {                                                                                //說明是按鍵6按下
                  n=5;
                  SoundTemp = Soundtab[n];                         //讀取音調的簡譜碼T值
              TR0 = 1;                                            //啟動中斷
                  while(0xf0 != output);                    //檢測按鍵松開
              TR0 = 0;
                  Sound = 1        ;
        }
        if(L==0xbd)
        {                                                                                //說明是按鍵7按下
                  n=6;
                  SoundTemp = Soundtab[n];                         //讀取音調的簡譜碼T值
              TR0 = 1;                                            //啟動中斷
                  while(0xf0 != output);                    //檢測按鍵松開
              TR0 = 0;
                  Sound = 1        ;
        }
        if(L==0x7d)
        {                                                                                //說明是按鍵8按下
                  n=7;
                  SoundTemp = Soundtab[n];                         //讀取音調的簡譜碼T值
              TR0 = 1;                                            //啟動中斷
                  while(0xf0 != output);                    //檢測按鍵松開
              TR0 = 0;
                  Sound = 1        ;
        }
  }
}






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1