久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子琴設計

[復制鏈接]
跳轉到指定樓層
樓主
#include<reg52.h>
#define keyport P1
#define uchar unsigned char
#define uint unsigned int
uchar high,low;           //定時器預裝值的高8位和低8位
sbit speak=P3^0;
sbit gao=P3^5;
sbit di=P3^6;
sbit zdbf=P3^7;
uchar yinjie=1;
uchar time;
uchar n=0;
uchar bo=0;
uchar code fre[][2]= {   
                                                0x8c,0xf8,
                                                0x5b,0xf9,
                                                0x15,0xfa,
                                                0x67,0xfa,
                                                0x90,0xfb,
                                                0xae,0xfb,
                                                0x0c,0xfc,        //低音
                                                  0x44,0xfc,
                                                0xac,0xfc,
                                                0x09,0xfd,
                                                0x34,0xfd,
                                                0x82,0xfd,
                                                0xc2,0xfd,
                                                0x06,0xfe,         //中音
                                                0x22,0xfe,
                                                0x56,0xfe,
                                                0x85,0xfe,
                                                0x9a,0xfe,
                                                0xc1,0xfe,
                                                0xe4,0xfe,
                                                0x03,0xff,                  //高音
                                          };
void delay(uint );
void ITimer0(void);//定時器初始化
void key(void);
void dtxs(int,int);
void song()
{
TH0=high;
TL0=low;
TR0=1;
delay(time*240);                       
}
void yinyue()
{
uchar code hls[]={  5,2,2, 3,2,1, 5,2,1, 1,3,4, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 1,2,1, 2,2,1 ,3,2,2 ,2,2,1,
                                        1,2,1 ,2,2,6, 5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1, 6,2,2, 1,3,2, 5,2,4, 5,2,2,
                    2,2,1, 3,2,1, 4,2,3, 7,1,1, 1,2,6, 6,2,2, 1,3,2, 1,3,4, 7,2,2, 6,2,1, 7,2,1, 1,3,4 ,6,2,1,
                                        7,2,1, 1,3,1 ,6,2,1, 6,2,1 ,5,2,1 ,3,2,1, 1,2,1, 2,2,6, 5,2,2, 3,2,1,
                                           1,2,1, 1,3,3, 7,2,1, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,1,1, 1,2,6  
                                };
        uchar m;
        n=0;
      while(n<174)
          {
                  m=hls[n]+7*(hls[n+1]-1)-1;
                high=fre[m][1];
                low=fre[m][0];
                time=hls[n+2];
                n=n+3;
                song();               
           }
}                                       
void main (void)
{
        uchar num;
        ITimer0();
        speak=0;
        while(1)
        {
                key();
                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;
                        speak=0;
                }
                else
                {
                        high=fre[7*yinjie+num-1][1];
                        low=fre[7*yinjie+num-1][0];
                        TR0=1;
                }
                dtxs(yinjie,num);
        }
}
void ITimer0(void)
{
TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                    
EA=1;            //總中斷打開
ET0=1;           //定時器中斷打開
TR0=1;           //定時器開關打開
}
void Timer0_isr(void) interrupt 1
{
TH0=high;
TL0=low;
speak=!speak;
if(zdbf==0)
     {
                 delay(100);
                if(zdbf==0)
                {
                           bo++;
                          if(bo/2==1)
                                {        delay(100);
                                        if(n<174)n=500;                        //n賦值大于174,跳出while,停止音樂
                                        else n=0;
                                        dtxs(3,0);
                                }
                                if(bo%2==0)
                                {        delay(100);
                                        n=500;                        //n賦值大于174,跳出while,停止音樂
                                }
                }
        }/**/
}
void key()
{
        if(zdbf==0)
               {delay(100);
                  if(zdbf==0)       
                        yinyue();
                }
        if(gao==0)
        {
                delay(100);
                if(gao==0)
                {
                        delay(100);
                        if(yinjie==2)
                                yinjie=1;
                        else yinjie=2;
                }
        }
    if(di==0)
        {
                delay(100);
                if(di==0)
                {
                        delay(100);
                        if(yinjie==0)
                                yinjie=1;
                        else yinjie=0;
                }
        }
}
void delay(unsigned int x)
{      
                int a,b;
                   for(a=x;a>0;a--)
                   for(b=110;b>0;b--);
}
void dtxs(k,l)//k是按鍵號,l是工作方式
{
char seg[14]={0x6f,0x0a,0xe3,0xcb,0x8e,0xcd,
                           0xed,0x0b,0xef,0xcf,0xaf,0xec,0x65,0xea};
  P2=0x01;//選擇第一個數碼管
  P0=seg[l];//顯示按鍵號
  delay(4);
  P2=0x02;//選擇第二個數碼管
  P0=seg[k+10];//顯示工作方式
  delay(4);
                        }


hjkh.png (10.51 KB, 下載次數: 39)

hjkh.png

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:89286 發表于 2018-7-4 08:08 | 只看該作者
thanks for sharing
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品在线看 | 亚洲免费在线观看av | www.日韩 | 人人澡视频 | 久久久久久久久国产成人免费 | 欧美日韩亚洲成人 | 精品久久精品 | 91偷拍精品一区二区三区 | 亚洲一区二区三区视频 | 国产区在线 | 欧美日日日日bbbbb视频 | 欧美精品一区二区在线观看 | 在线成人av| 久久激情视频 | 亚洲精品9999 | 国产视频中文字幕 | 精品一区二区三区在线观看国产 | 国产成人精品久久二区二区91 | 精品一级电影 | 国产成人免费 | 日韩精品在线观看一区二区三区 | 丁香五月网久久综合 | av片毛片| 国产黑丝av | 在线小视频 | 九九九久久国产免费 | 国产精品不卡一区 | 中文字幕亚洲视频 | 中文字幕 在线观看 | 精品日韩在线 | 国产成人99av超碰超爽 | 国产精品视频一区二区三区 | 一区二区电影网 | 青青草综合 | 欧美久久久网站 | 日韩欧美综合在线视频 | 国内自拍视频在线观看 | 国产精品久久久久久婷婷天堂 | 亚洲精品二区 | 中文字幕视频网 | 精品国产18久久久久久二百 |