⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 频率发生器.i

📁 有LCD菜单的 频率发生器制作资料
💻 I
📖 第 1 页 / 共 3 页
字号:
					LCD_Write(*Caption++);
				}
				else
				{
					if ((Caption[1]==0x20)||(Caption[1]==0)) 
					{
						break;
					}
					else
					{
						LCD_Write(*Caption++);
					}	
				}
			}
		}
	}
}

void SaveSetup(void)
{
	unsigned char i;
	
	PORTB.3=1;
	PORTB.1=1;
	LCD_Ctrl(0B00000001);
	LCD_PutStrF("    Save Setup");
	LCD_Ctrl(0xC0);
	LCD_PutStrF("    waiting...");
	
	for (i=0;i<16;i++)
	{
		eSetup[i]=mSetup[i];
		delay_ms(10);
	}
	
	LCD_Ctrl(0xC0);
	LCD_PutStrF("    done      ");

	for (i=0;i<5;i++)
	{
		PORTB.3=0;
		delay_ms(50);
		PORTB.3=1;
		delay_ms(50);
	}
	
	PORTB.1=0;
}

void RestartClient(void)
{
	unsigned char i;
	unsigned char Flag=0;
	
	PORTB.3=1;
	PORTB.2=1;
	LCD_Ctrl(0B00000001);
	LCD_PutStrF("    Restarting");
	LCD_Ctrl(0xC0);
	LCD_PutStrF("    waiting...");
	
	while ((UCSRA&(1<<7))) 
	{
		i=UDR;
		delay_us(100);
	}
	
	
	PORTD.2=0;
	delay_ms(100);
	
	LCD_Ctrl(0xC0);
	LCD_PutStrF("    sending...");
	PORTD.2=1;
	delay_ms(4);
	
	if ((ReceiveByte()==0x55)&&(ReceiveByte()==0xAA))
	{
		for (i=0;i<16;i++)
		{
			TransmitByte(mSetup[i]);
		}
		
		for (i=0;i<16;i++)
		{
			mSetup[i]=ReceiveByte();
		}		
		
		if ((ReceiveByte()==0xF0)&&(ReceiveByte()==0x0F))
		{
			Flag=1;
		}
	}
	
	if (Flag==1)
	{
		LCD_Ctrl(0xC0);
		LCD_PutStrF("    done      ");
		
		for (i=0;i<3;i++)
		{
			PORTB.3=0;
			delay_ms(50);
			PORTB.3=1;
			delay_ms(50);
		}
	}
	else
	{
		LCD_Ctrl(0xC0);
		LCD_PutStrF("    Faild     ");
		
		for (i=0;i<10;i++)
		{
			PORTB.3=0;
			delay_ms(50);
			PORTB.3=1;
			delay_ms(50);
		}
	}
	
	PORTB.2=0;
	
}

void ByteToBin(unsigned char Bin,unsigned char * Buffer)
{
	unsigned char i;
	
	for (i=0;i<8;i++)
	{
		if (Bin&(1<<i)) 
		{
			Buffer[7-i]='1';
		}
		else
		{
			Buffer[7-i]='0';
		}
	}
}

void ViewSetup()
{
	flash unsigned char *Caption;
	flash unsigned char *pDefine;
	unsigned char Key;
	//unsigned char Pos;
	unsigned int TopMenuItem;
	unsigned int CurrentMenuItem;
	//unsigned char i;
	unsigned char MenuCount;
	unsigned char Buffer[12];

    delay_ms(10);
    PORTB.3=1;
	
	//LCD_WriteCaption(ParamCaptionID,0);
	//Pos=LCD_Position()-1;
	
	WriteCGRAM(0x82,1,0);
	WriteCGRAM(0x83,2,0);
	WriteCGRAM(0x84,3,0);
	
	pDefine=SubMenuDefine+(unsigned int)2*(unsigned int)(13);
	MenuCount=pDefine[1];
	TopMenuItem=pDefine[0];
	CurrentMenuItem=0;
	if (CurrentMenuItem>MenuCount-1)
	{
		CurrentMenuItem=MenuCount-1;
	}
	

	Key=1;
	while (Key!=0x1F)
	{
		if (Key!=0)
		{
			LCD_Ctrl(0B10000000);
			LCD_PutStrF("      ");
			
			Caption=Menu+(8+2)*(TopMenuItem+CurrentMenuItem-1);
			
			if (CurrentMenuItem==0)
			{
				LCD_Write(3);
			}
			else if (CurrentMenuItem==MenuCount-1)
			{
				LCD_Write(1);
			}
			else
			{
				LCD_Write(2);
			}
			
			LCD_Write(MenuNo(CurrentMenuItem+1));
			LCD_Write('.');
			LCD_PutStrF(Caption);

			ByteToHexBuffer(mSetup[(unsigned char)CurrentMenuItem],Buffer);
			ByteToBin(mSetup[(unsigned char)CurrentMenuItem],&Buffer[3]);
			Buffer[2]=',';
			Buffer[11]=0;
			LCD_Ctrl(0xC0);
			LCD_PutStrF("    =");
			LCD_PutStr(Buffer);
			
		}
		
		Key=GetKey();
		
		if (Key!=0)
		{
			if (Key==0x1D)
			{
				if (CurrentMenuItem>0)
				{
					CurrentMenuItem--;
				} 
			}
			else if (Key==0x1E)
			{	
				if (CurrentMenuItem<MenuCount-1)
				{
					CurrentMenuItem++;
				}
			}
			else if (Key==0x1B)
			{
				Key=0x1F;
			}
			
			delay_ms(10);
			PORTB.3=1;  //Sound Stop
		}
		
	}
}


void ExecuteMenu(unsigned char MenuID)
{
	unsigned char Temp;
	
	if (MenuID==4)
	{
		SaveSetup();
	}
	else if (MenuID==2)
	{
		RestartClient();
	}
	else if (MenuID==3)
	{
		ViewSetup();
	}
	else if (MenuID==8)
	{   //Timer0 Clock0
		ChooseRadioMenu(MenuID,3,&mSetup[0]);		
	}
	else if (MenuID==9)
	{   //Timer0 TOIE0
		GetInputBoolean(5,MenuID,&mSetup[12],0);			
	}
	else if (MenuID==18)
	{   //Timer1 Clock1
		Temp=mSetup[2]&0x07;
		ChooseRadioMenu(MenuID,5,&Temp);
		mSetup[2]=(mSetup[2]&0xF8)|(Temp);
	}	
	else if (MenuID==19)
	{   //Timer1 COM1A
		Temp=(mSetup[1]&((1<<7)|(1<<6)))>>6;
		ChooseRadioMenu(MenuID,6,&Temp);
		mSetup[1]=(mSetup[1]&(~((1<<7)|(1<<6))))|((Temp)<<6);
	}	
	else if (MenuID==20)
	{   //Timer1 COM1B
		Temp=(mSetup[1]&((1<<5)|(1<<4)))>>4;
		ChooseRadioMenu(MenuID,7,&Temp);
		mSetup[1]=(mSetup[1]&(~((1<<5)|(1<<4))))|((Temp)<<4);
	}	
	else if (MenuID==21)
	{   //Timer1 WGM1
		Temp=(mSetup[1]&((1<<1)|(1<<0)))>>0;
		Temp|=((mSetup[2]&((1<<4)|(1<<3	)))>>(3	-2));
		ChooseRadioMenu(MenuID,8,&Temp);
		mSetup[1]=(mSetup[1]&(~((1<<1)|(1<<0))))|((Temp&0x03)<<0);
		mSetup[2]=(mSetup[2]&(~((1<<4)|(1<<3	))))|((Temp>>2)<<3	);
	}	
	else if (MenuID==22)
	{   //Time1 OCR1A
		GetInput(6,MenuID,0,&mSetup[3]);
	}
	else if (MenuID==23)
	{   //Timer1 OCR1B
		GetInput(6,MenuID,0,&mSetup[5]);
	}
	else if (MenuID==24)
	{   //Timer1 ICR1
		GetInput(6,MenuID,0,&mSetup[7]);
	}
	else if (MenuID==25)
	{   //Timer1 TICIE1
		GetInputBoolean(6,MenuID,&mSetup[12],5);
	}
	else if (MenuID==26)
	{   //Timer1 OCIE1A
		GetInputBoolean(6,MenuID,&mSetup[12],4);
	}
	else if (MenuID==27)
	{   //Timer1 OCIE1B
		GetInputBoolean(6,MenuID,&mSetup[12],3);
	}
	else if (MenuID==28)
	{   //Timer1 TOIE1
		GetInputBoolean(6,MenuID,&mSetup[12],2);
	}
	else if (MenuID==29)
	{   //Timer1 ICNC1
		GetInputBoolean(6,MenuID,&mSetup[2],7);
	}		
	else if (MenuID==30)
	{   //Timer1 ICES1
		GetInputBoolean(6,MenuID,&mSetup[2],6);
	}
	else if (MenuID==63)
	{   //Timer2 Clock2
		Temp=mSetup[9]&0x07;
		ChooseRadioMenu(MenuID,10,&Temp);
		mSetup[9]=(mSetup[9]&0xF8)|(Temp);
	}
	else if (MenuID==64)
	{   //Timer2 WGM2
		Temp=(mSetup[9]&(1<<6	))>>6	;
		Temp|=(mSetup[9]&(1<<3	))>>(3	-1);
		ChooseRadioMenu(MenuID,11,&Temp);
		mSetup[9]= (mSetup[9]&(~(1<<6	)))|((Temp&(0x01))<<6	);
		mSetup[9]= (mSetup[9]&(~(1<<3	)))|(((Temp>>1)&(0x01))<<3	);
	}
	else if (MenuID==65)
	{   //Timer2 COM2
		Temp=(mSetup[9]&((1<<4)|(1<<5)))>>4;
		ChooseRadioMenu(MenuID,12,&Temp);
		mSetup[9]= (mSetup[9]&(~((1<<4)|(1<<5))))|(Temp<<4);
	}
	else if (MenuID==66)
	{  //Timer2 OCIE2
		GetInputBoolean(7,MenuID,&mSetup[12],7);
	}
	else if (MenuID==67)
	{   //Timer2 TOIE2
		GetInputBoolean(7,MenuID,&mSetup[12],6);
	}
	else if (MenuID==68)
	{   //Timer2 OCR2
		GetInput(7,MenuID,&mSetup[10],0);
	}
	else if (MenuID==69)
	{   //Timer2 AS2
		GetInputBoolean(7,MenuID,&mSetup[11],3);
	}
}

void InitKey(void)
{
	flash unsigned char *Caption;
	unsigned char IRCmd[4];
	unsigned char Buffer[8];
	unsigned char IRKeyPress;
	unsigned int TopMenuItem;
	unsigned char MenuCount;
	unsigned char i,j;
	
	
	MenuCount=SubMenuDefine[14*2+1];
	TopMenuItem=SubMenuDefine[14*2];
	
	i=0;
	
	PORTB.1=1;
	
	while (i<MenuCount)
	{
		Caption=Menu+(8+2)*(TopMenuItem+i-1);
		
		LCD_Ctrl(0B00000001);
		LCD_Delay(500);
		
		LCD_Ctrl(0B10000000);
		LCD_PutStrF("Set Key:");
		LCD_PutStrF(Caption);
		LCD_Ctrl(0xC0);
		//LCD_PutStrF("       ");
		//LCD_PutStrF("Key:");
		
		while (!(IR_GetBuffer(IRCmd,&IRKeyPress)));
		
		PORTB.3=0;  //Sound Start
		
		BinToHex(IRCmd,Buffer,4);
		
		for (j=0;j<8;j++)
		{
			LCD_Write(Buffer[j++]);
			LCD_Write(Buffer[j]);
			LCD_Write(' ');
		}
		
		if ((~IRCmd[0]==IRCmd[1])&&(~IRCmd[2]==IRCmd[3])&&(IRKeyPress>0))
		{
			eConfig[i] = IRCmd[2];
			mConfig[i++] = IRCmd[2];
			LCD_PutStrF("OK ");
		}
		else
		{
			LCD_PutStrF("Err");
		}
		
		delay_ms(10);
		PORTB.3=1;
		
		IR_Complete();
		delay_ms(500);
	}
	
	LCD_Ctrl(0xC0);
	LCD_PutStrF("    done       ");
	
	for (i=0;i<16;i++)
	{
		eSetup[i]=0;
		mSetup[i]=0;
	}
	
	for (i=0;i<5;i++)
	{
		PORTB.3=0;
		delay_ms(50);
		PORTB.3=1;
		delay_ms(50);
	}	
	
	PORTB.1=0;

}

void LoadConfig(void)
{
	unsigned char i;
	
	for (i=0;i<17;i++)
	{
		mConfig[i] = eConfig[i];
	}
}

void main (void)
{
   unsigned char cnt,i;
   unsigned char BUFFER[17];
   unsigned char Index;
   unsigned char Cmd;
   //flash unsigned char *sp2

  for (i=1;i<2;i++)
   delay_ms(1000);  //LCD上电中,延迟2秒
  
  
  PORT_Init();
  LCD_Init();
  USART_Init(0x33);
  TIMER_Init();
  
  PORTB.1=0;
  PORTB.2=0;
  PORTD.2=1;
  
  Index=0;
  Cmd=0;
 
  cnt=1;
  LCD_Ctrl(0B00000010  );
  LCD_Delay(150);

  LCD_Ctrl(0B10000000);
  LCD_PutStrF("  Timer Menu");

  LCD_Ctrl(0xC0);
  LCD_PutStrF("  Initialing...");
  
   
  #asm
  sei
  #endasm

  Cmd=0;
  for (i=0;i<100;i++)
  {
	if (PINB.4==0) Cmd++;
  }
  
  if (Cmd>80)
	InitKey();
  else
	LoadConfig();
  
  for (i=0;i<16;i++)
  {
	mSetup[i]=eSetup[i];
  }
  
  while (1)
  {
		if (UCSRA&(1<<7)) //串口有信息吗?
		{
			Cmd=UDR;    //如果有,接收一个字节
			if ((Cmd>=32) && (Cmd<=127))
			{
				BUFFER[Index]=Cmd;
				if (Index++ >17 ) Index=0;
			}     
		}
		
		ShowMenu();
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -