📄 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 + -