75 基于单片机钢琴电子节拍器系统设计【毕设课设】

 

void main()
{
    unsigned char i=0,key=0,timer=0,flag1=0;
	LED1 = 0;
    LcdInit();  //液晶屏初始化
    timInit();   //定时器初始化
//  AT24C02_Init();  //EEPROM初始化
    ledOFF();    //关闭LED灯
    InitialSound();  //音乐播放器初始化
    displayInit();
	
    while(1)
    {  
        key=key_Scan();
		if(key==0x16&&flag==0)  //节拍增加
        {
			total++;
			if(total > 210) total = 40;
			Pai[0] = Number[total/100];
			Pai[1] = Number[total%100/10];
			Pai[2] = Number[total%100%10];
            lcd_pos(0x40);  
			for(i=0;i<11;i++)
			{
			    LcdWriteData(ShowData22[i]);
			}

			for(i=0;i<5;i++)
			{
			    LcdWriteData(Pai[i]);
			}
			LED1 = 1;
			delay_ms(500);
			LED1 = 0;

        }
		if(key==0x17&&flag==0)  //节拍减少
        {
            
			total--;
			if(total < 40) total = 210;
			Pai[0] = Number[total/100];
			Pai[1] = Number[total%100/10];
			Pai[2] = Number[total%100%10];
            lcd_pos(0x40);  
			for(i=0;i<11;i++)
			{
			    LcdWriteData(ShowData22[i]);
			}

			for(i=0;i<5;i++)
			{
			    LcdWriteData(Pai[i]);
			}
			LED1 = 1;
			delay_ms(500);
			LED1 = 0;

        }
        if(key>0&&key<22&&flag==0)  //21键音符
        {
            num=key-1;
            FreqTemp=Freqtab[key-1];
            TR0=1;
        }
        else   
        {
            if(TR0==1) //之前音符键按下,延时一秒停止
            {
                delay_ms(1000);
                TR0=0;
            }
        }
    }
}


void displayInit(void)
{
    unsigned char i= 0;
    for(i=0;i<16;i++)
    {
        LcdWriteData(ShowData[i]);
    }
    lcd_pos(0x40);  
	for(i=0;i<6;i++)
    {
        LcdWriteData(ShowData11[i]);
    }
    for(i=0;i<9;i++)
    {
        LcdWriteData(ShowData1[i]);
        num=ShowData1[i]+6-'0';
        TR0=1;
        delay_ms(1000);
    }
}


//计算数组长度,最大256,针对歌谱,还需增加两个结束符
unsigned char calcArrLen(unsigned char arr[])
{
    unsigned char len=0;
    while(arr[len]!='\0')	//计算歌曲长度
	{
		len++;
    }
    return len+2;
}

 资料下载地址

https://pan.baidu.com/s/11aSu3MeFcpolm_s0q516eg?pwd=8888

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值