?? main.c
字號:
//=========================================================================================
//作 者:大連海事大學 陳建超 李緯華 劉媛媛
//題 目:數控直流恒流源
//備 注:
// 2005年全國大學生電子競賽
//=========================================================================================
#include "SPCE061V004.H"
#include "Hardware.H"
#include "lab_parameter.h"
//#include "s480.h" ----------------------------------------------------
#define Speech_1 3
#define DAC1 1
#define DAC2 2
#define Ramp_UpDn_Off 0
#define Ramp_UpDn_On 3
#define Auto 1
extern KeyVal;
extern Set_Flag;
extern cnt;
extern Flag;
extern zero; //0
extern one; //1
extern two; //2
extern three; //3
extern four; //4
extern five; //5
extern six; //6
extern severn; //7
extern eight; //8
extern nine; //9
extern Blank; //空白
extern she; //設
extern zhi; //置
extern dian; //電
extern liu; //流
extern shi; //實
extern ce; //測
extern hao; //毫
extern an; //安
extern maohao; //:
extern xi; //系
extern tong; //統
extern gong; //工
extern zuo; //作
extern zheng; //正
extern chang; //常
unsigned int ShowData[5]={0,0,0,0,0};
unsigned int SampleData[4]; //采集數據
unsigned int Set_Value; //設置值
unsigned int Contrl_Data;
unsigned int Voice=0;
extern Flag_StepAhead; //步進+
extern Flag_StepBack; //步進-
extern ENTER_Down;
extern int F_Delay(int x);
//==================================================================================================
//主函數
//==================================================================================================
int main(void)
{
F_System_Initial();
*P_INT_Ctrl=C_FIQ_TMA|C_FIQ_TMB|C_IRQ4_1KHz;
__asm("INT FIQ,IRQ");
while(1)
{
if(Set_Flag==1)
{
switch(cnt)
{
case 0: break;
case 1: F_ShowData_Process1();break;
case 2: F_ShowData_Process2();break;
case 3: F_ShowData_Process3();break;
case 4: F_ShowData_Process4();break;
default:
break;
}
}
else
{
if(Flag_StepAhead==1)
{
Set_Value=ShowData[1]*1000+ShowData[2]*100+ShowData[3]*10+ShowData[4];
*P_Watchdog_Clear=C_WDTCLR;
if(Set_Value<=2500)
Set_Value+=1;
else
Set_Value=0;
ShowData[1]=Set_Value/1000;
ShowData[2]=Set_Value%1000/100;
*P_Watchdog_Clear=C_WDTCLR;
ShowData[3]=Set_Value%1000%100/10;
*P_Watchdog_Clear=C_WDTCLR;
ShowData[4]=Set_Value%10;
Flag_StepAhead=0;
}
else
if(Flag_StepBack==1)
{
Set_Value=ShowData[1]*1000+ShowData[2]*100+ShowData[3]*10+ShowData[4];
*P_Watchdog_Clear=C_WDTCLR;
if(Set_Value>0)
Set_Value-=1;
else
Set_Value=0;
ShowData[1]=Set_Value/1000;
ShowData[2]=Set_Value%1000/100;
*P_Watchdog_Clear=C_WDTCLR;
ShowData[3]=Set_Value%1000%100/10;
*P_Watchdog_Clear=C_WDTCLR;
ShowData[4]=Set_Value%10;
Flag_StepBack=0;
}
F_ShowData_Process6();
*P_Watchdog_Clear=C_WDTCLR;
}
if(ENTER_Down==1)
{
ENTER_Down=0;
Contrl_Data=2*Set_Value;
}
F_Send_Data(Contrl_Data);
FG_PutBitmap(&she,127,64); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&zhi,111,64); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&dian,95,64); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&liu,79,64); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&hao,23,64); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&an,15,64); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&maohao,63,64); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&shi,127,48); //顯示漢字 函數定義在Splc501sys.asm //顯示采集數據//實
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&ce,111,48); //顯示漢字 函數定義在Splc501sys.asm //測
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&dian,95,48); //顯示漢字 函數定義在Splc501sys.asm //電
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&liu,79,48); //顯示漢字 函數定義在Splc501sys.asm //流
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&maohao,63,48); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
F_ShowData_Process5(); //顯示采集數據
FG_PutBitmap(&hao,23,48); //顯示漢字 函數定義在Splc501sys.asm //m
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&an,15,48); //顯示漢字 函數定義在Splc501sys.asm //A
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&xi,127,32); //顯示漢字 函數定義在Splc501sys.asm //測
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&tong,111,32); //顯示漢字 函數定義在Splc501sys.asm //電
*P_Watchdog_Clear=C_WDTCLR;
//采樣值大,顯示系統過載
FG_PutBitmap(&gong,95,32); //顯示漢字 函數定義在Splc501sys.asm //流
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&zuo,79,32); //顯示漢字 函數定義在Splc501sys.asm
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&zheng,63,32); //顯示漢字 函數定義在Splc501sys.asm //m
*P_Watchdog_Clear=C_WDTCLR;
FG_PutBitmap(&chang,47,32); //顯示漢字 函數定義在Splc501sys.asm //A
*P_Watchdog_Clear=C_WDTCLR;
if(Voice==1)
{
SACM_S480_Initial(1);
SACM_S480_Play(Speech_1, DAC1+DAC2, Ramp_UpDn_On);
//放音
while(SACM_S480_Status()&0x01)
{
SACM_S480_ServiceLoop();
*P_Watchdog_Clear=C_WDTCLR; //清看門狗
}
}
}
}
//=============================================================================================================
//
//=============================================================================================================
void InitKey();
int F_System_Initial()
{
Init_sys();
FG_InitGraphic();
*P_IOB_Dir|=0x0080; //設置IOB7為液晶CS控制線
*P_IOB_Attrib|=0x0080;
*P_IOB_Data&=0xFF7F;
FG_ClearScreen(0);
FG_SetBMPMode(DG_BMP_XOR); //設置位圖模式 函數定義在Splc501sys.asm
InitKey(); //初始化IOA低八位位鍵盤接口,其中高四位為輸出口,低四位為輸入口
*P_IOA_Dir|=0xFF00; //初始化IOA高八位為液晶和D/A數據線
*P_IOA_Attrib|=0xFF00;
*P_IOA_Data&=0x00FF;
*P_IOB_Dir|=0x000F; //定義IOB0-4為D/A高四位數據線
*P_IOB_Attrib|=0x000F;
*P_IOB_Data&=0xFFF0;
*P_IOB_Dir|=0x0F00; //定義IOB8-11為D/A控制線
*P_IOB_Attrib|=0x0F00; //IOB8為RESET,IOB9為LDAC,IOB10為R/W,IOB11為CS
*P_IOB_Data|=0x0F00; //該四個輸出口均為高電平輸出
*P_IOB_Dir|=0xF000; //定義IOB12為低電平輸出,接A/D___DCLOCK,
*P_IOB_Dir&=0xBFFF; //IOB13為高電平輸出,接A/D___CS,
*P_IOB_Attrib|=0xF000; //IOB14為帶上拉電阻輸入A/D__OUT
*P_IOB_Attrib&=0xBFFF;
*P_IOB_Data|=0x7000;
*P_TimerA_Ctrl=C_SourceA_4096Hz|C_SourceB_1; //設置定時器頻率
*P_TimerA_Data=0xFF33; //設定定時器初值,即位每50ms掃描一次鍵盤
*P_TimerB_Ctrl=C_SourceC_4096Hz; //設置定時器B頻率
*P_TimerB_Data=0xFFD6; //設置采樣頻率為100Hz
}
//=============================================================================================================
//初始化IO口 低字節/高字節 的高四位為輸出口,并初始化輸出為低電平DIR=1 ATRRIB=1 DATA=0
// 低四位為帶上拉電阻輸入口 DIR=0 ATRRIB=0 DATA=1
//=============================================================================================================
void InitKey()
{
#ifdef KeyIoLowEight //低字節
//高4位
KEYIODIR=KEYIODIR|0x00F0; //7-4 OUTPUT
KEYIOATRRIB=KEYIOATRRIB|0x00F0; //7-4 OUTPUT
KEYIODATA=KEYIODATA&0xFF0F; //OUTPUT "0" LEVEL
//低4位
KEYIODIR=KEYIODIR&0xFFF0; //4-0 INPUT
KEYIOATRRIB=KEYIOATRRIB&0xFFF0; //4-0 INPUT
KEYIODATA=KEYIODATA|0x000F; //4-0 INPUT
#endif
}
//=============================================================================================================
//
//=============================================================================================================
extern she;
extern zhi;
int F_ShowData_Process1()
{
unsigned int *Address;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -