⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 2005年全国大学生电子设计竞赛论文集
💻 C
📖 第 1 页 / 共 2 页
字号:
//=========================================================================================
//作    者:大连海事大学 陈建超 李纬华 刘媛媛
//题    目:数控直流恒流源
//备    注:
//         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 + -