📄 pt6911chmodelok.c
字号:
************************************************************************************************/
void Caiji_shuju(void)
{
uint8_t n0,n1,n2,n3,n4,n5;
Switch_in1=PINF;
Switch_in1=Switch_in1&0x03;
DelayMs(5);
Switch_in2=PINF;
Switch_in2=Switch_in2&0x03;
if((Switch_in1==Switch_in2)&&(Switch_in1!=0))
{
Switch_in=Switch_in1;
//Switch_Enable=Switch_in1; //为后面3个显示的3个模式做准备是否有按键按下。
}
if(Switch_in==0x02) //F0 is low
{
for(n3=0;n3<=100;n3++)
{
Switch_in=PINF;
Switch_in=Switch_in&0x03;
if(Switch_in==0x01) //f1 is low
{
for(n4=0;n4<=100;n4++)
{
Switch_in=PINF;
Switch_in=Switch_in&0x01;
if(Switch_in==1) //f0 is high
{
for(n5=0;n5<=100;n5++)
{
Switch_in=PINF;
Switch_in=Switch_in&0x02;
if(Switch_in==0x02)
{
Caiji_shuju_flag=1; //表示顺时针转动
n5=100, n4=100, n3=100;
}
if(n5==90)
n5=0;
}
}
if(n4==90)
n4=0;
}
}
if(n3==90)
n3=0;
}
}
if(Switch_in==0x01) //F1 is low
{
for(n0=0;n0<=100;n0++)
{
Switch_in=PINF;
Switch_in=Switch_in&0x03;
if(Switch_in=0x02) //f0 is low
{
for(n1=0;n1<=100;n1++)
{
Switch_in=PINF;
Switch_in=Switch_in&0x02;
if(Switch_in==0x02) //f1 is high
{
for(n2=0;n2<=100;n2++)
{
Switch_in=PINF;
Switch_in=Switch_in&0x01;
if(Switch_in==1)
{
Caiji_shuju_flag=2; //表示逆时针转动
n2=100,n1=100,n0=100;
}
if(n2==90)
n2=0;
}
}
if(n1==90)
n1=0;
}
}
if(n0==90)
n2=0;
}
}
if((Caiji_shuju_flag!=1)&&(Caiji_shuju_flag!=2))
{
Caiji_shuju_flag=0;
}
}
/************************************************************************************************
显示8.33KHZ频率
************************************************************************************************/
void Display_Fre_jisuan(void)
{
uint16_t hundred,ten,ge,Temp1,Fre2;
float Fre,Temp,Temp0;
uint32_t Fre1,Temp2;
if(Caiji_shuju_flag==1)
{
Freq_Count++;
if(Freq_Count>=2279)
Freq_Count=0;
}
if(Caiji_shuju_flag==2)
{
Freq_Count--;
if(Freq_Count==0)
Freq_Count=2278;
}
if(Caiji_shuju_flag==0)
{
Freq_Count=Freq_Count;
}
//频率显示次数计数
//第6种模式频率通道计数是25KHZ还是8.33KHZ
//LCD_Display(Display_RESET,1);
Temp=Freq_Count;
Fre = Temp*8.33/1000+118; //frequency conversion to n*25;120.475 118.04998
Fre1 = Fre; //count the float number.120 小数变整数 118
Fre2 = Fre1; //count the int number. 0.04998
Fre = Fre - Fre1;
Fre *= 100000; //4749.9849 4998
Fre1 = Fre; //4749
//Temp3=Fre1/10;
Temp1=Fre1/10 % 10;
Temp2=Fre1/100;
if(((Temp1==9)||(Temp1==8)||(Temp1==7))&&(Freq_Count%3==0))
{
Fre1=(Temp2+1)*100;
}
Temp1 = Fre1 % 10; //9
Temp1=Fre1/100;
Temp0=Temp1;
Temp2=Temp0/10;
Temp1=Temp1%10;
if(Temp1==5)
{
Temp1 += 5; //4759
}
if(Temp1==8)
{
Temp1 += 2; //4759
}
if((Temp1==0)||(Temp1==3)||(Temp1==6))
{
Temp1=5;
}
if(Temp1==1)
{
Temp1=0;
}
Fre1=Temp2*10+Temp1;
//Fre1 -= Temp1; //4750
//Fre1 /= 10; //475
hundred = Fre1 / 100; //4
ten = (Fre1 % 100)/10; //7
ge = (Fre1 % 100) % 10; //5
hundred &= 0x0F; //4
hundred |= 0x30; //52
ten &= 0x0F; //7
ten |= 0x30; //55
ge &= 0x0F; //5
ge |= 0x30; //53
Display_Frequency_Data[5] = hundred;
Display_Frequency_Data[6] = ten;
Display_Frequency_Data[7] = ge;
// ge0=ge;
hundred = Fre2 / 100;
ten = (Fre2 % 100)/10;
ge = (Fre2 % 100) % 10;
hundred &= 0x0F;
hundred |= 0x30;
ten &= 0x0F;
ten |= 0x30;
ge &= 0x0F;
ge |= 0x30;
Display_Frequency_Data[0] = 0x20;
Display_Frequency_Data[1] = hundred;
Display_Frequency_Data[2] = ten;
Display_Frequency_Data[3] = ge;
}
/************************************************************************************************
显示通道数目
************************************************************************************************/
void Display_Channel_jisuan(void)
{
uint8_t hundred,ten,ge,Channel2;
/*if(Caiji_shuju_flag==1)
{
Channel_Count++;
if(Channel_Count>=100)
Channel_Count=0;
}
if(Caiji_shuju_flag==2)
{
Channel_Count--;
if(Channel_Count==0)
Channel_Count=99;
}
if(Caiji_shuju_flag==0)
{
Channel_Count=Channel_Count;
} */
Channel2 = Channel_Count;
ten = Channel2 /10;
ge = Channel2 % 10;
hundred &= 0x0F;
hundred |= 0x30;
ten &= 0x0F;
ten |= 0x30;
ge &= 0x0F;
ge |= 0x30;
Display_Channel_Data[6] = ten;
Display_Channel_Data[7] = ge;
Display_Channel_Data[0] = 0x20;
Display_Channel_Data[1] = 0x20;
Display_Channel_Data[2] = 0x20;
Display_Channel_Data[3] = 0x20;
Display_Channel_Data[4] = 0x43;
Display_Channel_Data[5] = 0x48;
}
/*************************************************************************************************
**************************************************************************************************/
void Task_In(void)
{
if(Task_Rear < 20)
{
Task_Lock = 0;
Task_Buff[Task_Rear] = Task_No;
Task_Lock = 1;
Task_Rear++;
}
if(Task_Rear >= 20)
{
Task_Rear = 0;
}
// USART_Transmit(Task_Rear);
// USART_Transmit(Task_Buff[Task_Rear-1]);
}
uint8_t Task_Out(void)
{
uint8_t Task_Select=0;
if(Task_Lock == 1) //enable to read the task number.
{
if(Task_Buff[Task_Front] != 0)
{
Task_Select = Task_Buff[Task_Front];
Task_Buff[Task_Front] = 0;
Task_Front++;
}
// USART_Transmit(Task_Front);
// USART_Transmit(Task_Buff[Task_Front-1]);
if((Task_Front > Task_Rear)||(Task_Front >= 20))
{
Task_Front = 0;
Task_Rear = 0;
}
return (Task_Select);
}
return 0;
}
/*************************************************************************************************
**************************************************************************************************/
void Delete_All_Save(void)
{
LCD_Write(0x01,0);
DelayMs(1000); //清频显示空白在显示RESET/SET
//if(Time_1Minute_Flag!=1)
//{
LCD_Write(0x01,0);
PORTE|=_BV(PE3);
DelayMs(300);
LCD_Display(Display_SET,1);
DelayMs(300);
PORTE&=!_BV(PE3);
LCD_Write(0x01,0);
LCD_Display(Display_RESET,1);
LCD_Display(Display_0,2);
//}
}
/**************************************************************************************************
把2个8位的数组变成一个16位的数组,把采集到的数组保存到EEPROM中,共100个数据占地址100*32=3200
是C80,最后一个地址的开头是3168,
此3种模式不分开,按键反映不灵敏,导致数据互相错位,保存会黑屏。而且3种模式连续相应不好。
**************************************************************************************************/
void Display_Eeprom0_address(unsigned int First_Value)
{
j=0; //累加器清0
for(k1=First_Value;k1<=32;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++)
{
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[1]=0x20;
Display_Str2[2]=0x20;
Display_Str2[3]=0x20;
LCD_Display(Display_Str2,2); //第二行显示通道
}
void Save_Channel_Model(void)
{
k=0;
//把2个8位数组变成一格16位的数组
for(i=0;i<8;)
{
Save_Fre_Channel[k]=Display_Channel_Data[i]; //通道在Save_Fre_Channel数组的地位
i++;
k++;
}
for(j=0;j<8;)
{
k=8+j;
Save_Fre_Channel[k]=Display_Ch_Model_Temp_Fre[j]; //通道在Save_Fre_Channel数组的高位
j++;
}
}
void Save_Dir_Model(void)
{
k=0;
//把2个8位数组变成一格16位的数组
for(i=0;i<8;)
{
Save_Fre_Channel[k]=Display_Ch_Model_Temp_CH[i]; //通道在Save_Fre_Channel数组的地位
i++;
k++;
}
for(j=0;j<8;)
{
k=8+j;
Save_Fre_Channel[k]=Display_Dir_Model_Temp_Fre[j]; //通道在Save_Fre_Channel数组的高位
j++;
}
}
void Save_Fre_Model(void)
{
k=0;
//把2个8位数组变成一格16位的数组
for(i=0;i<8;)
{
Save_Fre_Channel[k]=Display_Channel_Data[i]; //通道在Save_Fre_Channel数组的地位
i++;
k++;
}
for(j=0;j<8;)
{
k=8+j;
Save_Fre_Channel[k]=Display_Fre_Model_Temp_Fre[j]; //通道在Save_Fre_Channel数组的高位
j++;
}
}
/*********************************************************************************************
************************************************************************************************/
/*void Save_to_EEprom_Dir_Model(void)
{
i=0;
for(i1=Display_Ch_Model_Temp_Adress;i1<=(15+Display_Ch_Model_Temp_Adress);i1++)
{
cli();
eeprom_is_ready();
eeprom_busy_wait();
eeprom_write_word(i1,Save_Fre_Channel[i]); // 把此时的数据保存到不为空的那个地址中
eeprom_is_ready();
eeprom_busy_wait();
eeprom_write_word(i,Save_Fre_Channel[i]); // 并且保存到第一个地址中,保证开机可以找到最后保存的那个数据
i++;
sei();
}
}*/
//写入EEPROM数据,如果读到EEPROM地址中有连续16个0XFF表示此地址是空的采可以保存数据
void Save_to_EEprom(void)
{
k=0;
for(i=0;i<8;)
{
Save_Fre_Channel[k]=Display_Ch_Model_Temp_CH[i]; //通道在Save_Fre_Channel数组的地位
i++;
k++;
}
for(j=0;j<8;)
{
k=8+j;
Save_Fre_Channel[k]=Display_Ch_Model_Temp_Fre[j]; //通道在Save_Fre_Channel数组的高位
j++;
}
for(Max_Eprom_Place=160;Max_Eprom_Place<=3168;Max_Eprom_Place+=16)
{
j=0; //累加器清0
for(k1=Max_Eprom_Place;k1<=(Max_Eprom_Place+15);k1++)
{
eeprom_is_ready();
Temp_Fre_Channel_Place[j]=eeprom_read_word(Max_Eprom_Place);
if(j==2)
j1=Temp_Fre_Channel_Place[j];
j++;
}
if(j1==0x0FF)
{
Temp_Eprom_Place=Max_Eprom_Place; //读15次不是OXFF那么地址单元加0X10
Max_Eprom_Place=3168;
}
}
i=0;
for(i1=Temp_Eprom_Place;i1<=(15+Temp_Eprom_Place);i1++)
{
cli();
eeprom_is_ready();
eeprom_busy_wait();
eeprom_write_word(i1,Save_Fre_Channel[i]); // 把此时的数据保存到不为空的那个地址中
//eeprom_is_ready();
//eeprom_busy_wait();
eeprom_write_word(i,Save_Fre_Channel[i]); // 并且保存到第一个地址中,保证开机可以找到最后保存的那个数据
i++;
sei();
}
}
void Trans_Fre_Display(void)
{
j=0;
for(i=0;i<=7;i++)
if(i==2)
j1=Display_Str0[j];
if(j1==0xFF)
{
LCD_Write(0x01,0);
LCD_Display(Display_Frequency_Data1,1); //循环显示。第一行显示频率。
for(i=0;i<=7;i++)
{
Temp_Display_use[i]=Display_Frequency_Data1[i];
}
}
else
{
LCD_Write(0x01,0);
LCD_Display(Display_Str0,1); //显示频率 di yi hang
for(i=0;i<=7;i++)
{
Temp_Display_use[i]=Display_Str0[i];
}
}
//j=0;
//j1=Temp_Display_Fre[j];
//if(j1==0xFF)
LCD_Display(Display_Frequency_Data1,2); //循环显示。第一行显示通道。
for(i=0;i<=7;i++)
{
Temp_Display_stby[i]=Display_Frequency_Data1[i];
}
for(m0=0;m0<=100;m0++)
{
m2=0;
//Display_Fre();
if(Freq_Count==0) //
{
LCD_Display(Display_Frequency_Data1,2); //如果没有这2行,第一次显示第一个通道频率118.005
for(i=0;i<=7;i++)
{
Temp_Display_stby[i]=Display_Frequency_Data1[i];
}
}
else
{
LCD_Display(Display_Frequency_Data,2);
for(i=0;i<=7;i++)
{
Temp_Display_stby[i]=Display_Frequency_Data[i];
}
}
DelayMs(10);
for(m1=0;m1<=100;m1++) //如果500毫秒没有采集到数据就退出到主程序
{
DelayMs(20);
Switch_in=PINF;
Switch_in=Switch_in&0x03;
if(Switch_in==0x03) //表示没有采集到F口数据
{
m2++;
}
if(Switch_in!=0x03) //表示没有采集到F口数据
{
m1=100;
m2=0;
}
if(m2==100)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -