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

📄 pt6911chmodelok.c

📁 通过AVR atmega128控制LCD模块显示频率。而且频率把旋转编码器的信号通过采集
💻 C
📖 第 1 页 / 共 5 页
字号:
						i=100;
						j1=100;
						break;
					}
				}
				if(j1==90)
				j1=0;
			}
		}	
		if(Key==4)
		{
			LCD_Display(Dir_Frequency_Temp,1);	
			LCD_Display(Dir_Frequency_Temp,2);		
			Display_Fre_Model_Flag=1;
			i=100;
			//break;
		}
		if(i==90)
		i=0;
	}
}
/*************************************************************************************************



**************************************************************************************************/

void Key_Handing(uint8_t temp)
{
	/*uint8_t m0=0;
	uint8_t m1=0;
	uint8_t m2;
	uint8_t m3;
	uint8_t m4;
	uint8_t m5;
	uint8_t Count_eeprom=0;
	uint8_t m6;
	uint8_t m7;
	uint8_t m8;
	//uint8_t m5;
//	uint8_t m8;
	uint8_t m9;
	uint8_t m10;
	uint8_t m11;
	uint8_t m12;*/

	switch(temp)
	{
		case 1:		//Set  F/CH
			{	
				PORTE|=_BV(PE3);
			//	LED_Flash();
				/*if(Turn_Display_Flag==2)
				{
					MHZ_model_Flag=1;
					break;
				}
				if(Turn_Display_Flag==3)
				{
					KHZ_model_Flag=1;
					break;
				}	*/			
				/*Freq_Count=0;
				if(Turn_Display_Flag==1)
				{
						for(Max_Eprom_Place=32;Max_Eprom_Place<=3168;Max_Eprom_Place+=32)
						{
							//for(m10=0;m10<=100;m10++)
							//{
								LCD_Write(0x01,0);
								j=0;													//累加器清0
								for(k1=Max_Eprom_Place;k1<=(Max_Eprom_Place+15);k1++)
								{
									eeprom_is_ready();
									eeprom_busy_wait(); 
									Temp_Fre_Channel_Place[j]=eeprom_read_word(k1);
									j++;
								}
									//如果到第一个没有保存数据的空间时候把前面一个的保存的数据继续显示。
								j=0;
								for(i=0;i<=15;i++)
								{
									m8=Temp_Fre_Channel_Place[i];
									if(i==2)
									m9=m8;
									if(m9==0xFF)
									{
										for(k1=Max_Eprom_Place-32;k1<=(Max_Eprom_Place+15);k1++)
										{
											eeprom_is_ready();
											eeprom_busy_wait(); 
											Temp_Fre_Channel_Place[j]=eeprom_read_word(k1);	
											j++;
										}
									}
								}*/	
								
								/*for(i=0;i<=15;i++)
								{
									eeprom_is_ready();								//忙监测
									eeprom_busy_wait(); 							//等待EEPROM 读写就绪
									Read_Fre_Channel[i]=eeprom_read_word(i);
									//Temp_Eprom_Place++;
								}*/	
								/*j=0;
								for(i=0;i<=15;i++)
								{	
									if(i<=7)
									{
										Display_Str2[i]=Temp_Fre_Channel_Place[i];		//显示通道
										if(i==2)
										j1=Display_Str2[i];
									}
									if(i>=8)
									{
										Display_Str0[j]=Temp_Fre_Channel_Place[i];		//显示频率
										if(j==2)
										j2=Display_Str0[j];
										j++;
									}
								}
								if(j1==0xFF)
								{	
									LCD_Display(Display_Frequency_Data1,1);
									LCD_Display(Display_Channel_Data1,2);
								}
								else
								{	
									LCD_Display(Display_Str0,1);		//写第一行第一个
								//	Display_Str2[3]=0x20;
									LCD_Display(Display_Str2,2);		//写第一行第一个
								}								
								if(j1=0xFF)
								m1=32;
								else
								m1=48;

							for(m10=0;m10<=100;m10++)
							{								
								Caiji_shuju();
								Count_add();
								DelayMs(10);
								if(Freq_Count>99)
								Freq_Count=0;								
								if(Freq_Count>0)
								{
								for(Max_Eprom_Place=m1;Max_Eprom_Place<=3168;Max_Eprom_Place+=32)
								{
									
										LCD_Write(0x01,0);
										j=0;													//累加器清0
										for(k1=Max_Eprom_Place;k1<=(Max_Eprom_Place+15);k1++)
										{
											eeprom_is_ready();
											eeprom_busy_wait(); 
											Temp_Fre_Channel_Place[j]=eeprom_read_word(k1);
											if(j==2)
											j1=Temp_Fre_Channel_Place[j];
											j++;
										}
										if(j1==0x0FF)
										{
											Max_Eprom_Place=3168;
											m10=100;
											break;
										}*/
										/*j=0;
										for(i=0;i<=15;i++)
										{	
											if(i<=7)
											{
												Display_Str2[i]=Temp_Fre_Channel_Place[i];		//显示通道
											}
											if(i>=8)
											{
												Display_Str0[j]=Temp_Fre_Channel_Place[i];		//显示频率
												j++;
											}
										}
										LCD_Display(Display_Str0,1);		//写第一行第一个
										//Display_Str2[3]=0x20;
										LCD_Display(Display_Str2,2);		//写第一行第一个
								}
									Max_Eprom_Place=3168;
								}	
								
								
								m7=0;
								for(m6=0;m6<=10;m6++)
								{
									DelayMs(90);
									//Switch_in=PINF;
									//Switch_in=Switch_in&0x03;
									Caiji_shuju();
									if(Switch_in==0x03)						//如果没有按键累加到了就推到主程序
										m7++;
									if(Switch_in!=0x03)
									{
										m6=10;
										m10=100;
									}
									if(m7==10)
									{
										PORTE&=!_BV(PE3);
										m6=10;
										m10=100;
										Max_Eprom_Place=3168;
										
									}
								}	
								
								if(m10==90)
								m10=0;
							}
	
							
							//if(Max_Eprom_Place=3168)
							//Max_Eprom_Place=16;
						}
				}*/
				break;
			}
		
		case 2:				//TRANS
			{
				//LED_Flash();
				
				//PORTE|=_BV(PE3);
				if(Display_Fre_Model_Flag==1)							//如果是在频率模式的时候交换第一第二行
				{
					PORTE|=_BV(PE3);
					Ch_temp_time();
					In_Fre_Frans();
					Display_Ch_Model_Flag=1;
					Display_Dir_Model_Flag=0;
					Display_Fre_Model_Flag=0;
					//Channel_Count=0;
					//if(Fre_y==1)			//关闭第一次进入频率标志。
					//Fre_x=0;					
					//LCD_Display(Jiaohuan_Fre2_hang,1);			//临时显示第一行
					//LCD_Display(Jiaohuan_Fre1_hang,2);			//如果是频率模式按TRANS交换第一第二行
					//DelayMs(2000);
					//Display_Fre_Model_Flag=2;
					//Display_Ch_Model_Flag_Trans=1;
					break;
				}
				/*if(Display_Ch_Model_Flag==1)						//	如果是通道模式按TRANS变到频率模式
				{
					Display_Fre_Model_Flag=1;
					Display_Ch_Model_Flag=0;
				}
				if(Display_Dir_Model_Flag==1)						//如果是直接模式按TRANS变到频率模式
				{
					Display_Fre_Model_Flag=1;
					Display_Dir_Model_Flag=0;
				}*/
////////////////////////////////////////////////////////

///////////////////////////////////////////////////////				
				
				/*if(Turn_Display_Flag==2)
				{
					Trans_Fre_Display();
					Turn_Display_Flag=3;	
				break;
				}
				if(Turn_Display_Flag==1)
				{
					Trans_Fre_Display();
						for(m0=0;m0<=100;m0++)
						{
						
							Key4= PIND;
							Key4 = Key4 & 0x1F; 
							DelayMs(20);
							Key5 = PIND;
							Key5 = Key5 & 0x1F;	
							if((Key4==Key5)&&(Key4==0x1F))
							{
								Turn_Display_Flag=3;
								break;
							}
							if(m0==90)
							m0=0;
						}
					//LCD_Display(Temp_Display_use,1);
					//LCD_Display(Temp_Display_stby,2);
					//Turn_Display_Flag=2;
					break;
				}				
				
				if((MD_Key_Flag==1)&&(Turn_Display_Flag==3))						//如果TRANS按键1行2行呼唤
				{
					LCD_Display(Display_Frequency_Data,1);		//不增加这初始化的地址数据显示会一直按FRANS按键假患
					for(i=0;i<=15;i++)							//交换后第二行是118.000,此时是最后保存的那个地址数据
					{
						eeprom_is_ready();							
						eeprom_busy_wait(); 							
						Read_Fre_Channel[i]=eeprom_read_word(i);
						//Temp_Eprom_Place++;
					}	
					j=0;
					for(i=0;i<=15;i++)
					{	
						if(i>=8)
						{
							Display_Str0[j]=Read_Fre_Channel[i];	
							Temp_Display_Fre[j]=Display_Str0[j];
							j++;
						}
					}
					j=0;
					j1=Display_Str0[j];
					if(j1==0xFF)
					LCD_Display(Display_Frequency_Data1,2);
					else
					LCD_Display(Display_Str0,2);				
					
					for(m3=0;m3<=100;m3++)
					{
						m4=Key_Scan();
						if(m4==4)
						{
							LCD_Write(0x01,0);
							DelayMs(20);
							LCD_Display(Display_Frequency_Data,1);
							Display_Channel_Data[3] = 0x20;
							LCD_Display(Display_Channel_Data,2);			//最开始的通道数目
							for(m5=0;m5<=100;m5++)
							{
								m7=0;										//如果在循环里面有按键退出了累加器要付初值
								Display_Channel();
								//DelayMs(5);
								LCD_Display(Display_Channel_Data,2);		//采集的通道数目
								for(m6=0;m6<=100;m6++)
								{
									DelayMs(20);
									Caiji_shuju();
									if(Switch_in==0x03)						//如果没有按键累加到了就推到主程序
										m7++;
									if(Switch_in!=0x03)
										m6=100;
									if(m7==100)
									{
										PORTE&=!_BV(PE3);
										m6=100;
										m5=100;
										m3=100;
										MD_Key_Flag=2;
									}
								}
								if(m5==90)
								m5=0;
							
							}
						}
						if(m3==90)
						m3=0;
					}
				}*/
				break;
			}
		case 3:				//STO
			{
			
		
			//	LED_Flash();
				if(Display_Ch_Model_Flag==1)
				{
					Key=0;
					LCD_Display(Display_Ch_Model_Temp_Fre,1);
					LCD_Display(Display_Ch_Model_Temp_CH,2);
					Ch_model_sto_enable=1;
					Read_temp_CH_time();			//读当前通道数对应数目
					LCD_Write(0x01,0);
					Display_Ch_Model_Flag=1;
					Display_Dir_Model_Flag=0;
					Display_Fre_Model_Flag=0;
					break;
				}
				if(Display_Dir_Model_Flag==1)				//保证退出保存是通道模式Key=Key_Scan();
				{	
					Key=0;
					Key=Key_Scan();
					if(Key==0)
					{
						LCD_Write(0x01,0);
						LCD_Display(Display_Dir_Model_Temp_Fre,1);
						Display_Ch_Model_Temp_CH[3]=0x20;
						LCD_Display(Display_Ch_Model_Temp_CH,2);
					
						Ch_temp_time();			//记录通道次数
						//Dir_model_sto_enable=1;
						Turn_Display_Dir_Flash();
						//Display_Ch_Model_Flag=0;
						Display_Dir_Model_Flag=0;			
						Display_Fre_Model_Flag=0;
						//////////////////////////////////////////	
						Display_Ch_Model_Flag=1;
						/////////////////////////////////////
						//Channel_Count=0;
						Display_Eeprom0_address(0);
						LCD_Write(0x01,0);
					}
					break;	
				//Display_Channel_Yunsuan();
				
				}
				if(Display_Fre_Model_Flag==1)						//保证退出保存是通道模式
				{
					Key=0;
					LCD_Display(Jiaohuan_Fre2_hang,1);
					LCD_Display(Jiaohuan_Fre1_hang,2);
					Ch_temp_time();
					Turn_Display_Fre_Flash();
					Display_Dir_Model_Flag=0;
					Display_Fre_Model_Flag=0;
					Display_Ch_Model_Flag=1;
					//Channel_Count=0;
					Display_Eeprom0_address(0);
					LCD_Write(0x01,0);	
					break;	
				}
///////////////////////////////////////////////////////////////
				/*if((Display_Ch_Model_Flag==1)||(Display_Dir_Model_Flag==1)||(Display_Fre_Model_Flag==1))
				{
					
					
					if(Display_Ch_Model_Flag==1)
					{
						Max_Eprom_Place=Display_Ch_Model_Temp_Adress;
					}			
					//如果1-4没有保存数据就不是自由通道所以F不闪CH闪,若果是5个eeprom的数据保存那么F闪动
					for(Max_Eprom_Place=32;Max_Eprom_Place<=160;Max_Eprom_Place+=32)
					{
						j=0;													//累加器清0
						for(k1=Max_Eprom_Place;k1<=(Max_Eprom_Place+15);k1++)
						{
							eeprom_is_ready();
							eeprom_busy_wait(); 
							Temp_Fre_Channel_Place[j]=eeprom_read_word(Max_Eprom_Place);
							if(j==2)
							{
								j1=Temp_Fre_Channel_Place[j];
								break;
							}
							j++;
						}	
						if(j1!=0xFF)
						Count_eeprom++;
						else 
						{
							Count_eeprom++;
							break;
						}
					}										
					if(Count_eeprom<=4)
					{
						Display_Channel_Data[3] = 0x46;
						LCD_Display(Display_Channel_Data,2);
						DelayMs(300);
						for(i=0;i<=1;i++)
						{
							//DelayMs(500);
							Display_Channel_Data[4]=0x20;
							Display_Channel_Data[5]=0x20;
							LCD_Display(Display_Channel_Data,2);
							DelayMs(300);
							Display_Channel_Data[4]=0x43;
							Display_Channel_Data[5]=0x48;					
							LCD_Display(Display_Channel_Data,2);
							DelayMs(300);
						}
					}
					else
					{
						//Display_Channel_Data[3] = 0x46;
						LCD_Display(Display_Channel_Data,2);
						DelayMs(300);
						for(i=0;i<=1;i++)
						{
							//DelayMs(500);
							Display_Channel_Data[3]=0x20;
							LCD_Display(Display_Channel_Data,2);
							DelayMs(300);
							Display_Channel_Data[3]=0x46;
							LCD_Display(Display_Channel_Data,2);
							DelayMs(300);
						}					
					}
					LCD_Display(Display_Channel_Data,2);
					if(Display_Ch_Model_Flag==1)
					Save_Channel_Model();
					if(Display_Dir_Model_Flag==1)
					Save_Dir_Model();
					if(Display_Fre_Model_Flag==1)
					{
						  	//频率通道调整适合保存
						Save_Fre_Model();		//此时保存的的数字实际是以前已经保存的的数据只是把频率覆盖了通道不变
					}			
					Save_to_EEprom();
					PORTE|=_BV(PE3);
				}*/
			break;
			}
		case 4:				//MD
			{
				//Key_Work_Flag=0;
				//LED_Flash();
				//增加按键弹起保证按键不会重复,不然可能按键采集2-3次可以跳过某个模式了。
/***************************************************************

			进入模式3第一行显示频率第二行显示空格
****************************************************************/

				if(Display_Ch_Model_Flag==1)		
				{
					Display_Ch_Model_Flag=0;		//	关闭通道模式
					Display_Fre_Model_Flag=0;
					Display_Dir_Model_Flag=1;
					LCD_Write(0x01,0);
					break;
				}
				if(Display_Dir_Model_Flag==1)
				{
					Display_Ch_Model_Flag=0;
					Display_Dir_Model_Flag=0;			//打开直接模式
					Display_Fre_Model_Flag=1;
					LCD_Write(0x01,0);
					break;
				}	
				if(Display_Fre_Model_Flag==1)
				{
					Display_Dir_Model_Flag=0;
					Display_Fre_Model_Flag=0;
					Display_Ch_Model_Flag=1;
					LCD_Write(0x01,0);
					break;
				}
				
/*************************************************************************

		再显示一次,为第二次和以后的FRANS按键工作1和2行调换找到第一行呼唤的证据
		实际就是把保留到EEPROM的数据重新显示了一次,不然每次按FRANS时候都显示118.000	
*************************************************************************/
				/*for(m0=0;m0<=100;m0++)
				{
					m2=0;
					//Display_Change();
					Display_Fre();
					DelayMs(20);
					LCD_Display(Display_Frequency_Data,2);
					for(m1=0;m1<=10;m1++)
					{
						DelayMs(40);
						Switch_in=PINF;
						Switch_in=Switch_in&0x01;

⌨️ 快捷键说明

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