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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2389|回復: 0
打印 上一主題 下一主題
收起左側

音樂發生器 keil代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:782260 發表于 2021-3-26 13:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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        ;
        }
  }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表