?? main.c
字號:
#include "MENU.h"
#include "bit.h"
#include "sposvar.h"
#include "spos.h"
#include "user.h"
#include "9850A.h"
#include "UARTTEST.h"
#define M_IO_CS PA->bit.bit2 //CS與SPCE061A的接口定義
#define N_M_BEGAINFUNC() (*((*Now_MENU).BeginFunc))()
Uint Keying=0;
unsigned long Step_HZ=100; //默認步進為100HZ
////////////////////////////////////////////////////////////////////
// //
// OS 相關變量 //
// //
////////////////////////////////////////////////////////////////////
int err; //ERROR NO.
int t1stack[500]; //R-S
int t2stack[50]; //R-S
int dddd222=0;
HEvent G_ICO_sem;
enum FUNC_MODE
{
SINE=0,
PSK=1,
ASK=2,
FM=3,
AM=4,
}MODE;
char str_MODE1[5]="SINE";
char str_MODE2[5]=" PSK";
char str_MODE3[5]=" ASK";
char str_MODE4[5]=" FM";
char str_MODE5[5]=" AM";
char *str_MODE[5]={str_MODE1,str_MODE2,str_MODE3,str_MODE4,str_MODE5};
////////////////////////////////////////////////////////////////////
// //
// OS 無關變量 //
// //
////////////////////////////////////////////////////////////////////
union _EVENT_FLAG_{
struct _bit_flag{
unsigned char INTOSUBMENU :1;
unsigned char RETURNMINMENU :1;
unsigned char CANNEL :1;
unsigned char OK :1;
unsigned char ASK :1;
unsigned char PSK :1;
unsigned char AM :1;
unsigned char FM :1;
unsigned char SINE :1;
unsigned char Reserve :9;//保留
}Bit;
unsigned char Value;
}MY_Event={0x00};
unsigned long int SET_FREG=100000;
Uint AM_MA=10; //初始ma值為10%
////////////////////////////////////////////////////////////////////
// //
// 菜單相關變量 //
// //
////////////////////////////////////////////////////////////////////
MENU Min_MENU,Sub_MENU_SINE,Sub_MENU_PSK,Sub_MENU_ASK,Sub_MENU_FM,Sub_MENU_AM;
MENU *Now_MENU;
unsigned int *PICO[6]={encoding_1286411,encoding_1286412,encoding_1286413,encoding_1286414,encoding_1286415,encoding_1286416};
unsigned int *PICO1[1]={};
int (*PSUBFUNC[6])()={0,0,0,0,0,0};
struct MENU_S (*PSUBMENU[6])={&Sub_MENU_SINE,&Sub_MENU_PSK,&Sub_MENU_ASK,&Sub_MENU_FM,&Sub_MENU_AM,0};
Uint *G_ICO[2]={TU_GUANGBIAOh,TU_GUANGBIAOb};
Uint G_ICO_X=16;
Uint G_ICO_Y=32;
void Psk_Sub_FUNC();
void Ask_Sub_FUNC();
void FM_Sub_FUNC();
void AM_Sub_FUNC();
Uint SINE_SET_INPUT_MODE=0;
////////////////////////////////////////////////////////////////////
// //
// 功能函數聲明 //
// //
////////////////////////////////////////////////////////////////////
void ReturnTOSUBMENU(); //返回主菜單
void Menu_init(); //菜單初始化
Uint ScanKeyTask(); //KEY
void InTOSUBMENU(); //進入子菜單
void SYS_IO_INIT(); //io init
void LCDMENUDROW(); //通用界面
Uint INPUT_SINE(); //輸入函數
void Sine_Sub_FUNC(); //sine 功能函數
void FMReady(unsigned long center_freq,Uint offset);
void LOGIN();
////////////////////////////////////////////////////////////////////
// //
// 中斷函數 //
// //
////////////////////////////////////////////////////////////////////
void IRQ1_TMA_ISR()
{
static Uint fmi;
if(fmi<31)
{
fmi++;
}
else fmi=0;
//* SendFreq(CurrentFreq+DirUnFMed[fmi]);
f_freqword=DirFMword[fmi];
UpdateDDS();
}
void IRQ2_TMB_ISR()
{
static Uint ami;
if(ami<41)
{
ami++;
}
else ami=0;
DA0=AMoffset[ami];
}
////////////////////////////////////////////////////////////////////
// //
// 主函數 //
// //
////////////////////////////////////////////////////////////////////
void main(void)
{
void MainTask();
void Timer_INT();
void DisPlay();
void Task1();
void IRQ1_TMA_ISR();
void IRQ2_TMB_ISR();
Delaydds(10);
SpSInit();
MODE=0xff;
Menu_init();
SYS_IO_INIT();
LCD501_Init(0); //初始化端口、包括LCD的初始設置、以及顯示初始(即傳到函數的參數
LCD501_SetContrast(05);
err = SpSTaskCreate(MainTask,0,t1stack+499,1);
SpSSetVector(IRQ1_TMA_VEC,IRQ1_TMA_ISR);
SpSSetVector(IRQ2_TMB_VEC,IRQ2_TMB_ISR);
Now_MENU=&Min_MENU;
G_ICO_sem=SpSSemCreate(0);
P1_7=0;
SpSStart();
}
////////////////////////////////////////////////////////////////////
// //
// 系統任務 //
// //
////////////////////////////////////////////////////////////////////
void MainTask()
{
Uint dd=0;
Uint Key = 0;
int BBB[8];
unsigned int iii;
SET_FREG=100000; //初始化100KHZ
SendFreq(SET_FREG);
N_M_BEGAINFUNC();
while(1)
{
Watchdog_Clear = 0x0001;
Key=ScanKeyTask();
switch(Key)
{
case 0x11 :
if((*Now_MENU).IDPoint==0)
(*Now_MENU).IDPoint=(*Now_MENU).ucCount;
if((*Now_MENU).IDPoint>0)
(*Now_MENU).IDPoint--;
N_M_BEGAINFUNC();//(*((*Now_MENU).BeginFunc))();
break;
case 0x41 : //2
if((*Now_MENU).IDPoint<(*Now_MENU).ucCount)
(*Now_MENU).IDPoint++;
if((*Now_MENU).IDPoint==(*Now_MENU).ucCount)
(*Now_MENU).IDPoint=0;
N_M_BEGAINFUNC();//(*((*Now_MENU).BeginFunc))()
break;
case 0x81 : //3
InTOSUBMENU();
break;
case 0x12 : //4
//iii=iii+100;
// SendFreq(iii);
break;
case 0x22 : //5
// iii=iii-100;
// SendFreq(iii);
break;
case 0x42 : //6
break;
case 0x82 : //7
ReturnTOSUBMENU();
break;
case 0x14 : //8
break;
case 0x24 : //9
break;
/* case 0x44 : //10
break;
case 0x84 : //11
break;
case 0x18 : //12
break;
case 0x28 : //13
break;*/
case 0x48 : //14
break;
case 0x88 : //15
break;
default:
break;
}
SpSTimeDly(1);
}
}
void DisPlay()
{
static int YD_vv=0;
char DisPlay_ID=0;
Uint DisPlay_i;
while(1)
{
Watchdog_Clear = 0x0001;
LCD501_Bitmap(G_ICO_X,G_ICO_Y,G_ICO[DisPlay_ID],0);
if(DisPlay_ID==0)
DisPlay_ID=1;
else if(DisPlay_ID==1)
DisPlay_ID=0;
Delaydds(2000);
SpSTimeDly(1);
}
}
////////////////////////////////////////////////////////////////////
// //
// 功能函數 //
// //
////////////////////////////////////////////////////////////////////
void SYS_IO_INIT()
{
P0_Dir_Highbyte=0xf0;
P0_Attrib_Highbyte=0xf0;
P0_Highbyte=0xf0;
P1_Dir=0xffff;
P1_Attrib=0xffff;
P1=0;
}
Uint ScanKeyTask() //鍵盤掃描任務
{
unsigned int iTemp;
unsigned int Keyval;
Watchdog_Clear=1;
P0_Dir_Highbyte=0xf0;
P0_Attrib_Highbyte=0xf0;
P0_Highbyte=0xf0;
Delaydds(10);
Keyval = P0_Highbyte;
if(Keyval!=0xf0)
{
Keyval = P0_Highbyte;
if(Keyval!=0xf0)
{
Keyval&=0x0f;
P0_Dir_Highbyte=0x0f;
P0_Attrib_Highbyte=0x0f;
P0_Highbyte=0x0f;
SpSTimeDly(1);
iTemp=P0_Highbyte;
Keyval|= iTemp&0xf0;
while(P0_Highbyte==iTemp)
{
Delaydds(10);
Watchdog_Clear=1;
}
return Keyval;
}
}
}
void FMReady(unsigned long center_freq,Uint offset)
{
Uint mi;
SpFSetTimer(OS_SET_TIMEA,0x30,0xfd00); //center_freqword=freq*42.949673;
for(mi=0;mi<32;mi++) //f_freqword=(center_freq+deltafreq)*42.949673=center_freqword+deltafreq*42.949673;
{
if(offset)
{
DirFMword[mi]=(unsigned long)((DirUnFMed[mi]+center_freq)*42.94967296);
}
else
{
DirFMword[mi]=(unsigned long)(DirUnFMed[mi]*21.47483648+center_freq*42.94967296);
}
}
}
void AMReady(Uint ma) //他媽的ma怎么確定調制信號的幅度和偏移啊??
{
Uint mi;
float aama;
if(ma<=100)
{
aama=ma;
aama=aama/100;
SpFSetTimer(OS_SET_TIMEB,0,0xfdb7);
for(mi=0;mi<42;mi++)
{
AMoffset[mi]=(Uint)((aama*UnAMed[mi])+32767);
}
}
}
////////////////////////////////////////////////////////////////////
// //
// 菜單相關功能函數 //
// //
////////////////////////////////////////////////////////////////////
void Menu_init()
{
Min_MENU.ucCount=6;
Min_MENU.pIcon=PICO;
Min_MENU.BeginFunc=heiheiDisplayMenu;
Min_MENU.IDPoint=0;
Min_MENU.SubFunc=PSUBFUNC;
Min_MENU.SubMenu=PSUBMENU;
PSUBFUNC[0]=InTOSUBMENU;
Sub_MENU_SINE.ucCount=1;
Sub_MENU_SINE.pIcon=PICO1;
Sub_MENU_SINE.BeginFunc=Sine_Sub_FUNC;
Sub_MENU_SINE.IDPoint=0;
Sub_MENU_SINE.SubFunc=0;
Sub_MENU_PSK.ucCount=1;
Sub_MENU_PSK.pIcon=PICO1;
Sub_MENU_PSK.BeginFunc=Psk_Sub_FUNC;
Sub_MENU_PSK.IDPoint=0;
Sub_MENU_PSK.SubFunc=0;
Sub_MENU_ASK.ucCount=1;
Sub_MENU_ASK.pIcon=PICO1;
Sub_MENU_ASK.BeginFunc=Ask_Sub_FUNC;
Sub_MENU_ASK.IDPoint=0;
Sub_MENU_ASK.SubFunc=0;
Sub_MENU_FM.ucCount=1;
Sub_MENU_FM.pIcon=PICO1;
Sub_MENU_FM.BeginFunc=FM_Sub_FUNC;
Sub_MENU_FM.IDPoint=0;
Sub_MENU_FM.SubFunc=0;
Sub_MENU_AM.ucCount=1;
Sub_MENU_AM.pIcon=PICO1;
Sub_MENU_AM.BeginFunc=AM_Sub_FUNC;
Sub_MENU_AM.IDPoint=0;
Sub_MENU_AM.SubFunc=0;
}
void heiheiDisplayMenu()
{
LCD501_ClrScreen(0);
LCD501_Bitmap(0,0,(*Now_MENU).pIcon[(*Now_MENU).IDPoint],0);
}
void InTOSUBMENU() //進入子菜單
{
Now_MENU=((*Now_MENU).SubMenu)[(*Now_MENU).IDPoint];
N_M_BEGAINFUNC();
}
void ReturnTOSUBMENU() //返回主菜單
{
Now_MENU=&Min_MENU;
}
void LCDMENUDROW() //通用界面
{
LCD501_ClrScreen(0);
LCD501_Rectangle(0,0,127,63,0);
LCD501_Bitmap(1,1,hanzi_dang);
LCD501_Bitmap(17,1,hanzi_qiang);
LCD501_Bitmap(17+16,1,hanzi_mo);
LCD501_Bitmap(17+16+16,1,hanzi_shi);
LCD501_PutString(17+16+16+16,1,":");
LCD501_PutString(17+16+16+16+8,1,str_MODE[MODE]);
if(MODE==SINE||MODE==AM)
LCD501_PutString(1,16+1,"KEY5 + KEY6 -");
if(MODE==FM)
LCD501_PutString(1,16+1,"K7 10K K8 5K");
}
void INPUT_SINE_DROW()
{
LCD501_PutString(93,32,"HZ");
LCD501_Bitmap(0,0,hanzi_qing);
LCD501_Bitmap(16,0,hanzi_shu);
LCD501_Bitmap(16+16,0,hanzi_ru);
LCD501_Bitmap(16+16+16,0,hanzi_she);
LCD501_Bitmap(16+16+16+16,0,hanzi_ding);
LCD501_Bitmap(16+16+16+16+16,0,hanzi_pin);
LCD501_Bitmap(16+16+16+16+16+16,0,hanzi_lv);
LCD501_PutString(16+16+16+16+16+16+16,0,":");
}
void INPUT_AM_DROW()
{
LCD501_PutString(93,32,"%");
LCD501_Bitmap(0,0,hanzi_qing);
LCD501_Bitmap(16,0,hanzi_shu);
LCD501_Bitmap(16+16,0,hanzi_ru);
LCD501_Bitmap(16+16+16,0,hanzi_she);
LCD501_Bitmap(16+16+16+16,0,hanzi_ding);
LCD501_PutString(16+16+16+16+16,0,":");
LCD501_PutString(16+16+16+16+16+8,0,"ma");
LCD501_PutString(16+16+16+16+16+8+16,0,"%");
}
Uint INPUT_SINE() //輸入函數
{
char INPUT_NUM[8];
Uint Key = 0;
Uint INPUT_NUM_ID=0;
Uint INPUT_ii;
static unsigned long old_SET_FREG=0;
unsigned long NOW_SET_FREG=0;
G_ICO_X=16;
LCD501_ClrScreen(0);
err = SpSTaskCreate(DisPlay,0,t2stack+49,3);
INPUT_SINE_DROW();
if(SINE_SET_INPUT_MODE==2)
{
LCD501_Bitmap(16+16+16,0,hanzi_bu);
LCD501_Bitmap(16+16+16+16,0,hanzi_jin);
}
while(1)
{
Watchdog_Clear = 0x0001;
Key=ScanKeyTask();
if(INPUT_NUM_ID>0)
{
switch(Key)
{
case 0x84 : //11
NOW_SET_FREG=(NOW_SET_FREG-INPUT_NUM[INPUT_NUM_ID-1]+'0')/10;
INPUT_NUM_ID--;
G_ICO_X-=8;
LCD501_ClrScreen(0);
INPUT_SINE_DROW();
break;
case 0x81 : //3
MY_Event.Bit.OK=1;
//返回SET_FREG值
break;
default:
break;
}
}
if(INPUT_NUM_ID<8)
{
switch(Key)
{
case 0x11 :
break;
case 0x21 :
if(INPUT_NUM_ID==0)
break;
INPUT_NUM[INPUT_NUM_ID]=0+'0';
NOW_SET_FREG=NOW_SET_FREG*10+0;
G_ICO_X+=8;
INPUT_NUM_ID++;
break;
// case 0x41 : //2
// break;
case 0x12 : //4
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -