?? main.c
字號:
//=========================================================================================
//作 者:華僑大學 張維緯 葉媲舟 劉燦
//題 目:數控直流恒流源
//備 注:
// 2005年全國大學生電子競賽
//=========================================================================================
#include "SPCE061V004.H"
#include "lab_parameter.h"
char b0="0",b1="1",b2="2",b3="3",b4="4",b5="5",b6="6",b7="7",b8="8",b9="9",b=".";
char bb ,*p=0;
unsigned int k0=0,u=0,a11=0,a22=0,a33=0,b11=0,b22=0,b33=0;
extern shu; //數
extern kong; //控
extern heng; //恒
extern liu; //流
extern yuan; //源
extern shi; //實
extern ji; //際
extern ce; //測
extern liang; //量
extern yu; //預
extern xian; //先
extern she; //設
extern ding; //定
unsigned int key_value=0,ooo=0,tm0=0,tm1=0,tm2=0,tm3=0,tm[4]={0};
int key=0,i=0,value_h=0,j=0,k=0;
unsigned long int key_in_value=2000,j0=0,binary=0,xx=0;
unsigned int key_in[10]={0},key_i=0;
unsigned int Da_data1=0x7ee0,Da_data2=0x7ee0,Da_data_flag=0,Ad_data=0;
float Ad_data_f=0,Data_f=0,Data_i_f=0;
float n=3.47,Ns=2.7285,Nb=30,R=0.334;//R=0.3157;
//=========================================================================================
//
//=========================================================================================
unsigned int get_key_value(void)
{
SP_Init_IOB(0x0f00,0x0f00,0x0f00); //設置IOA8—IOA11為高電平輸出,設置IOA12—IOA15為低電平輸入
for(i=0;i<3;i++) //在時鐘頻率為49M時,延時1us使IO口能反應過來
*P_Watchdog_Clear = 1;
if(*P_IOB_Data & 0xf000 ) //如果有鍵值
{
for(i=0;i<0x3c00;i++) //在時鐘頻率為49M時,延時15ms去抖
*P_Watchdog_Clear = 1;
if(*P_IOB_Data & 0xf000) //如果真有鍵值
{
value_h = *P_IOB_Data & 0xf000 ;
SP_Init_IOB(0xf000,0xf000,0xf000); //設置IOA8—IOA11為低電平輸入,設置置IOA12—IOA15為高電平輸出
for(i=0;i<3;i++) //在時鐘頻率為49M時,延時1us使IO口能反應過來
*P_Watchdog_Clear = 1;
key = *P_IOB_Data & 0x0f00 ;
key = value_h | key;
while( *P_IOB_Data & 0x0f00)
*P_Watchdog_Clear = 1; //等待彈起
return key;
}
return 0x0000;
}
return 0x0000;
*P_Watchdog_Clear = 1;
}
//=========================================================================================
//
//=========================================================================================
void key_scan(void)
{
ooo = get_key_value();
switch( ooo )
{
case 0x8100: key_value = 0;//0
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x4100: key_value = 1;//1
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x2100: key_value = 2;//2
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x1100: key_value = 3;//3
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x8200: key_value = 4;//4
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x4200: key_value = 5;//5
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x2200: key_value = 6;//6
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x1200: key_value = 7;//7
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x8400: key_value = 8;//8
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x4400: key_value = 9;//9
key_in[key_i] = key_value;
key_i += 1;
break;
case 0x2400: key_value = 10;//10 輸入數值確認功能鍵
key_in_value=0;
for(j=0,j0=1;j<key_i;j++,j0*=10)
key_in_value += key_in[key_i-j-1]*j0;
Da_data1 = 32.283*key_in_value; //0xffc0/2160=30.283
Da_data2 = 32.283*key_in_value;
key_i = 0;
break;
case 0x1400: key_value = 11;//11
break;
case 0x8800: key_value = 12;//12 步進 "+"
if(Da_data_flag)
{
if(Da_data1<0xffc0) //0xfd40=0xffc0-64*10
{
Da_data1 += 64;
key_in_value +=1;
}
Da_data_flag = 0;
}
else
{
if(Da_data2<0xffc0) //0xfd40=0xffc0-64*10
{
Da_data2 += 64; //第七位加1步進1mv;臨時乘10方便調試步進10mv
key_in_value +=1;
}
Da_data_flag = 1;
}
break;
case 0x4800: key_value = 13;//13 步進 "-"
if(Da_data_flag)
{
if(Da_data1>0x0280)
{
Da_data1 -= 64;
key_in_value -=1;
}
Da_data_flag = 0;
}
else
{
if(Da_data2>0x0280)
{
Da_data2 -= 64; //第七位加1步進1mv;臨時乘10方便調試步進10mv
key_in_value -=1;
}
Da_data_flag = 1;
}
break;
case 0x2800: key_value = 14;//14
if(Da_data_flag)
{
if(Da_data1<0xffc0) //0xfd40=0xffc0-64*10
{
Da_data1 += 64*10;
key_in_value +=10;
}
Da_data_flag = 0;
}
else
{
if(Da_data2<0xffc0) //0xfd40=0xffc0-64*10
{
Da_data2 += 64*10; //第七位加1步進1mv;臨時乘10方便調試步進10mv
key_in_value +=10;
}
Da_data_flag = 1;
}
break;
case 0x1800: key_value = 15;//15
if(Da_data_flag)
{
if(Da_data1>0x0280)
{
Da_data1 -= 64*10;
key_in_value -=10;
}
Da_data_flag = 0;
}
else
{
if(Da_data2>0x0280)
{
Da_data2 -= 64*10; //第七位加1步進1mv;臨時乘10方便調試步進10mv
key_in_value -=10;
}
Da_data_flag = 1;
}
break;
default:
break;
}
}
//=========================================================================================
//
//=========================================================================================
void LCD_ini(void)
{
Init_sys();
FG_InitGraphic();
FG_ClearScreen(0);
FG_SetBMPMode(DG_BMP_COVER); //設置位圖模式 函數定義在Splc501sys.asm
FG_PutBitmap(&shu,127-24,48); //顯示漢字 函數定義在Splc501sys.asm
FG_PutBitmap(&kong,127-24-16,48); //顯示漢字 函數定義在Splc501sys.asm
FG_PutBitmap(&heng,127-24-16*2,48);
Clear_Watch_Dog();
FG_PutBitmap(&liu,127-24-16*3,48);
FG_PutBitmap(&yuan,127-24-16*4,48);
FG_PutStr("--HuaQiao university",0,105,20);
for(j=0;j<=30;j++) //延時
for(i=0;i<0xffff;i++)
Clear_Watch_Dog();
//FG_ClearScreen(0);
//FG_PutStr(".",0,128-x,y);
}
//=========================================================================================
//
//=========================================================================================
void fenli(void)
{
tm3=(binary/1000)%10;
tm2=(binary/100)%10;
tm1=(binary/10)%10;
tm0=binary%10;
tm[0]=tm0;
tm[1]=tm1;
tm[2]=tm2;
tm[3]=tm3;
}
//=========================================================================================
//
//=========================================================================================
void show(void)
{
FG_ClearScreen(0);
FG_PutBitmap(&yu,127,64);
FG_PutBitmap(&xian,127-16,64);
FG_PutBitmap(&she,127-16*2,64);
FG_PutBitmap(&ding,127-16*3,64);
FG_PutStr(":",3,127-16*4,60);
for(i=0;i<4;i++)
{
bb=*(&b0 + tm[i]);
FG_PutStr(bb,3,(i+1)*10+27,45);
}
FG_PutStr("mA",3,25,45);
}
//=========================================================================================
//
//=========================================================================================
show1()
{
FG_PutBitmap(&shi,127,32);
FG_PutBitmap(&ji,127-16,32);
FG_PutBitmap(&ce,127-16*2,32);
FG_PutBitmap(&liang,127-16*3,32);
FG_PutStr(":",3,127-16*4,28);
for(i=0;i<4;i++)
{
bb=*(&b0 + tm[i]);
FG_PutStr(bb,3,(i+1)*10+27,13);
}
FG_PutStr("mA",3,25,13);
//for(i=0;i<0xffff;i++)
Clear_Watch_Dog();
}
//=========================================================================================
//主函數
//=========================================================================================
main()
{
*P_SystemClock = C_Fosc + C_32K_Work + C_StrongMode + C_Fosc_49M;
LCD_ini();
*P_IOA_Dir = 0xfff0;
*P_IOA_Attrib = 0xfff0;
*P_IOA_Data = 0x0000;
*P_IOB_Dir = 0xffff;
*P_IOB_Attrib = 0xffff;
*P_IOB_Data = 0x0000;
*P_DAC_Ctrl = C_DA1_Direct;
*P_ADC_Ctrl = 1;
*P_ADC_MUX_Ctrl = 1;
Ad_data = *P_ADC_LINEIN_Data;
///////////////////
while(1)
{
key_scan();
*P_IOA_Dir = 0xfff0;
*P_IOA_Attrib = 0xfff0;
*P_IOA_Data = 0x0000;
*P_IOB_Dir = 0xffff;
*P_IOB_Attrib = 0xffff;
*P_IOB_Data = 0x0000;
/////////////////////
//Da_data1 = 32.283*key_in_value;
//Da_data2 = 32.283*key_in_value;
//////////////////////////////////////////////
if(Data_i_f*1000 < key_in_value-3)
{
Da_data1 += 64;
Da_data2 += 64;
}
if(Data_i_f*1000 > key_in_value+3)
{
Da_data1 -= 64;
Da_data2 -= 64;
}
*P_DAC1 = Da_data1;
*P_DAC2 = Da_data2;
///////////////////////////////////////////////
/////////////////////
while(!(*P_ADC_MUX_Ctrl&0x8000))
*P_Watchdog_Clear = 1;
Ad_data = *P_ADC_LINEIN_Data;
Ad_data_f = (float)Ad_data/0xffc0*3.472;
////////////////////////////////////////
Data_f = Ad_data_f / n;
Data_i_f = Data_f / R;
if(Data_i_f < 1)
Data_i_f = Data_f / R;
/////////////////////////////////////////
if(xx==2500)
{
binary = key_in_value;
fenli();
show();
binary = Data_i_f*1000;
fenli();
show1();
*P_IOA_Dir = 0xfff0;
*P_IOA_Attrib = 0xfff0;
*P_IOA_Data = 0x0000;
*P_IOB_Dir = 0xffff;
*P_IOB_Attrib = 0xffff;
*P_IOB_Data = 0x0000;
xx = 0;
}
xx += 1;
/////////////////////
*P_Watchdog_Clear = 1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -