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

📄 ss_sweep.c

📁 在采用 320x240 屏的设计实验箱上运行
💻 C
📖 第 1 页 / 共 3 页
字号:
        		SetCMD(mod&0x01);
        		refresh_led();
		break;
        case Screen:	
		        if(key_pressed==ON)
        		{
        		switch(key_no)
        		{
        			case key_enter: MainSM=Setup;
							//SetPhase(Freq);
        					break;
        			case key_clr:	MainSM=FreqScan;
        					FreqS=Freq;
							set_up(2);
							show_fre(4);
							sweep_amp(0);//扫频
        					break;
        			case key_mod: SetCMD((++mod)&0x01);//SetCMD((++mod)&0x01)
        				      display_mod((mod)&0x01);//display_mod((mod)&0x01)
        				      refresh_led();
        					break;
					case key_tiao: MainSM=TiaoFu;
							SetCMD(2);
        	    			sweep_amp(1);
					        break;
        			default:  break;      	        		
        		}
        	       	key_pressed=OFF;
        		}
        	break;
        case FreqScan:	//扫频输出状态
                //Set_Display_Add(384);
        		//printf("Scan Frequence");
        		//sweep_amp(0);//扫频
        	    switch(SetFSM)//进入扫频状态的设置
        			{
					   case  enter_num://扫频初始状态,并LCD显示不同的内容
                                    if(aa==0){//设置扫频频率的最小值
									   //cls();
                                       //Set_Display_Add(512);
        		                       //printf("min:"); 
    								   last_line(1); 
                                    }
                                    if(aa==1){//设置扫频频率的最大值
                                       //Set_Display_Add(640);
        		                       //printf("max:"); 
									   last_line(2);     
                                    }
                                    if(aa==2){//设置扫频频率的步长或者对数增长的系数
                                       //Set_Display_Add(768);
									   if(bb==0){
									   last_line(3); 
        		                       }
         							   if(bb==1){
         							   last_line(4); 
									   }
                                    }
        							value_index=0;
        							SetFSM=wait_key;
        							break;
        				case  wait_key:		//处理键盘输入
                    		  if(key_pressed==ON)
        							{  
        							switch(key_no)
        								{
        								case key0:
        								case key1: 
        								case key2: 
        								case key3: 
        								case key4: 
        								case key5:
        								case key6:
        								case key7:
        								case key8:
        								case key9:
        									if(value_index<5)
        									{
        									value[value_index]=key_no;
        									value_index++;
        									}	
        									break;
        								case key_enter://每按一下setup,aa加1,以进行不同的处理
                                             aa=(aa+1)%4;         
                                             SetFSM=exit_setup;
        									break;
										case key_xuan1://选择模式2,对数模式
										     bb=1;
                                             //Set_Display_Add(480);
											 //printf("mod 2");
											 log_lin(0);
											 delayMs(100);
											 SetFSM=enter_num;
											 break;
										case key_xuan2://选择模式1,线性模式
										     bb=0;
											 //Set_Display_Add(480);
											 //printf("mod 1");
											 log_lin(1);
											 delayMs(100);
											 SetFSM=enter_num;
											 break;
        							
        								default:  break;      	        		
        								}
                                    refresh_led();
        	       					key_pressed=OFF;
									}      							
        							break;
        				case  exit_setup:	Freq_temp=value[0];
        							Freq=Freq_temp*10000;
        							Freq_temp=value[1];
        							Freq=Freq+Freq_temp*1000;
        							Freq_temp=value[2];
        							Freq=Freq+Freq_temp*100;
        							Freq_temp=value[3];
        							Freq=Freq+Freq_temp*10;
        							Freq=Freq+value[4];
                                    if(aa==1) {//设置并显示最小频率
                                               minF=Freq;
                                     /*          Set_Display_Add(576);
        							           putchar(value[0]+0x30);
        						    	       putchar(value[1]+0x30);
        							           putchar(value[2]+0x30);
        							           putchar(value[3]+0x30);
        							           putchar(value[4]+0x30);*/
        							           show_fre(1);
        							           refresh_led();
                                               SetFSM=enter_num;
                                    }
                                    if(aa==2) {//设置并显示最大频率
                                               maxF=Freq;
                                    /*           Set_Display_Add(704);
        							           putchar(value[0]+0x30);
        						    	       putchar(value[1]+0x30);
        							           putchar(value[2]+0x30);
        							           putchar(value[3]+0x30);
        							           putchar(value[4]+0x30);*/
        							           show_fre(2);
        							           refresh_led();
                                               SetFSM=enter_num;
                                    }
                                    if(aa==3) {//设置并显示步长或者系数
                                              step=Freq;
                                     /*         Set_Display_Add(832);
        							           putchar(value[0]+0x30);
        						    	       putchar(value[1]+0x30);
        							           putchar(value[2]+0x30);
        							           putchar(value[3]+0x30);
        							           putchar(value[4]+0x30);*/
        							           show_fre(3);
        							           refresh_led();
                                              SetFSM=scan_start;
                                    }
        							break;
                       case scan_start: 
                                  delayMs(10);//延时函数,每隔100ms频率改变一次
                                  if(FreqS>maxF) FreqS=minF;//设置扫频的最小值	
        		                  SetPhase(FreqS&0x7fff);	//设置频率,以模32k循环
								  if(bb==0){
        		                  FreqS+=step;
								  //Set_Display_Add(480);
								  //printf("mod 1");
								  log_lin(1);//线性模式
								  }		//频率步进step,linear freq change
								  if(bb==1){
								  FreqS=(FreqS+1)*step/100;
								  //Set_Display_Add(480);
								  //printf("mod 2");
								  log_lin(0);//对数模式
								  }//频率对数变化
        	 	                  if(key_pressed==ON){
        		                      switch(key_no){
        			                    case key_enter: MainSM=Setup;//结束扫频,进入正常波形的设置状态
        			                                	sweep_amp(2);
   													    log_lin(2);
														last_line(0);
														SetCMD((++mod)&0x00);//模波形式设置,在本实验中实际上没有用处
        				                              	display_mod((mod)&0x00);
														// cls();
        					            				break;
        			                    case key_mod: 	MainSM=Start;
														sweep_amp(2);
   													    log_lin(2);
														last_line(0);
														//SetCMD((++mod)&0x00);//模波形式设置,在本实验中实际上没有用处
        				                              	display_mod((mod)&0x01);
        				                              	//refresh_led();
        					            				break;
										
        			                    default:  SetFSM=scan_start;      	        		
        		                      }
        	       	                  key_pressed=OFF;
        		                  }
              	                  break;
                     }
            break;
        ////////////////////////////////////////////////////////////////////////
        case Setup:	 
		       // cls();
		        /*Set_Display_Add(428);
        		printf("SETUP");*/
				set_up(0);//设置
				SetFSM=0;
				aa=0;
        			switch(SetupSM)
        			{
        				case  enter_num:	value[0]=0;
        							value[1]=0;
        							value[2]=0;
        							value[3]=0;
        							value[4]=0;
        				/*			Set_Display_Add(560);
        							putchar(value[0]+0x30);
        							putchar(value[1]+0x30);
        							putchar(value[2]+0x30);
        							putchar(value[3]+0x30);
        							putchar(value[4]+0x30);*/
        							show_fre(0);
        							value_index=0;
        							SetupSM=wait_key;
        							break;
        				case  wait_key:		if(key_pressed==ON)
        							{
        							switch(key_no)
        								{
        								case key0:
        								case key1: 
        								case key2: 
        								case key3: 
        								case key4: 
        								case key5:
        								case key6:
        								case key7:
        								case key8:
        								case key9:
        									if(value_index<5)
        									{
        									value[value_index]=key_no;
        									value_index++;
        									}
        									
        									break;
        								case key_enter:SetupSM=exit_setup;
        									break;
        								case key_mod: SetCMD((++mod)&0x03);
        									      display_mod((mod)&0x03);
        									      refresh_led();
        									break;
        								default:  break;      	        		
        								}
        					/*		Set_Display_Add(560);
        							putchar(value[0]+0x30);
        							putchar(value[1]+0x30);
        							putchar(value[2]+0x30);
        							putchar(value[3]+0x30);
        							putchar(value[4]+0x30);*/
        							show_fre(0);
        							refresh_led();
        	       						key_pressed=OFF;
        							}
        							       							
        							break;
        				case  exit_setup:	Freq_temp=value[0];
        							Freq=Freq_temp*10000;
        							Freq_temp=value[1];
        							Freq=Freq+Freq_temp*1000;
        							Freq_temp=value[2];
        							Freq=Freq+Freq_temp*100;
        							Freq_temp=value[3];
        							Freq=Freq+Freq_temp*10;
        							Freq=Freq+value[4];
        							SetPhase(Freq);
        					/*		Set_Display_Add(560);
        							putchar(value[0]+0x30);
        							putchar(value[1]+0x30);
        							putchar(value[2]+0x30);
        							putchar(value[3]+0x30);
        							putchar(value[4]+0x30);*/
        							show_fre(0);
        							refresh_led();
        					/*		Set_Display_Add(428);
        							printf("     ");*/
									set_up(1);
        							refresh_led();
        							SetupSM=enter_num;
        							MainSM=Screen;
        							break;
        			}
              	break;
////////////////////////////////////////////////////////////
       case TiaoFu:	 //调幅状态
				//SetCMD(2);
        	    //sweep_amp(1);
				aa=0;
				SetFSM=0;
				set_up(0);
        			switch(SetupSM)
        			{
        				case  enter_num:	value[0]=0;//调制波频率初始值为前一个状态所设置的值
        							value[1]=0;
        							value[2]=0;
        							value[3]=0;
        							value[4]=0;
        					/*		Set_Display_Add(560);
        							putchar(value[0]+0x30);
        							putchar(value[1]+0x30);
        							putchar(value[2]+0x30);
        							putchar(value[3]+0x30);
        							putchar(value[4]+0x30);*/
        							show_fre(0);
        							value_index=0;
        							SetupSM=wait_key;
        							break;
        				case  wait_key:
								set_up(0);
					  		if(key_pressed==ON)//提取按键值,进行状态的处理
        							{
        							switch(key_no)
        								{
        								case key0:
        								case key1: 
        								case key2: 
        								case key3: 
        								case key4: 
        								case key5:
        								case key6:
        								case key7:
        								case key8:
        								case key9:
        									if(value_index<5)
        									{
        									value[value_index]=key_no;
        									value_index++;
        									}
        									
        									break;
        								case key_enter:SetupSM=exit_setup;//按下setup,进行载波调制波频率的设置
        									set_up(1);
											break;
										case key_tiao: //若再按下调幅键,则进入DDS的最初状态,即screen状态,可以进行正常频率的设置
                                               SetupSM=enter_num;
        							           MainSM=Screen;
        							           SetCMD(0);
                                               display_mod(0);
											   sweep_amp(2);
											   refresh_led();
											   show_fre(0);
											 break;
										case key_mod:	//若按下模式键则退出到最初状态
												SetupSM=enter_num;
        							           	MainSM=Screen;
        							           	SetCMD(0);
                                               	display_mod(0);
											   	sweep_amp(2);
											   	refresh_led();
											   	show_fre(0);
												break;
        								default:  break;      	        		
        								}
        						/*	Set_Display_Add(560);
        							putchar(value[0]+0x30);
        							putchar(value[1]+0x30);
        							putchar(value[2]+0x30);
        							putchar(value[3]+0x30);
        							putchar(value[4]+0x30);*/
        							show_fre(0);
        							refresh_led();
        	       						key_pressed=OFF;
        							}
        							       							
        							break;
        				case  exit_setup:	Freq_temp=value[0];
        							Freq=Freq_temp*10000;
        							Freq_temp=value[1];
        							Freq=Freq+Freq_temp*1000;
        							Freq_temp=value[2];
        							Freq=Freq+Freq_temp*100;
        							Freq_temp=value[3];
        							Freq=Freq+Freq_temp*10;
        							Freq=Freq+value[4];
        							SetPhase(Freq);//设置调制波频率
        						/*	Set_Display_Add(560);
        							putchar(value[0]+0x30);
        							putchar(value[1]+0x30);
        							putchar(value[2]+0x30);
        							putchar(value[3]+0x30);
        							putchar(value[4]+0x30);*/
        							show_fre(0);
        							refresh_led();
        						/*	Set_Display_Add(428);
        							printf("     ");*/
									set_up(1);
        							refresh_led();
        							//SetupSM=enter_num;
									SetupSM=wait_key;
        							//MainSM=TiaoFu;
									//MainSM=Screen;
									//sweep_amp(2);
									value_index=0;

        							break;
        			}
              	break;
////////////////////////////////////////////////////////////
        default:
        	break;
        }
        
        
        
        }          //等待中断
}

void interrupt_handle() interrupt 0	
{ 						
        //uchar disdata;
        DISABLE;                //CPU关中断
        wait();			//键盘消抖延时
	if (Int_wire==0)
	{
	key_pressed=ON;
	P2=0xFF;
        key_no=P2&0x0F;        //读取P2口的低四位显示数据编码	
        }          
        ENABLE;                   //CPU开中断
}

⌨️ 快捷键说明

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