微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 红外电子琴调试

红外电子琴调试

时间:10-02 整理:3721RD 点击:
本人刚学习单片机想利用单片机做个红外遥控电子琴,编译通过了,就是无法执行逻辑应该没错,请大家帮忙审审,感激不尽
#include<REG51.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar tdata[4],pbuff[20]={0};
uchar code vtable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
uchar code high_buff[] = {0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};
uchar code low_buff[] = {0,4,13,10,20,3,8,6,2,23,5,26,4,4,3};
sbit tb=B^0;
sbit IR=P3^2;
sbit buzzer=P3^0;
bit flag=0;
sbit key_rd=P1^5;
sbit key_py=P1^6;
uchar nc,tc,i,key=0,ring=0;
void INIT()
{
EA=1;
ET0=1;
EX0=1;       
ET1=1;
TMOD=0x02;
TH0=0xA3;
TL0=0xA3;
TH1=0xEA;
TL1=0x04;
IT0=1;
buzzer=0;
}
void T0_wait()
  {
TR0=1;       
while(!TF0);
TR0=0;
return;
        }
        void delayms(uint k)
{
uint i,j;
        for(i=k;i>0;i--)
        for(j=0;j<110;j++);
}
void INT0_service() interrupt 0
{
EX0=0;
delayms(3);
while(!IR);
while(IR);
for(i=0;i<4;i++)
{
for(nc=0;nc<8;nc++)
{
while(!IR);
tc=0;
while(IR)
{
T0_wait();
tc++;}
if(tc<=8)
{
tb=0;
B=B<<1;
}else
{
tb=1;
B=B<<1;
}
}
tdata[i]=B;
}
EX0=1;
flag=1;
key=tdata[2];
}
void T1_service() interrupt 2
{
buzzer = ~buzzer;   
TH1 = high_buff[ring];
TL1 = low_buff[ring];  
}
void DISPLAY()
{
uchar view;
view=vtable[key];
P2=view;
delayms(100);       
}
void SOUND()
{
ring=key;
TR1=1;
delayms(250);
TR1=0;
}
void RECORD()
{uchar c=0;
loop:if(!key_rd)
{
while(EX0&flag)
        {
                pbuff[c]=key;
                c++;
                flag=0;
  }
        goto loop;
}  
}
void PLAY()
{
         uchar c=0;
         if(!key_py)
         { for(;pbuff[c]!=0;c++)
          {key=pbuff[c];
           SOUND();
    }
                for(c=0;c<20;c++)
                 pbuff[c]=0;
        }
}
void mian()
{
        INIT();
        while(1)
        {
        SOUND();
        DISPLAY();
                P2=0x00;
        RECORD();
        PLAY();               
        }
       
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top