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

📄 menu.c

📁 2005年全国大学生电子设计竞赛论文集
💻 C
字号:
extern wavedata[8];
#include "SPCE061V004.H"
#include "lcd.h"
#include "menu.h"
//#define up 0x01
//#define down 0x10
//#define right 0x40
//#define relf 0x20
//#define 0k 0x02



//按键up:0x80      按键down:0x04
//按键relf:0x02    按键right:0x40 
//按键ok:0x20
//
void step_forword(void);
void step_backword(void);
void sin_send(unsigned long int f_con);
void xieenglish();
//=======================================================================================
//                              菜单1
//                              
//                          正玄波发生器
//                          调副调制器
//                          psk,ask
//                          调频发生器
//=======================================================================================
int menu1(void)        						//菜单代码  1
{
	unsigned int i,option=1,f_option=1;				
   	xiezi(0+16,0,&zheng); xiezi(16+16,0,&xuan); xiezi(32+16,0,&bo); xiezi(48+16,0,&fa);xiezi(64+16,0,&sheng); xiezi(80+16,0,&qi);
   	xiezi(0+16,2,&tiao); xiezi(16+16,2,&fu); xiezi(32+16,2,&tiao); xiezi(48+16,2,&zhi);xiezi(64+16,2,&qi);
   	xieenglish(16,4,&bP); xieenglish(24,4,&bS); xieenglish(32,4,&bK); xieenglish(42,4,&bA);xieenglish(50,4,&bS); xieenglish(58,4,&bK);
   	xiezi(0+16,6,&tiao); xiezi(16+16,6,&pin); xiezi(32+16,6,&fa);xiezi(64,6,&sheng); xiezi(80,6,&qi);
   	cpl(16,0,112,1);							//取反按键1
   	w_scr();
   	while(1)									//key event opporation
    {
    	if((*P_IOA_Data&0x80)==0)			//key_up on clip
        {
        	option--;
            cpl_menu1(f_option);
            if(option==0)
            {
            	option=4;
            }
			f_option=option;
            cpl_menu1(option);    
            w_scr();
            delay(5000);
            while((*P_IOA_Data&0x80)==0)
            {
            	delay(5000);
            }      
        }
        if((*P_IOA_Data&0x04)==0)			//key_down on clip
        {
        	option++;
            cpl_menu1(f_option);
            if(option==5)
            {
            	option=1;
            }
			f_option=option;
            cpl_menu1(option);    
            w_scr();  
            delay(5000);
            while((*P_IOA_Data&0x04)==0)
            {
            	delay(5000);
            }
        }
		if((*P_IOA_Data&0x20)==0)			//key_ok on clip
        {
        	switch(option)
            {
            	case 1: i=2;break;
                case 2: i=5;break;
                case 3: i=4;break;
                case 4: i=6;break;
            }
            delay(5000);
            while((*P_IOA_Data&0x20)==0){delay(5000);}
            goto menu1_end;
		}              
        delay(5000);
	}
	menu1_end:
	return i; 
}
//=======================================================================================
//
//=======================================================================================
cpl_menu1(unsigned int i)
{
	switch(i)
    {
    	case 1: cpl(0+16,0,96+16,1);break;							//取反按键1
     	case 2: cpl(0+16,2,96+16,3);break;
     	case 3: cpl(0+16,4,96+16,5);break;
     	case 4: cpl(0+16,6,96+16,7);break;
    }
}
//=======================================================================================
//							菜单2
//						正玄波发生器
//				 输出频率:		10 000 000Hz
//		           步进       设定频率
//=======================================================================================
int menu2(void)								//菜单代码  2
{
	unsigned int i,option=1,f_option=1,ge=0,shi=1,j;
	unsigned long int sin_data;			
   	xiezi(16,0,&zheng); xiezi(32,0,&xuan); xiezi(48,0,&bo); xiezi(64,0,&fa);xiezi(80,0,&sheng); xiezi(96,0,&qi);
   	xiezi(0,3,&pin); xiezi(16,3,&lv); xieword(32,4,10); 
    xiebword(40,3,wavedata[0]);   xiebword(48,3,wavedata[1]); xiebword(56,3,wavedata[2]);   xiebword(64,3,wavedata[3]);
    xiebword(72,3,wavedata[4]);   xiebword(80,3,wavedata[5]); xiebword(88,3,wavedata[6]);   xiebword(96,3,wavedata[7]);
    xieword(104,4,11);//H     
    xieword(112,4,12);//Z
   	xiezi(0,5,&bu); xiezi(16,5,&jin);       xiezi(48,5,&ajfan); xiezi(64,5,&ajhui);  xiezi(96,5,&she); xiezi(112,5,&ajding);
   	cpl(0,5,31,6);							//取反按键1
   	w_scr();
   	sin_data=0;
   	for(j=0;j<8;j++)
    {
    	sin_data=(sin_data+wavedata[j])*10;
    }
       									//计算正弦波数据并发送数
    sin_send(sin_data/10);
   	while(1)									//key event opporation
    {
    	if((*P_IOA_Data&0x02)==0)			//key_relf on clip
        {
        	option--;
            cpl_menu2(f_option);
            if(option==0)
            {
            	option=3;
            }
			f_option=option;
            cpl_menu2(option);    
            w_scr();
            delay(5000);
            while((*P_IOA_Data&0x02)==0){delay(5000);}      
		}
        if((*P_IOA_Data&0x40)==0)			//key_right on clip
        {
        	option++;
            cpl_menu2(f_option);
            if(option==4)
            {
            	option=1;
            }
			f_option=option;
            cpl_menu2(option);    
            w_scr();  
            delay(5000);
            while((*P_IOA_Data&0x40)==0)
            {
            	delay(5000);
            }
		}
              
        if((*P_IOA_Data&0x80)==0)			//key_up on clip
        {
        	i=0;
            if(option==1)
            {
            	kkup:
                	if((wavedata[0]==1)&(wavedata[1]==0)&(wavedata[2]==0)&(wavedata[3]==0)&(wavedata[4]==0)&(wavedata[5]==0));
                    else
                    {
                    	wavedata[5]++;
                      	if(wavedata[5]>9){wavedata[4]++;wavedata[5]=0;}
                      	if(wavedata[4]>9){wavedata[3]++;wavedata[4]=0;}
                      	if(wavedata[3]>9){wavedata[2]++;wavedata[3]=0;}
                      	if(wavedata[2]>9){wavedata[1]++;wavedata[2]=0;}
                      	if(wavedata[1]>9){wavedata[0]++;wavedata[1]=0;}
                      	if(wavedata[0]>9){wavedata[0]=0;}
                      	xiebword(40,3,wavedata[0]);   xiebword(48,3,wavedata[1]); xiebword(56,3,wavedata[2]);   xiebword(64,3,wavedata[3]);
                      	xiebword(72,3,wavedata[4]);   xiebword(80,3,wavedata[5]); xiebword(88,3,wavedata[6]);   xiebword(96,3,wavedata[7]);
                      	w_scr();
                      	step_forword();
                    }
			}
            delay(5000);
            while((*P_IOA_Data&0x80)==0)
            {
              	delay(5000);
               	i++; 
               	if(i>20)
               	{
               		i--;
               		goto kkup;
               	}
            }
                  
		}
        if((*P_IOA_Data&0x04)==0)			//key_down on clip
        {
        	i=0;
            if(option==1)
            {
            	kkdown:
                if((wavedata[0]==0)&(wavedata[1]==0)&(wavedata[2]==0)&(wavedata[3]==0)&(wavedata[4]==0)&(wavedata[5]==1));
                else
                {
                	wavedata[5]--;
                    if(wavedata[5]==0xffff){wavedata[4]--;wavedata[5]=9;}
                    if(wavedata[4]==0xffff){wavedata[3]--;wavedata[4]=9;}
                    if(wavedata[3]==0xffff){wavedata[2]--;wavedata[3]=9;}
                    if(wavedata[2]==0xffff){wavedata[1]--;wavedata[2]=9;}
                    if(wavedata[1]==0xffff){wavedata[0]--;wavedata[1]=9;}
                    if(wavedata[0]==0xffff){wavedata[0]=1;}
                    xiebword(40,3,wavedata[0]);   xiebword(48,3,wavedata[1]); xiebword(56,3,wavedata[2]);   xiebword(64,3,wavedata[3]);
                    xiebword(72,3,wavedata[4]);   xiebword(80,3,wavedata[5]); xiebword(88,3,wavedata[6]);   xiebword(96,3,wavedata[7]);
                    w_scr(); 
                    step_backword();
                }
            }  
            delay(5000);
            while((*P_IOA_Data&0x04)==0){delay(5000);i++;if(i>20) {i--;goto kkdown;}}
        }
		if((*P_IOA_Data&0x20)==0)			//key_ok on clip
        {
        	if(option>1)
            {
            	switch(option)
                {
                	case 1: break;
                    case 2:i=1;break;		//关闭正弦波发生
                    case 3: i=3;break;
                }
                delay(5000);
                while((*P_IOA_Data&0x20)==0){delay(5000);}
                goto menu1_1_end;
            }
        }            
        delay(5000);
    }
	menu1_1_end :
  	return i;    
}
//=======================================================================================
//
//=======================================================================================
cpl_menu2(unsigned int i)
{
	switch(i)
    {
    	case 1: cpl(0,5,30,6); break;							//取反按键1
     	case 2: cpl(48,5,79,6);break;
     	case 3: cpl(96,5,127,6); break;
    }
}
//=======================================================================================
//							菜单3
//					正玄波发生器
//				  频率:		10000000Hz
//		           确定       取消
//=======================================================================================
int menu3(void)								//菜单代码  2
{
	unsigned int i,option=1,f_option=1,data[8]={1};			
   	xiezi(16,0,&zheng); xiezi(32,0,&xuan); xiezi(48,0,&bo); xiezi(64,0,&fa);xiezi(80,0,&sheng); xiezi(96,0,&qi);
    xiezi(0,3,&pin); xiezi(16,3,&lv); xieword(32,3,10);    xiebword(40,3,wavedata[0]);   xiebword(48,3,wavedata[1]); xiebword(56,3,wavedata[2]);   
    xiebword(64,3,wavedata[3]);xiebword(72,3,wavedata[4]);   xiebword(80,3,wavedata[5]); xiebword(88,3,wavedata[6]);   xiebword(96,3,wavedata[7]);
    xieword(104,4,11);  xieword(112,4,12);		//Hz
   	xiezi(0+16,5,&ajque); xiezi(16+16,5,&ajding);        xiezi(64,5,&ajqu); xiezi(80,5,&ajxiao);
   	cpl(40,4,47,4);							//取反按键1
   	w_scr();
   	for(i=0;i<8;i++)
    {
    	data[i]=wavedata[i];
    }
   	while(1)									//key event opporation
    {
    	if((*P_IOA_Data&0x02)==0)			//key_relf on clip
        {
        	option--;
            cpl_menu3(f_option);
            if(option==0)
            {
            	option=10;
            }
			f_option=option;
            cpl_menu3(option);    
            w_scr();
            delay(5000);
            while((*P_IOA_Data&0x02)==0)
            {
            	delay(5000);
            }      
        }
        if((*P_IOA_Data&0x40)==0)			//key_right on clip
        {
        	option++;
            cpl_menu3(f_option);
            if(option==11)
            {
            	option=1;
            }
			f_option=option;
            cpl_menu3(option);    
            w_scr();  
            delay(5000);
            while((*P_IOA_Data&0x40)==0)
            {
            	delay(5000);
            }
        }          
        if((*P_IOA_Data&0x80)==0)			//key_up on clip
        {
        	if(option<9)
            {
            	data[option-1]++;
                if(data[option-1]==10)
                	data[option-1]=0;
                if((option-1)==0&data[0]==1)
                {
                	data[0]=1;
                	data[1]=0;
                	data[2]=0;
                	data[3]=0;
                	data[4]=0;
                	data[5]=0;
                	data[6]=0;
                	data[7]=0;
                }
                else data[0]=0;
                xiebword(40,3,data[0]); xiebword(48,3,data[1]); xiebword(56,3,data[2]);   xiebword(64,3,data[3]);xiebword(72,3,data[4]);   xiebword(80,3,data[5]); xiebword(88,3,data[6]);   xiebword(96,3,data[7]);   
                cpl_menu3(option);
                w_scr();  
            }
            delay(5000);
            while((*P_IOA_Data&0x80)==0)
            {
            	delay(5000);
            }
        }         
		if((*P_IOA_Data&0x04)==0)			//key_down on clip
        {
        	if(option<9)
            {
            	data[option-1]--;
                if((option-1)>0)data[0]=0;
                if(data[option-1]==0xffff)
                	data[option-1]=9;
                if(data[0]==9)
                data[0]=1;if(data[0]==1){data[1]=0;data[2]=0;data[3]=0;data[4]=0;data[5]=0;data[6]=0;data[7]=0;}
                xiebword(40,3,data[0]); xiebword(48,3,data[1]); xiebword(56,3,data[2]);   xiebword(64,3,data[3]);xiebword(72,3,data[4]);   xiebword(80,3,data[5]); xiebword(88,3,data[6]);   xiebword(96,3,data[7]);   
                cpl_menu3(option);
                w_scr();  
            }
            w_scr();  
            delay(5000);
            while((*P_IOA_Data&0x04)==0)
            {
            	delay(5000);
            }
        }             
		if((*P_IOA_Data&0x20)==0)			//key_ok on clip
        {
        	delay(5000);
            if(option>8)
            {
            	switch(option)
                {
                	case 9: 
                		for(i=0;i<8;i++)
                        {
                        	wavedata[i]=data[i];
                        }
                        F_FlashErase(0xf000);
                        delay(5000);
                        F_FlashWrite(0xf000,&wavedata, 8);                              
                        i=2;
                        break;
                    case 10:
                   		i=2;
                   		break;
                }
                while((*P_IOA_Data&0x20)==0)
                {
                	delay(5000);
                }
                goto menu3_end;
            }
            while((*P_IOA_Data&0x20)==0)
            {
            	delay(5000);
            }
        }              
       	delay(500);
    }
  	menu3_end :
  		return i;     
}
//=======================================================================================
//
//=======================================================================================
cpl_menu3(unsigned int i)
{
	switch(i)
    {
    	case 1: cpl(40,3,47,4); break;							//取反按键1
     	case 2: cpl(48,3,55,4); break;
     	case 3: cpl(56,3,63,4); break;							//取反按键1
     	case 4: cpl(64,3,71,4); break;
     	case 5: cpl(72,3,79,4); break;							//取反按键1
     	case 6: cpl(80,3,87,4); break;
     	case 7: cpl(88,3,95,4); break;							//取反按键1
     	case 8: cpl(96,3,103,4); break;
     	case 9: cpl(0+16,5,31+16,6);break;
     	case 10: cpl(64,5,95,6);break;
    }
}











⌨️ 快捷键说明

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