电路板焊好之后有事耽误了一段时间,今天有空继续开工~~由于手边没有红外遥控,因此先写了一个电脑的上位机软件来控制DIY功放。
单片机的程序参考了版主的源代码,增加了串口控制部分。
#include
#include
#define MAIN_Fosc 11059200L //定义主时钟
#define RX1_Lenth 3 //串口接收缓冲长度
#define BaudRate1 115200UL //选择波特率
#define Timer1_Reload (65536UL -(MAIN_Fosc / 4 / BaudRate1)) //Timer 1 重装值, 对应300KHZ
#define Timer2_Reload (65536UL -(MAIN_Fosc / 4 / BaudRate1)) //Timer 2 重装值, 对应300KHZ
u8 TX1_Cnt; //发送计数
u8 RX1_Cnt; //接收计数
bit B_TX1_Busy; //发送忙标志
u8 idata RX1_Buffer[RX1_Lenth]; //接收缓冲
bit ReceiveBit;
void main(void)
{
P1M1&=~(1<<4); //P1.4(MUTE)推挽
P1M0|=(1<<4);
P_SW1 &= ~0xc0;
SCON = (SCON & 0x3f) | 0x40;
AUXR &= ~(1<<4); //Timer stop 特率使用Timer2产生
AUXR |= 0x01; //S1 BRT Use Timer2;
AUXR |= (1<<2); //Timer2 set as 1T mode
T2H = (u8)(Timer2_Reload >> 8);
T2L = (u8)Timer2_Reload;
AUXR |= (1<<4); //Timer run enable
REN = 1; //允许接收
ES = 1; //允许中断
EA = 1; //允许全局中断
LED = 1;
while(1)
{
Scan_key();
while(ReceiveBit==1)
{
if(RX1_Buffer[0]==0xEB&&RX1_Buffer[1]==0x90)
{
if(RX1_Buffer[2]==0x01)
{
Volume_add();
u_sstr("-1\n\r");
flash_LED(20);
ReceiveBit=0;
RX1_Cnt = 0;
}
else if(RX1_Buffer[2]==0x02)
{
Volume_sub();
u_sstr("+1\n\r");
flash_LED(20);
ReceiveBit=0;
RX1_Cnt = 0;
}
else if(RX1_Buffer[2]==0x00)
{
MUTE = 1;
u_sstr("0\n\r");
flash_LED(20);
ReceiveBit=0;
RX1_Cnt = 0;
}
}
}
}
}
void UATR0_ISR(void) interrupt 4
{
if(RI)
{
RI=0;
RX1_Buffer[RX1_Cnt]=SBUF;
if(++RX1_Cnt >= RX1_Lenth) ReceiveBit=1;
}
}