📄 pt6911chmodelok.c
字号:
//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 + -