📄 频率发生器.i
字号:
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 + -