lcodu_main.c
来自「卫星接受机控制卫星和LCD显示」· C语言 代码 · 共 334 行
C
334 行
//*----------------------------------------------------------------------------
//* File Name : lcodu_main.c
//* Object : Main application written in C
//* Creation : wp 200710
//* Modif : wp 20071023
//*----------------------------------------------------------------------------
#include "Board.h"
#include "vars.h"
//#include "usart.h"
#include "hardctrl.h"
#include "spi.h"
#include "string.h"
#define SENDIND_DATA(x) {if(x) send_msg_USART1();\
else send_msg_USART0(); }
extern void initiation(void);
//*--------------------------------------------------------------------------------------
//* Function Name : Main
//* Object : Software entry point
//* Input Parameters : none.
//* Output Parameters : none.
//*--------------------------------------------------------------------------------------
void Delay (unsigned int a) { while (--a!=0); } // 延时函数
char const app_version[4]={64,32,0x03,0xE8}; //本程序版本:64.32.1000;十进制数1000 换算成16进制为0x03e8
char const sate_vaule[64]={10,01,10,02,01,13,23,45,10,00,01,00,10,00,02,00,10,01,10,02,01,13,23,45,10,00,01,00,10,00,02,00,10,01,10,02,01,13,23,45,
10,00,01,00,10,00,02,00,10,01,10,02,01,13,23,45,10,00,01,00,10,00,02,00};
//static unsigned char old_synselect;
signed char v_at1b_temp_tb[15][2];
unsigned char v_at1b_index;
signed char v_at1b_step,v_at1b_jump;//v_at1b_step保存了AT1B有多少个点
struct satellite sate[240];
//即后两个字节算成一个十进制数
unsigned int oldalarm;
//unsigned char old_crc_counter;
//unsigned int alive_always_counter;
/*
函数名: LED
功能:使LED按要求发出不同的光
作者:gj
*/
void LED()
{
if ( (AT91C_BASE_PIOA->PIO_PDSR & PA8_LED ) == PA8_LED )
{
AT91C_BASE_PIOA->PIO_CODR= PA8_LED;
}
else
{
AT91C_BASE_PIOA->PIO_SODR= PA8_LED;
}
key_flag=0;
}
/*
函数名: display
功能:将用于输入的数字(频率)和当前信号强度显示在显示屏上
作者:gj
*/
void display()
{
LED();
}
/*
函数名: odu_data_init
功能:参数初始化,从flash中读出各配置参数的值
作者:wp
*/
void data_init(void)
{ unsigned int address;
unsigned char i;
if(strcmp(app_version,(char const*)rfu_sw_version)!=0)//写版本
{
address=(unsigned int)&rfu_sw_version;
at91f_flash_write(address,4,(unsigned char*)app_version);
}
if(satellite_num==0xFF)//写版本
{
address=(unsigned int)&sate;
at91f_flash_write(address,64,(unsigned char*)sate_vaule);
address=(unsigned int)&satellite_num;
i=64;
at91f_flash_write(address,1,(unsigned char*)&i);
}
syn_select=0;
change_display=0;
select[0]=select[1]=select[2]=0;
key_flag=0;
page_flag=0;
num=0;
//sate[]
//Set_TX_RX_RF(TX_RF,(v_tx_f_lo/1000));//设置PLL的TX频率
Set_TX_RX_RF(RX_RF,(v_rx_f_lo/1000));//设置PLL的RX频率
/*先找好每一个需要调整衰减的温度点,以及其对应的衰减值*/
}
/*
函数名: adc_status_collect
功能: 对信号发生器的功率进行采集
说明:
作者:gj
*/
void adc_status_collect()
{
AT91C_BASE_ADC->ADC_CR=AT91C_ADC_START;
while((AT91C_BASE_ADC->ADC_SR&AT91C_ADC_DRDY)!=AT91C_ADC_DRDY){}
adc_temp=AT91C_BASE_ADC->ADC_LCDR;
}
unsigned char recv_msg(void)
{
return 0x00;
}
void change_BCD(unsigned int temp)
{
num_flag=temp-1;
while(temp)
{
switch(value[temp-1])
{
case ONE:
BCD[temp-1]=1;
break;
case TWO:
BCD[temp-1]=2;
break;
case THREE:
BCD[temp-1]=3;
break;
case FOUR:
BCD[temp-1]=4;
break;
case FIVE:
BCD[temp-1]=5;
break;
case SIX:
BCD[temp-1]=6;
break;
case SEVEN:
BCD[temp-1]=7;
break;
case EIGHT:
BCD[temp-1]=8;
break;
case NINE:
BCD[temp-1]=9;
break;
case ZERO:
BCD[temp-1]=0;
break;
default:
break;
}
temp--;
}
}
void key_handle(void)
{
switch(page_flag)
{
case 0://主界面
switch(value[num-1])
{
case ONE:
select[0]=1;
page_flag=1;
break;
case TWO:
select[0]=2;
page_flag=2;
break;
//select[0]=0;
default:
break;
}
break;
case 1://显示参数
switch(value[num-1])
{
case ONE:
select[1]=1;
page_flag=3;
break;
case TWO:
select[1]=2;
page_flag=4;
break;
//select[0]=0;
default:
break;
}
break;
case 2://频率设置
switch(value[num-1])
{
case ONE:
select[2]=1;
page_flag=6;
break;
case TWO:
select[2]=2;
page_flag=5;
break;
//select[0]=0;
default:
break;
}
break;
case 3://功率告警显示
break;
case 4://显示频率
break;
case 5://频率输入
break;
case 6://卫星选择
switch(value[num-1])
{
case UP:
if()
{ }
break;
case DOWN:
if()
{ }
break;
case ONE:
break;
case TWO:
break;
default:
break;
}
break;
case 7://极化选择
switch(value[num-1])
{
case ONE:
break;
case TWO:
break;
default:
break;
}
break;
case 8:
break;
case 9:
break;
}
if(value[num-1]==ENTER)
{
change_BCD(num);
num=0;
}
else
if(value[num-1]==DELE)
{
if(num!=0)
{num--;
}
}
}
//*-----------------------------------------------------------------------------
//* Function Name : main
//* Object : the main function.The entrance of the software.
//* autor : wang ping
//* Input Parameters : none
//* Output Parameters : none.
//*-----------------------------------------------------------------------------
int main()
{
initiation();
spi_init();//初始化SPI以及初始化SYN
data_init();//从EEPROM读数据到变量
Delay(8000000);
while(1)
{
adc_status_collect();
if(key_flag==0x02)
{
key_handle();
display();
}
if ((v_counter_forsend+TIME_5SECONDS)<AT91C_BASE_RTTC->RTTC_RTVR)
{
LED();
//display();
v_counter_forsend=AT91C_BASE_RTTC->RTTC_RTVR;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?