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

📄 pt6911chmodelok.c

📁 通过AVR atmega128控制LCD模块显示频率。而且频率把旋转编码器的信号通过采集
💻 C
📖 第 1 页 / 共 5 页
字号:
//Target : atmega128
//crystal:11.0592MHZ
//#define F_CPU 11059200UL
#include <inttypes.h>
#include <string.h>
//#include <avr/signal.h>			//2005
#include <avr/interrupt.h>		//2006

//#include <avr/delay.h>			//2005
#include <util/delay.h>		//2006
//#include <avr/wdt.h>
#include <avr/io.h>
#include <avr/sfr_defs.h>
#include <avr/eeprom.h>
#include <avr/pgmspace.h>

#define TRUE  1
#define FALSE 0

/******************timerone***********************/
#define EN_TIMERONE_INT  (TIMSK = _BV(TOIE1))
#define DIS_TIMERONE (TCCR1B = (TCCR1B & 0xf8))
#define EN_TIMERONE  (TCCR1B = (TCCR1B | 0x03))
//#define DELAY100H    0xDE			//50ms
//#define DELAY100L    0xCF
//#define DELAY100H    0xF5			//15ms
//#define DELAY100L    0xE0
#define DELAY100H    0xFF			//1ms
#define DELAY100L    0xA9
/******************count clock*******************/
//#define ONE_MINUTES	60
#define SECONDS	20
//#define ONE_HOURS	24

/******************Usart init*******************/
#define BAUDRATEH 0X00	//9600
#define BAUDRATEL 0X19

/******************port init*******************/
#define SB_RW PORTG |= (1<<PG0)
#define CB_RW PORTG &= ~(1<<PG0)
#define SB_RS PORTC |= (1<<PC5)
#define CB_RS PORTC &= ~(1<<PC5)
#define SB_E PORTC |= (1<<PC7)
#define CB_E PORTC &= ~(1<<PC7)
uint16_t Max_Eprom_Place;
uint16_t Temp_Eprom_Place;
uint8_t z0;
uint8_t z1;
uint8_t z2;
uint8_t Caiji_shuju_flag=0;
uint8_t Read_CH_all_Time=0;
uint8_t yanshi_sishu=0;
uint8_t bits;
uint8_t Bjiao_add=0;
//uint8_t m10;
uint8_t m=1;
uint16_t Bijiao_Times=0;
uint8_t Is_F_Flag=0;
uint8_t Jiaohuan_flag=0;
uint8_t Time_jiesheng_flag=0;
uint8_t max_flag=0;
uint8_t First_CH_caiji_flag;
uint8_t Linshi_eprom_times=0;
uint8_t Ch_model_sto_enable=0;
uint8_t Dir_model_sto_enable=0;
uint8_t Ba;
uint8_t	Bb;
uint8_t	Bc=1;
uint8_t p;
uint8_t Caiji_flag=0;
uint16_t Delay_300ms_flag1=0;
uint16_t Delay_300ms_flag2=0;
uint8_t Key4;
uint8_t Key5;
uint8_t j,k;
uint8_t m0,m1,m2;
uint8_t i1,j1,j2,k1;
uint8_t First_In_ch_model=0;
uint8_t Second_ms_Count;
//uint8_t	Tatal;
uint8_t Count1;
uint8_t Second_Count1;
uint8_t Second_Count;
//uint8_t Second_Timer;
//uint8_t Minute_Timer;
//uint8_t Hour_Timer;
//uint8_t Second_Over;
//uint8_t Minute_Over;
//uint8_t Hour_Over;
//uint8_t Fre_x=0;
//uint8_t Fre_y=0;
//uint8_t	ge0;
uint8_t Task_No;
uint8_t Task_Lock;
uint8_t Task_Select;
uint8_t Task_Begin;
//uint8_t PORT_Temp;
uint8_t Iint_Count;
//uint8_t Display_Check;
uint8_t LCD_State;
//uint8_t Fre_Flag=0;
uint8_t Channel_Temp_Count=0;
uint8_t Eprom_All_Times=1;
uint8_t Eprom_temp_Times=0;
uint16_t i;
//uint16_t LCD_Start_Flag;
//uint8_t LCD_Shift_Flag;
uint16_t Freq_Count0=0;
//uint8_t LCD_Shift_Timer;
//uint16_t AD_Result;

//uint8_t AD_ResultH,AD_ResultL;
uint8_t Ch_Count_Time=0;
uint8_t Task_Buff[20];
uint8_t Task_Lock;
uint8_t Task_Front,Task_Rear;
uint16_t Max_Eprom_Place1=32;
uint16_t Check_Timer;
uint8_t Fre_display_flag=0;
uint8_t Setup_Flag=0;
uint8_t Turn_Display_Flag=1;
uint8_t Key_Flag=0;
uint8_t Key_Work_Flag=0;
uint8_t Setup_Enable_Flag=0;
uint8_t Setup_Diable_Flag=0;
uint8_t Time_1Minute_Flag=0;
uint8_t Fch_Key_Flag=0;
uint8_t Trans_Key_Flag=0;
uint8_t STO_Key_Flag=0;
uint8_t MD_Key_Flag=0;
uint8_t Sq_Key_Flag=0;
uint8_t	Direct_Flag=1;
uint8_t MD_STO_Key_Flag=0;
uint8_t MD_STO_SQ_Key_Flag=0;
uint8_t  CH_temp_Count_Time=0;
uint8_t Fre_No_enbale=0;
uint8_t Display_Dir_Model_Flag;
uint8_t First_in_Dir_Model_Flag=0;
uint8_t MHZ_model_Flag=0;
uint8_t KHZ_model_Flag=0;
uint8_t MD_Set_Count=0;
uint8_t CH_Flash_Times=10;				//CH 闪动。
uint8_t Wait_Save_Flag=0;
uint8_t First_enter_flag=1;
uint8_t Display_eeprom0_Flag=1;
uint8_t Display_Ch_Model_Flag=1;
uint8_t Display_Dir_Model_Flag=0;
uint8_t Display_Fre_Model_Flag=0;
uint8_t First_in_Fre_Model_Flag=0;
uint8_t Display_Fre_Model_Flag_Trans=0;
uint16_t Delay_300ms=0;
uint16_t Display_Ch_Model_Temp_Adress;
uint16_t  Count=0;
uint16_t  Temp_Count=0;
uint16_t  Freq_Count=0;
uint8_t  CH_temp_Count=0;
uint16_t Channel_Count=0;
uint8_t  Switch_in1;
uint8_t  Switch_in2;
uint8_t  Switch_in;
uint8_t  Switch_Enable;
uint8_t  Model1_Count=1;
uint8_t Scan_Flag=1;
uint8_t	Freq_Count25_833=0;
uint8_t  Switch_in=0;
uint8_t  Switch_No=0;
//uint8_t n0,n1,n2,n4,n3,n5;
uint8_t d1;
uint8_t  d;
uint16_t Fre_Ch_Enable;
uint16_t Fre_Ch_Enable_old;
unsigned char Display_Frequency_Count[8];
unsigned char Dir_Frequency_Temp[8];
unsigned char Display_Channel_Temp_Count[8];
unsigned char Jiaohuan_Fre2_hang[8];
unsigned char Jiaohuan_Fre1_hang[8];
unsigned char Display_Ch_Model_Temp_CH[8];
unsigned char Display_Ch_Model_Temp_Fre[8];
unsigned char Display_Dir_Model_Temp_CH[8];
unsigned char Display_Dir_Model_Temp_Fre[8];
unsigned char Display_Fre_Model_Temp_CH[8];
unsigned char Display_Fre_Model_Temp_Fre[8];
unsigned char Display_Fre_Model_Temp_Fre2[8];
unsigned char Display_Fre_Model_Temp_Fre1[8];
unsigned char Wait_Save_Fre1[8];
//unsigned char Display_Fre_Model_Temp_Fre1_2[8];
unsigned char Save_Fre_Channel[16];
unsigned char Read_Fre_Channel[16];
unsigned char Temp_Fre_Channel_Place[16];
unsigned char Display_Read[8];
unsigned char Display_Str1[8];
unsigned char Display_Str2[8];
unsigned char Display_Str0[8];

unsigned char Main_Display_Fre[8];
unsigned char Main_Display_CH[8];
unsigned char Temp_Display_Fre[8];
unsigned char Temp_Display_stby[8];
unsigned char Temp_Display_use [8];
unsigned char Display_Frequency_Data[8]={" 118.000"};
unsigned char Display_Frequency_Data1[8]={" 118.000"};
unsigned char Display_Channel_Data[8]=  {"    CH01"};
unsigned char Display_Channel_Data1[8]= {"    CH01"};
unsigned char Display_Channel_Data3[8]= {"   CH   "};
unsigned char Display_Channel_Data2[8]= {"        "};
unsigned char Display_FSG90[8]={"   FSG90"};
unsigned char Display_SETUP[8]={"   SETUP"};//unsigned char Key;
unsigned char Display_SQUEL[8]={"   SQUEL"};
unsigned char Display_SQUEL1[8]={"Y  SQUEL"};
unsigned char Display_HENG5[8]={"   -----"};
unsigned char Display_LO   [8]={"   LO   "};
unsigned char Display_MED1 [8]={"   MED1 "};
unsigned char Display_MED2 [8]={"   MED2 "};
unsigned char Display_HI   [8]={"   HI   "};
unsigned char Display_SIDE [8]={"   SIDE "};
unsigned char Display_HENG3[8]={"   ---  "};
unsigned char Display_HENG4[8]={"   ---- "};
unsigned char Display_SET  [8]={"   SET  "};
unsigned char Display_25KHZ[8]={"   25   "};
unsigned char Display_833MH[8]={"   8.33 "};
unsigned char Display_CLR05[8]={"   CLR05"};
unsigned char Display_CH05 [8]={"   CH 05"};
unsigned char Display_FREE [8]={"   FREE "};
unsigned char Display_AF_E [8]={"   AF-E "};
unsigned char Display_0    [8]={"   0    "};
unsigned char Display_1    [8]={"   1    "};
unsigned char Display_BLOC [8]={"   BLOC "};
unsigned char Display_SERV [8]={"   SERV "};
unsigned char Display_OPT1 [8]={"   OPT1 "};
unsigned char Display_PASS [8]={"   PASS "};
unsigned char Display_RESET[8]={"   RESET"};
unsigned char Display_Blank[8]={"        "};
unsigned char Display_MICRO[8]={"   MICRO"};
unsigned char Display_INTCO[8]={"   INTCO"};
unsigned char Display_PHONE[8]={"   PHONE"};
unsigned char Display_FREQ [8]={"   FREQ "};
unsigned char Display_OPTI [8]={"   OPTI "};
unsigned char Display_50   [8]={"   00000"};
//unsigned char Display_Zibian_Data[8]={0x04,0x1F,0x1F,0x0E,0x04,0x0E,0x00};
unsigned char Key;
unsigned char Key1;
//unsigned char str[4]={"LO","MED1","MED2","HI" };
void DelayMs(unsigned int t)				//1ms
{
	unsigned int i;
	for(i=0;i<t;i++)
	{
		_delay_loop_2(2765);			
	}
}
static void Timerone_Init(void)
{
	TCCR1A = 0;
	TCCR1B = _BV(CS11)|_BV(CS10);
	SFIOR = _BV(PSR321);
	TIFR = _BV(TOV1);
	TCNT1H = DELAY100H;
	TCNT1L = DELAY100L; //50ms
	TIMSK  = _BV(TOIE1);
}

void Port_Init(void)
{
	DDRA = 0xFF;
	PORTA = 0x00;
	
	DDRB = (1<<DDB3)|(1<<DDB2);
	PORTB = 0x00;
	
	DDRC = 0xFF;
	PORTC = (1<<PD7)|(1<<PD5);
	
	DDRG = (1<<DDG0);
	PORTG = 0x00;
	
	DDRE = 0xFF;
	PORTE=0xFF;
	//DDRF = (1<<DDF4)|(1<<DDF3)|(1<<DDF2); 
	
	PORTF =0xFF;
}
/*void ADC_Init(void)
{
	ACSR = (1<<ACD);
	ADMUX = (1<<REFS0);
	ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADPS1)|(1<<ADPS2);
}
void ADC_Sample(void)
{
	AD_ResultL = ADCL;
	AD_ResultH = ADCH;
	AD_Result = AD_ResultH;
	AD_Result = AD_Result << 8;
	AD_Result = AD_Result + AD_ResultL;
}
void USART_Init( uint8_t BAUDH,uint8_t BAUDL )
{
	UBRR0L = BAUDL;
	UBRR0H = BAUDH;
	UCSR0B = (1<<TXEN);
//	UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
	UCSR0C = 0x86;
}*/

void LCD_Com(uint8_t Command)
{
	uint8_t i=0;
	CB_RS;
	CB_RW;
	SB_E;
	PORTA = Command;	
	while(i<6)
	{
		i++;
	}	
	CB_E;
	i=0;
	SB_RW;
	while(i<6)
	{
		i++;
	}
	SB_E;
}


void LCD_Init(void)
{
	DelayMs(15);
	LCD_Com(0x30);		//set 8-bit data.
	DelayMs(5);		
	LCD_Com(0x30);		//set 8-bit data.
	DelayMs(1);	
	LCD_Com(0x30);		//set 8-bit data.
	DelayMs(1);			
	LCD_Com(0x3c);		//set 8-bit data,2 hang,5*10 char
	DelayMs(1);		
	LCD_Com(0x0c);		//set display on.
	DelayMs(1);			
	LCD_Com(0x01);		//clear the sreen
	DelayMs(2);	
	LCD_Com(0x06);		//set moving.
	DelayMs(1);		
}
void LCD_Write(unsigned char Data,uint8_t Command_Data)		//row is the 80h-87h,90h-97h
{
	uint8_t i=0;
	if(Command_Data == 0)	// write the Command and add.
	{
		CB_RS;				//写指令
	}
	if(Command_Data == 1)	// write the data.
	{
		DelayMs(1);
		SB_RS;				//写数据
	}
	CB_RW;
	CB_RW;
	SB_E;					//0x0C显示开关控制0C写入,80是地址。一次写一个数据先写DATA[0]">" 再写data[1]‘1’再写data[2]‘1’
	PORTA = Data;			//片选下降沿触发表示显示开关控制0C写入		再写data[8]‘1’,再写data[1]“0“  
	while(i<6)
	{
		i++;
	}						//延时
	CB_E;
	i=0;
	SB_RW;					//片选下降沿触发表示显示开关控制0C写入
	while(i<6)
	{
		i++;
	}
	SB_E;					//片选为高等待下一次写入。
}
void LCD_Read(unsigned char Data,uint8_t Command_Data)		//row is the 80h-87h,90h-97h
{
	uint8_t i=0;
	if(Command_Data == 0)	// write the Command and add.
	{
		CB_RS;				//写指令
	}
	if(Command_Data == 1)	// write the data.
	{
		DelayMs(1);
		SB_RS;				//写数据
	}
	SB_RW;
	SB_RW;
	SB_E;					//0x0C显示开关控制0C写入,80是地址。一次写一个数据先写DATA[0]">" 再写data[1]‘1’再写data[2]‘1’
	DDRA = 0x00;
	Data=PINA;
	//PORTA = Data;			//片选下降沿触发表示显示开关控制0C写入		再写data[8]‘1’,再写data[1]“0“  
	while(i<6)
	{
		i++;
	}						//延时
	CB_E;
	i=0;
	CB_RW;					//片选下降沿触发表示显示开关控制0C写入
	while(i<6)
	{
		i++;
	}
	SB_E;					//片选为高等待下一次写入。

}
void LCD_Display_Read(unsigned char Data[8],uint8_t Row)
{
	uint8_t i;
	LCD_Read(0x0c,0);							//显示方式控制
	DelayMs(1);
	if(Row == 1)
	{
//		LCD_Write((0x80),0);					//第一行第一个
		for(i=0;i<=7;i++)
		{
			LCD_Read((0x80+i),0);
			LCD_Read(Data[i],1);
		}
	}
	if(Row == 2)
	{
//		LCD_Write((0x88),0);
		for(i=0;i<=7;i++)
		{
			LCD_Read((0xA8+i),0);
			LCD_Read(Data[i],1);
		}
	}
	i=0;
		DDRA = 0xFF;
}

void LCD_Display(unsigned char Data[8],uint8_t Row)
{
	uint8_t i;
	LCD_Write(0x0c,0);							//显示方式控制
	DelayMs(1);
	if(Row == 1)
	{
//		LCD_Write((0x80),0);					//第一行第一个
		for(i=0;i<=7;i++)
		{
			LCD_Write((0x80+i),0);
			LCD_Write(Data[i],1);
		}
	}
	if(Row == 2)
	{
//		LCD_Write((0x88),0);
		for(i=0;i<=7;i++)
		{
			LCD_Write((0xA8+i),0);
			LCD_Write(Data[i],1);
		}
	}
	i=0;
}
void LCD_Display_Init(unsigned char Data[8],uint8_t Row)
{
	uint8_t i;
	LCD_Write(0x0c,0);							//显示方式控制
	DelayMs(1);
	if(Row == 1)
	{
//		LCD_Write((0x80),0);					//第一行第一个
		for(i=0;i<=7;i++)
		{
			LCD_Write((0x40+i),0);
			LCD_Write(Data[i],1);
		}
	}
	if(Row == 2)
	{
//		LCD_Write((0x88),0);
		for(i=0;i<=7;i++)
		{
			LCD_Write((0xA8+i),0);
			LCD_Write(Data[i],1);
		}
	}
	i=0;
}


void LED_Flash(void)
{
	PORTE&=!_BV(PE3);
	DelayMs(50);
	PORTE|=_BV(PE3);
	DelayMs(50);
}
//扫描键盘 
uint8_t Key_Scan(void) 
{ 
	uint8_t ret=0; 
	uint8_t Key1;
	uint8_t Key2;
	Key1 = PIND;
	Key1 = Key1 & 0x1F; 
	DelayMs(20);
	Key2 = PIND;
	Key2 = Key2 & 0x1F;
	if((Key1==Key2)&&(Key1!=0))
	{
		Key_Work_Flag=1;
		Key=Key1;
		if(Key==0x1E)			//FCH
		{
			ret=1;
		} 
		if(Key==0x1D)			//TRANS
		{
			ret=2;
		} 
		if(Key==0x1B)			//STO
		{
			ret=3;
		} 
		if(Key==0x17)			//MD
		{
			ret=4;
		} 
		if(Key==0x0F)			//SQ
		{
			ret=5;
		}  
		if(Key==0x13)			//MD+STO
		{
			ret=6;					
		}
		if(Key1==0x03)			//MD+STO+SQ Key
		{
			ret=7;									
		}
	}
	if((Key1==0)&&(Key2==0))
	{
		Key_Work_Flag=0;
	}
	//等待弹起 
	Key1 = PIND;
	Key1 = Key1 & 0x1F; 
	if (Key1==0)
	{	
		DelayMs(10);
	}

	//return Key_Work_Flag;
	return ret;
}
//uint8_t Display_Fre(void)

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

									采集数据计数增大减小

⌨️ 快捷键说明

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