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

📄 interfacedef.c

📁 电赛一等奖作品:音频信号分析仪单片机源码
💻 C
字号:
#include "lcd.h"
#include "func.h"
#include "interface.h"
#include "key.h"
#include "getinputnum.h"
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;

void DisplayStateDef(void)
{
	char temp[10];
	uchar len,j,i;
	LcdClear();
    SetPos(0,0);
    LcdPrint("频率:",sizeof("频率:")-1);
    len=ltoa(Wave[CurWaveType].Freq,temp);
    if(Wave[CurWaveType].Freq>1000)
    {
        for(j=len;j>len-3;j--)
        {
            temp[j]=temp[j-1];
        }
        temp[len-3]='.';
        LcdPrint(temp,len+1);
        LcdPrint("KHz",3);
    }
    else
    {
        LcdPrint(temp,len);
        LcdPrint("Hz",2);
    }
    /////////////////
    SetPos(0,1);
    LcdPrint("幅度:",sizeof("幅度:")-1);
    
    Wave[CurWaveType].Peak=0;
    for(i=0;i<4;i++)
	{
		Wave[CurWaveType].Peak+=Wave[i].Peak+HarPeak[i];
	}
    temp[3]=Wave[CurWaveType].Peak;
    if(temp[3]<0){temp[3]*=-1;}
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);
    SetPos(0,2);
    LcdPrint("设定基波",sizeof("设定基波")-1);
    SetPos(0,3);
    LcdPrint("设定谐波",sizeof("设定谐波")-1);
}

void DisPlayBaseWave()
{
  	char temp[10];
  	LcdClear();
	SetPos(0,0);
    LcdPrint("\xd5\xfd弦波:",sizeof("\xd5\xfd弦波:")-1);
    temp[3]=Wave[0].Peak;
    if(temp[3]<0)
    {
        LcdPrint("-",1);
        temp[3]*=-1;
    }
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);

	SetPos(0,1);
	LcdPrint("方波  : ",sizeof("方波  : ")-1);
	temp[3]=Wave[1].Peak;
      if(temp[3]<0)
    {
        LcdPrint("-",1);
        temp[3]*=-1;
    }
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);
	
	SetPos(0,2);
	LcdPrint("\xc8\xfd角波:",sizeof("\xc8\xfd角波:")-1);
	temp[3]=Wave[2].Peak;
      if(temp[3]<0)
    {
        LcdPrint("-",1);
        temp[3]*=-1;
    }
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);
	
	
	SetPos(0,3);
	LcdPrint("锯齿波:",sizeof("锯齿波:")-1);
	temp[3]=Wave[3].Peak;
      if(temp[3]<0)
    {
        LcdPrint("-",1);
        temp[3]*=-1;
    }
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);
}
void DisPlayHarWave()
{
  	char temp[10];
  	LcdClear();
	SetPos(0,0);
    LcdPrint("一次谐波: ",sizeof("一次谐波: ")-1);
    temp[3]=HarPeak[0];
    if(temp[3]<0)
    {
        LcdPrint("-",1);
        temp[3]*=-1;
    }
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);

	SetPos(0,1);
	LcdPrint("二次谐波: ",sizeof("二次谐波: ")-1);
	temp[3]=HarPeak[1];
      if(temp[3]<0)
    {
        LcdPrint("-",1);
        temp[3]*=-1;
    }
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);
	
	
	SetPos(0,2);
	LcdPrint("\xc8\xfd次谐波: ",sizeof("\xc8\xfd次谐波: ")-1);
	temp[3]=HarPeak[2];
      if(temp[3]<0)
    {
        LcdPrint("-",1);
        temp[3]*=-1;
    }
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);
	
	SetPos(0,3);
	LcdPrint("四次谐波: ",sizeof("四次谐波: ")-1);
	temp[3]=HarPeak[3];
      if(temp[3]<0)
    {
        LcdPrint("-",1);
        temp[3]*=-1;
    }
    temp[0]=temp[3]/10;
    temp[2]=temp[3]%10;
    temp[0]+=0x30;temp[2]+=0x30;temp[1]='.';
    LcdPrint(temp,3);
    LcdPrint("V",1);
}

void GetBaseWave()
{
	uchar key;
	float ftemp;
	SetPos(5,3);
	ShowCursor();
    while(1)
	{
		key=WaitKey();
		switch(key)
		{
			case 0x00: 	ftemp=10*GetInputFloatNum(4,0,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							Wave[0].Peak=ftemp;
						}
					    SetPos(0,0);
	                    ShowCursor();
						break;
			case 0x01:	ftemp=10*GetInputFloatNum(4,1,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							Wave[1].Peak=ftemp;
						}
					    SetPos(0,0);
	                    ShowCursor();
						break;
			case 0x02:	ftemp=10*GetInputFloatNum(4,2,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							Wave[2].Peak=ftemp;
						}
					    SetPos(0,0);
	                    ShowCursor();
						break;
			case 0x03:	ftemp=10*GetInputFloatNum(4,3,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							Wave[3].Peak=ftemp;
						}
					    SetPos(0,0);
	                    ShowCursor();
						break;

			case 0x0f:	//HideCursor();
					    return;
                        break;
			default:break;
		}
	DisPlayBaseWave();
	}
	
}
void GetHarWave()
{
	uchar key;
	char ftemp;
	SetPos(5,3);
	ShowCursor();
    while(1)
	{
		key=WaitKey();
		switch(key)
		{
			case 0x00: 	ftemp=10*GetInputFloatNum(5,0,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							HarPeak[0]=ftemp;
						}
					    SetPos(0,0);
	                    ShowCursor();
						break;
			case 0x01:	ftemp=10*GetInputFloatNum(5,1,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							HarPeak[1]=ftemp;
						}
					    SetPos(0,0);
	                    ShowCursor();
						break;
			case 0x02:	ftemp=10*GetInputFloatNum(5,2,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							HarPeak[2]=ftemp;
						}
					    SetPos(0,0);
	                    ShowCursor();
						break;
			case 0x03:	ftemp=10*GetInputFloatNum(5,3,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							HarPeak[3]=ftemp;
						}
					    SetPos(0,0);
	                    ShowCursor();
						break;

			case 0x0f:	//HideCursor();
					    return;
                        break;
			default:break;
		}
	DisPlayHarWave();
	}

}


bit ProcessDefInput(void)
{
	ulong temp;
	uchar i,key;
	//char ftemp;
	SetPos(5,3);
	ShowCursor();
	while(1)
	{
		key=WaitKey();
		switch(key)
		{
			case 0x00:	SetPos(3,0);
    					for(i=0;i<10;i++)
    					{
        					LcdPrint(" ",1);
    					}
						temp=GetInputNum(3,0,5);
						if(temp>0 && temp<=20000)
						{
							Wave[CurWaveType].Freq=temp;
						}
	                    ShowCursor();
						break;
			case 0x01:	/*ftemp=10*GetInputFloatNum(3,1,4);
						if (ftemp<=50 && ftemp>=-50)
						{
							Wave[CurWaveType].Peak=ftemp;
						}
	                    ShowCursor();*/
						break;
			case 0x02:	DisPlayBaseWave();
			            GetBaseWave();
						break;
			case 0x03:	DisPlayHarWave();
			            GetHarWave();
						break;
			case 0x0f:	LcdClear();
						LcdPrintLine("改变波形配置?",sizeof("改变波形配置?")-1,1,1);
						key=WaitKey();
						if(key==0x0f)
                        {
							   	HideCursor();
							   	return 1;
                        }
                     	
			default:break;
		}
	DisplayStateDef();
	}
	
}

⌨️ 快捷键说明

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