Пример #1
0
//-----------------------
// wr_data
//-----------------------
void 
wr_data(unsigned char dat)
{
  LCDE_L;
  RW_L;
  RS_H;
  LCDE_H; 
  SET_LCMDATA(dat);
  delay50us();
  LCDE_L;
  RS_L;
  delay5ms();
  //delay50us();

}
Пример #2
0
void senddata(uchar data1)
{
	uchar tempdata,i;
	tempdata=data1;
	cls=0;
	delay50us(1);
	for(i=0;i<8;i++)
	{
		dat=(tempdata & 0x80)>>7;
		clk=1;
		tempdata=tempdata<<1;
		delay(1);
		clk=0;
		delay(1);
	}
	dat=0;	
}
Пример #3
0
//-----------------------
// wr_com
//-----------------------
void 
wr_com(unsigned char comm)
{

// 8bit
  LCDE_L;
  RS_L;
  RW_L;
  LCDE_H;
  SET_LCMDATA(comm);
  delay50us();
  LCDE_L;
  delay5ms();
  //delay50us();



}
Пример #4
0
uchar keyscan()
{
	uchar i,tempdata=0;
	if(key==0)
	{
		senddata(0x15);
		dat=1;
		delay50us(1);
		for(i=0;i<8;i++)
		{
			clk=1;
			delay(1);
			tempdata=(tempdata<<1) | dat;	
			clk=0;
			delay(1);
		}
		dat=0;
		return tempdata;
	}
	else
		return 0xFF;
}
Пример #5
0
void main(void)
{
	unsigned char cnt=0, i, j;
	unsigned char receivedByte;
	bit validKeyPressed = 0;
	union {
		unsigned char byteVal[2];
		unsigned int intVal;
	} keyValue;
	
	RDA5802Init();
//	RDA5802ForceMono( 0 );
//	RDA5802BoostBass( 1 );	
	RDA5802SetVolume( currentVol );

	//初始化红外口
	IR=1;
	
	RELAY_SPEAKER=1;//继电器关
	RELAY_POWER=1;

	while(1)
	{
		validKeyPressed = 0; //如果检测到合法按键,则此变量将被置1
		
		// 等待下降沿
		while(IR);

		//记录9ms低电平的长度
		cnt=0;
		while((!IR)&& cnt<IR_COUNT_TIME_OUT )
		{
			delay50us();
			cnt++;
		}
		if(cnt<170||cnt>180) continue; //9ms低电平不符合,判为干扰
	
		
		//记录4.5ms高电平的长度
		cnt=0;
		while(IR && cnt<IR_COUNT_TIME_OUT )
		{
			delay50us();
			cnt++;
		}
		if(cnt<80||cnt>95) continue; //4.5ms高电平不符合,判为干扰
		
		//收取4个字节
		for( i=0; i<4; i++ )
		{
			receivedByte=0;
			
			for( j=0; j<8; j++ )
			{
				//记录0.56ms低电平
				cnt=0;
				while(!IR && cnt<IR_COUNT_TIME_OUT )
				{
					delay50us();
					cnt++;
				}
				if(cnt<8||cnt>15) continue; //0.56ms低电平不符合,判为干扰

				//记录高电平长度,决定是0还是1
				cnt=0;
				while(IR && cnt<IR_COUNT_TIME_OUT )
				{
					delay50us();
					cnt++;
				}
				
				if( cnt>7 && cnt<16 )//0.56ms高电平,判为0
				{
					if( j!=0 ) receivedByte <<= 1; //首位不用左移
				}
				else if(cnt>28 && cnt<40)//1.68ms高电平,判为0
				{
					//该位为1
					if( j!=0 ) receivedByte <<= 1; //首位不用左移
					receivedByte |= 1;
				}
				else break; //低电平不符合0.56ms或1.68ms,判为干扰
			}
			
			if( cnt >= IR_COUNT_TIME_OUT) break; //干扰
			
			//第一字节为0x00,第二字节为0xff
			//第三、四字节为键值
			if( i==0 && receivedByte!=0 ) break;
			else if( i==1 && receivedByte!=0xff ) break;
			else if( i==2 )
			{
				keyValue.byteVal[0] = receivedByte;
			}
			else if( i==3 )
			{
				keyValue.byteVal[1] = receivedByte;
				validKeyPressed = 1; //检测到了合法按键
			}
		}
		
		
		if(validKeyPressed)
		{
			//检测到合法的按键了
			
			switch( keyValue.intVal )
			{
//				case 0xa25d: //CH-
//				case 0x629d: //CH
//				case 0xe21d: //CH+
//					if(powerUp)
//					{
//						RDA5802PowerUp(0);
//						powerUp=0;
//					}
//					break;
					
//				case 0x22dd: //|<<
//					RDA5802PowerUp(0);
//					break;
//					
//				case 0x02fd: //>>|
//					RDA5802PowerUp(1);
//					break;
					
				case 0xe01f: //VOL-
					if( powerUp && (currentVol>1) )
					{
						currentVol--;
						RDA5802SetVolume(currentVol);
					}
					break;
					
				case 0xa857: //VOL+
					if( powerUp && (currentVol<15) )
					{
						currentVol++;
						RDA5802SetVolume(currentVol);
					}
					break;
					
				case 0x906f: //EQ (Power Off)
					if(powerUp)
					{
						RELAY_SPEAKER=1;
						delay250ms();
						delay250ms();
						RELAY_POWER=1; //延时关电源,避免爆炸声
						
						RDA5802PowerUp(0); //关模块
						powerUp=0;
					}
					break;
				
				case 0x30cf: //1
					currentStationIndex=0;
					playStation();
					break;
					
				case 0x18e7: //2
					currentStationIndex=1;
					playStation();
					break;
					
				case 0x7a85: //3
					currentStationIndex=2;
					playStation();
					break;
					
				case 0x10ef: //4
					currentStationIndex=3;
					playStation();
					break;
					
				case 0x38c7: //5
					currentStationIndex=4;
					playStation();
					break;
					
				case 0x5aa5: //6
					currentStationIndex=5;
					playStation();
					break;
					
				case 0x42bd: //7
					currentStationIndex=6;
					playStation();
					break;

				default:
					break;
					
			}
		}
	}
}
Пример #6
0
void
interrupt_init(int int_vect,int mode)
{
	switch ( int_vect )
	{
	case  INT0:
		if (mode==0) {
			sbi(EICRA, ISC01);
			cbi(EICRA, ISC00);
		}
		else {
			sbi(EICRA, ISC01);
			sbi(EICRA, ISC00);
		}
		delay50us(1);
		break;
	case  INT1:
		if (mode==0) {
			sbi(EICRA, ISC11);
			cbi(EICRA, ISC10);
		}
		else {
			sbi(EICRA, ISC01);
			sbi(EICRA, ISC00);
		}
		delay50us(1);
		break;
	case  INT2:
		if (mode==0) {
			sbi(EICRA, ISC21);
			cbi(EICRA, ISC20);
		}
		else {
			sbi(EICRA, ISC21);
			sbi(EICRA, ISC20);
		}
		delay50us(1);
		break;
	case  INT3:
		if (mode==0) {
			sbi(EICRA, ISC31);
			cbi(EICRA, ISC30);
		}
		else {
			sbi(EICRA, ISC31);
			sbi(EICRA, ISC30);
		}
		delay50us(1);
		break;
	case  INT4:
		if (mode==0) {
			sbi(EICRB, ISC41);
			cbi(EICRB, ISC40);
		}
		else {
			sbi(EICRB, ISC41);
			sbi(EICRB, ISC40);
		}
		delay50us(1);
		break;
	case  INT5:
		if (mode==0) {
			sbi(EICRB, ISC51);
			cbi(EICRB, ISC50);
		}
		else {
			sbi(EICRB, ISC51);
			sbi(EICRB, ISC50);
		}
		delay50us(1);

		break;
	case  INT6:
		if (mode==0) {
			sbi(EICRB, ISC61);
			cbi(EICRB, ISC60);
		}
		else {
			sbi(EICRB, ISC61);
			sbi(EICRB, ISC60);
		}
		delay50us(1);

		break;
	case  INT7:
		if (mode==0) {
			sbi(EICRB, ISC71);
			cbi(EICRB, ISC70);
		}
		else {
			sbi(EICRB, ISC71);
			sbi(EICRB, ISC70);
		}
		delay50us(1);

		break;
	}

}