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

📄 key16.c

📁 单片机控制FPGA的程序,包括AD转换,频率输出,测试程序
💻 C
字号:
#include"includes.h"

extern unsigned int L_num,R_num;    //左右移偏移量
unsigned char keyread;       //按键值
extern unsigned char xdata res1[256];
extern unsigned char xdata resmem[256];      //存储数组
extern unsigned char memshow_flag;           //显示存储波形标志位
extern double setfreq;                  //设定的采样频率 
extern double freq;                      //测定的实际频率
extern double T;
extern bit zero_flag;
extern unsigned char freq_flag;

void key16()		      //读取按键值
{
  
	P3=1;
	mydelay(50);
	keyread=P3;
	if(keyread!=0x00)
	{
    	turnward();
	    sword();
	    wav_mem();
	}

}

void turnward()					  //根据按键向左右移动输出波形
{
    if((keyread==0x10)||(keyread==0x12))
	{
	   
	   if(keyread==0x10)			  //按一下左移一位
	   {
	       if(R_num>0)
		   R_num--;
		   else
	       L_num++;
		   if(L_num>=255) L_num=0;
	   }
	   else if(keyread==0x12)		  //按一下右移一位
	   {   
	       if(L_num>0)
		   L_num--;
		   else
	       R_num++;
		   if(L_num>=255) L_num=0;
	   }
	   else
	   return;
	}
	else 
	return;   


}

void sword()			              //扫描时间选择档位
{
    if((keyread==0x1f)||(keyread==0x1e)||(keyread==0x11))
	{
	    if(keyread==0x1f)			  //20ms/div
		{
		   freq_flag=0;
		   
		}
		else if(keyread==0x1e)		 //2us/div
		{
		    freq_flag=1;
		   
		}
		else if(keyread==0x11)		//100ns/div
		{
		    freq_flag=2;
		   
		}
		else
		return;
	}
	else 
	return;
     
}

void freq_set()	                    //计算9851所需频率
{  
      T=1000/freq;					//测定时间单位:us
      zero_flag=0;
     if(freq_flag==0)
	 {
	       
	       if(freq>=0.5)
		   {
			  zero_flag=1; 
		   }
		   
		   else 
		   {
		      setfreq=0.003;
		   }
		   
	 }
	 else if(freq_flag==1)
	 {
	       if(freq<=1000)
		   {
		      setfreq=3/(T+0.1);
		   }
		   else if((freq>1000)&&(freq<5000))
		   {
		      setfreq=3/(10*T+0.1);
		   }  
		   else if(freq>5000)
		   {
		       zero_flag=1;
		   }
	 }
	 else if(freq_flag==2)
	 {
	         if(freq<=1000)
		   {
		       zero_flag=1;												 
		   }
		   else if(freq>1000)
		   {
		       setfreq=3/(10*T+0.005);
		   }  
	 }

}


void wav_mem()                    //波形存储显示
{
   unsigned int i;
   if((keyread==0x14)||(keyread==0x16))		  //波形存储
   {
       if(keyread==0x14)
	   {
	       for(i=0;i<256;i++)
		   resmem[i]=res1[i];
	      
	   }
	   else if(keyread==0x16)	             //显示当前波形、存储波形转换
	   {
	       if(memshow_flag==0)
		   memshow_flag=1;
		   else if(memshow_flag==1)
		   memshow_flag=0;
	   }
   }
   else
   return;

} 

⌨️ 快捷键说明

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