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

📄 pt6911chmodelok.c

📁 通过AVR atmega128控制LCD模块显示频率。而且频率把旋转编码器的信号通过采集
💻 C
📖 第 1 页 / 共 5 页
字号:
						if(Switch_in==1)
							m2++;
						if(Switch_in==0)
						m1=10;
						if(m2==10)
						{
							m1=10;
							m0=100;
							MD_Key_Flag=1;
						}
					}
					if(m0==90)
					m0=0;
				}*/

			break;
			}
		case 5:				//SQ
			{
				//Key_Work_Flag=0;
				LED_Flash();
				//Sq_Key_Flag=1;
			break;
			}
		case 6:				//MD+STO
			{
				//Key_Work_Flag=0;
				//MD_STO_Key_Flag=1;
				LED_Flash();
	
			
			break;
			}			

		case 7:					//MD+STO+SQ
			{
				//Key_Work_Flag=0;
				LED_Flash();
				MD_STO_SQ_Key_Flag=1;
				
				Delete_All_Save();
			break;
			}
	}
//	return 0;
}

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

				此程序是显示模式共13种模式,如果有按键MD时候就进入,否则一直循环

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



	
void Save_Fre_data(void)
{
	for(j=0;j<=7;j++)
	{
		//Display_Frequency_Data[i]=Main_Display_Fre[i];		//第一行显示频率
		//LCD_Display(Main_Display_CH,2);		//第二行显示通道	
		Display_Ch_Model_Temp_Fre[j]=Main_Display_Fre[j];
		Display_Ch_Model_Temp_CH[3]=0x20;
		Display_Ch_Model_Temp_CH[j]=Main_Display_CH[j];
	
	}
}
void Display_Ch_Model(void)
//uint16_t sudu_moshi(void)
{
	uint8_t n0=0;

	if(Ch_model_sto_enable==0)
	{
		if(Caiji_shuju_flag==1)
		{

			Read_Eprom_Address(Linshi_eprom_times*32);
			//Display_Ch_Model_Temp_CH[4]=0x43;
			//Display_Ch_Model_Temp_CH[5]=0x48;
			LCD_Display(Display_Ch_Model_Temp_Fre,1);
			LCD_Display(Display_Ch_Model_Temp_CH,2);
			Linshi_eprom_times=Linshi_eprom_times+1;
			if(Linshi_eprom_times>CH_temp_Count_Time)
			Linshi_eprom_times=0;
		}
		if(Caiji_shuju_flag==2)
		{
			
			Read_Eprom_Address((Linshi_eprom_times-1)*32);
			//Display_Ch_Model_Temp_CH[4]=0x43;
			//Display_Ch_Model_Temp_CH[5]=0x48;
			LCD_Display(Display_Ch_Model_Temp_Fre,1);
			LCD_Display(Display_Ch_Model_Temp_CH,2);
			Linshi_eprom_times=Linshi_eprom_times-1;
			if(Linshi_eprom_times==255)
			Linshi_eprom_times=CH_temp_Count_Time;	
		}	
		if(Caiji_shuju_flag==0)
		{
			Read_Eprom_Address(Linshi_eprom_times*32);
			//Display_Ch_Model_Temp_CH[4]=0x43;
			//Display_Ch_Model_Temp_CH[5]=0x48;
			LCD_Display(Display_Ch_Model_Temp_Fre,1);
			LCD_Display(Display_Ch_Model_Temp_CH,2);		
		}	
		Caiji_shuju_flag=0;
	}
	if(Ch_model_sto_enable==1)						//有STO按键按下
	{
		Linshi_eprom_times=0;						//清上面保存临时次数地址
		for(Delay_300ms_flag1=1;Delay_300ms_flag1<=CH_Flash_Times;Delay_300ms_flag1++)
		{
			if(Delay_300ms==1)
			{
			
				Display_Ch_Model_Temp_CH[4]=0x43;
				Display_Ch_Model_Temp_CH[5]=0x48;
				LCD_Display(Display_Ch_Model_Temp_Fre,1);
				LCD_Display(Display_Ch_Model_Temp_CH,2);
			}
		}	
		for(Delay_300ms_flag2=1;Delay_300ms_flag2<=CH_Flash_Times;Delay_300ms_flag2++)
		{
			if(Delay_300ms==1)
			{	
				Display_Ch_Model_Temp_CH[4]=0x20;			//CH Flash.F No Flash.
				Display_Ch_Model_Temp_CH[5]=0x20;					
				LCD_Display(Display_Ch_Model_Temp_Fre,1);
				LCD_Display(Display_Ch_Model_Temp_CH,2);
			}
		}			
		if(Caiji_shuju_flag==1)
		{
			Display_Channel_jisuan();
			
			for(n0=0;n0<=7;n0++)
			{
				Display_Ch_Model_Temp_CH[n0]=Display_Channel_Data[n0];
			}
			Bijiao_Daxiao();
			if(Is_F_Flag==0)
			{
				Display_Ch_Model_Temp_CH[3]=0x46;
				LCD_Display(Display_Ch_Model_Temp_CH,2);
			}
			else
			LCD_Display(Display_Ch_Model_Temp_CH,2);
			Channel_Count++;
			if(Channel_Count>99)
			Channel_Count=0;
		}
		if(Caiji_shuju_flag==2)
		{
			Display_Channel_jisuan();
			for(n0=0;n0<=7;n0++)
			{
				Display_Ch_Model_Temp_CH[n0]=Display_Channel_Data[n0];
			}			
			Bijiao_Daxiao();
			if(Is_F_Flag==0)
			{
				Display_Ch_Model_Temp_CH[3]=0x46;
				LCD_Display(Display_Ch_Model_Temp_CH,2);
			}
			else
			LCD_Display(Display_Ch_Model_Temp_CH,2);
			Channel_Count--;
			if(Channel_Count==0)
			Channel_Count=99;
		}
		if(Caiji_shuju_flag==0)				//没有采集到数据就保持
		{
			//Read_Eprom_Address(Linshi_eprom_times*32);
			LCD_Display(Display_Ch_Model_Temp_Fre,1);
			LCD_Display(Display_Ch_Model_Temp_CH,2);
		}
		Caiji_shuju_flag=0;						//采集数据标志清0
		
		Key=Key_Scan();							//扫描按键如果有STO就保存此刻的显示数据
		if(Key==3)
		{
			Display_Ch_Model_Temp_CH[3]=0x20;
			Display_Ch_Model_Temp_CH[4]=0x43;
			Display_Ch_Model_Temp_CH[5]=0x48;	//这样保证CH保存后可以看到否则有可能不显示CH因为此时CH可能闪动时候不出现
			LCD_Display(Display_Ch_Model_Temp_CH,2);					
			Save_to_EEprom();
			Read_Eprom_Address(0);
			DelayMs(600);
			Channel_Count=0;
			Display_Ch_Model_Flag=1;
			Display_Dir_Model_Flag=0;
			Display_Fre_Model_Flag=0;			
			Ch_model_sto_enable=0;			//在通道模式下有按键按下标志清0
			LCD_Write(0x01,0);
			//break;
			
		}
		if(Key==4)
		{
			//LCD_Display(Display_Ch_Model_Temp_Fre,1);
			//LCD_Display(Display_Ch_Model_Temp_CH,2);
			Display_Ch_Model_Flag=1;
			Display_Dir_Model_Flag=0;
			Display_Fre_Model_Flag=0;
			Ch_model_sto_enable=0;			//在通道模式下有按键按下
			//break;
		}
	}
}

void Display_Dir_Model(void)
{

	if(Freq_Count==0)
	{
		//Main_Display_Fre[3]=0x20;
		LCD_Display(Main_Display_Fre,1);	
		LCD_Display(Display_Channel_Data2,2);
		//Fre_times();
	}
	//LCD_Display(Display_Frequency_Data,1);
////////////////////////////////////////////////	
	//Display_Fre();
	if(Freq_Count>0)
	{
		First_enter_flag=0;
		LCD_Display(Display_Frequency_Data,1);
		LCD_Display(Display_Channel_Data2,2);
	}
	//第二行显示通道
	for(i=0;i<=7;i++)
	{
		//Display_Dir_Model_Temp_Fre[i]=Display_Frequency_Data[i];
		Display_Dir_Model_Temp_Fre[i]=Display_Frequency_Data[i];
		Dir_Frequency_Temp[i]=Display_Frequency_Data[i];
		//Display_Dir_Model_Temp_CH[i]=Display_Channel_Data1[i];
	}

}
void Display_Fre_Model(void)
{
	//if(Fre_x==0)					//第一次进入频率模式显示118.000
	//{
		LCD_Display(Dir_Frequency_Temp,1);	
		LCD_Display(Display_Dir_Model_Temp_Fre,2);
		//Display_Fre();
		for(i=0;i<=7;i++)
		{
			Display_Dir_Model_Temp_Fre[i]=Display_Frequency_Data[i];	
			Main_Display_Fre[i]=Display_Frequency_Data[i];

		}		
}	



void Read_Eprom_Times(void)
{
			for(i=32;i<=3168;i+=32)
			{
				for(j=0;j<=15;j++)
				{
					Temp_Fre_Channel_Place[j]=eeprom_read_word(i+j);
					if(j==2)
					j1=Temp_Fre_Channel_Place[2];
						//记录通道显示次数
					//else
					
				}	
					if(j1!=0xFF)
					{
						CH_temp_Count_Time=i/32+1;
						
					}
					else
					{
						CH_temp_Count_Time=CH_temp_Count_Time-1;
						 break;
					}
			}
}			
/**************************************************************************************

				下面的是中断函数

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


SIGNAL(SIG_OVERFLOW1)
{
	TCNT1H = DELAY100H;
	TCNT1L = DELAY100L; //50ms
	Task_No = 0;
	Second_Count++;
	Delay_300ms=1;
	Fre_No_enbale=1;
	Read_CH_all_Time=1;
	Time_jiesheng_flag=1;
	Caiji_flag=1;
	
	//Display_Channel0()
	//if(Second_Count%2==0)		//Init the Lcd
	//{
		Task_Select=1;
		Task_No = 1;
			Task_In();
		Second_Count=0;
//	//}
	/*if(Second_Count%2 ==0)		//Init the Lcd
	{
		Task_Select=2;
		Task_No = 1;
		Task_In();
		
	}*/

		
		//Second_Count=0;

	/*if(Second_Count<=120)
	{
		if(Second_Count<120)
		{
			Switch_in=PINF;
			Switch_in=Switch_in&0x01;	
			if(Switch_in!=0)
			Second_Count=0;
		}	
		if(Second_Count=120)
		{
			Fre_Flag=1;
			Second_Count=0;
		}
	}*/
	
/*	if(Second_Count >= SECONDS)		//the timer to count 24 hour
	{
		Second_Timer++;
		if(Second_Timer%20==0)
		{
			Second_Timer=1;
			
		}
		if(Second_Timer == 60 )
		{
			Minute_Timer++;
			Second_Over = 1;
			if( Minute_Timer == 60 )
			{
				Hour_Timer++;
				Minute_Over = 1;
				if( Hour_Timer == 24 )
				{
					Hour_Over = 1;
				}
			}
		}
	}*/
	//select the Task number
	
	//select the LCD task number;
	//if(Second_Count % 2 == 0)
	//	Scan_Flag=1;
	//if(Second_Count%2!=0)
	//Scan_Flag=0;

/*	if(Second_Count %20==0)	
	{
		//Key=Key_Scan();
		if(Key==0)
		{
		
			Second_Timer++;
		}
		//Second_Count=0;
		Time_1Minute_Flag=0;
	}

	if(Second_Timer==60)
	{
		Scan_Flag=0;
		Time_1Minute_Flag=1;
		//Second_Count=0;
		//Second_Timer=0;
		PORTE&=!_BV(PE3);
		DelayMs(50);
		PORTE|=_BV(PE3);
		DelayMs(50);
		PORTE&=!_BV(PE3);
		DelayMs(50);
		PORTE|=_BV(PE3);
		DelayMs(50);
	}
//如果1分钟没有按键则返回初始模式20X50=1秒	
if(Second_ms_Count<=20)
	{
		if(Second_ms_Count<20)
		{
			//Key_Scan();
			//if((Key==0)||((Key_Work_Flag==1)&&(Key!=0x17)))	//如果没有按键或者有按键不等于MD
			{
					
				Second_ms_Count++;
			}
			//else 
			//{
			//	Setup_Flag=1;
			//}
		}
		if(Second_ms_Count==20)
		{
			Second_ms_Count=0;
			Second_Timer++;
			
		}
	}	
	if(Second_Timer==60)
	{
		Time_1Minute_Flag=1;
		PORTE&=!_BV(PE3);
		DelayMs(50);
		PORTE|=_BV(PE3);
		DelayMs(50);
		PORTE&=!_BV(PE3);
		DelayMs(50);
		PORTE|=_BV(PE3);
		DelayMs(50);
		Second_Timer=0;
		Second_ms_Count=0;
	}*/
	
	//Task_Lock = 1;		
	//Task lock flag locked after select the Task number to ensure the Task execute.
	//clean the time over flags and the timer

}
int main(void)
{
	Second_ms_Count=0;
	Second_Count =0;
	//Second_Timer =0;
	//Minute_Timer =0;
	//Hour_Timer = 0;
	//Second_Over = 0;
	//Minute_Over = 0;
	//Hour_Over = 0;
	Task_Front = 0;
	Task_Rear = 0;
	Task_No = 0;
	Task_Begin = 0;
	//LCD_Shift_Timer = 0;
	//LCD_State = 1;
	//LCD_Start_Flag = 0;
	Task_Lock = 0;			//0----enable write, 1----enable;
	Turn_Display_Flag=1;
	cli();
	Port_Init();
	LCD_Init();
	//ADC_Init();

	//Display_Frequency_Data[0] = 0x3e;
	//Display_Channel_Data[0] = 0x3e;Temp_Eprom_Place
	//Display_Zibianke();
/********************************************************************
write eeprom

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

/*********************************************************************/	
	//	USART_Init(BAUDRATEH,BAUDRATEL);
	Timerone_Init();
	
	Key=Key_Scan();
	if(Key==6)	//按住STO+MD进入设置状态。
	//if(Key==1)
	{
		for(Count=0;Count<=100;Count++)
		{

			LCD_Write(0x01,0);
			LCD_Display(Display_Blank,2);									
			LCD_Display(Display_FSG90,1);			//时间长了按键有滞后好像按键没有反映。
		//	DelayMs(300);
			LCD_Display(Display_SETUP,1);
			Key=Key_Scan();
		//	DelayMs(300);
			if(Key==4)
			{
				for(j1=0;j1<=100;j1++)
				{
					DelayMs(10);
					Key=Key_Scan();
					DelayMs(10);
					if(Key==0)
					{
						m=1;
						//IN_Setup_State();
						j1=100;
					}	
					if(j1==90)
					j1=0;
				}
				////m1
				//IN_Setup1_State();
				//IN_Setup_State();
			}	
			if(Key==2)
			
			break;

			if(Count==90)
			Count=0;
		}
		//Key=0;
	}
	Read_Eprom_Times();

sei();
/*********************************************************************
		初始化显示频率通道并且可以保存						

************************************************************************/
				Display_Eeprom0_address(0);
////////////////////////////////////////////////////////////////////////	
	while(1)
	{
//		USART_Transmit(Reset_Timer);
		Task_Select = Task_Out();

		Read_Eprom_Times();

		PORTE&=!_BV(PE3);
		switch(Task_Select)
		{
			
			case 1:
			{
	
			//	DelayMs(10);
				Caiji_shuju();
				if(Display_Ch_Model_Flag==1)	//通道模式
				{
					
					Display_Ch_Model();
				}
				
				if(Display_Dir_Model_Flag==1)	//直接模式
				{
					Display_Dir_Model();	
				}
				
				if(Display_Fre_Model_Flag==1)	//双频率

⌨️ 快捷键说明

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