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

📄 backup.txt

📁 2005年全国大学生电子设计竞赛论文集
💻 TXT
字号:
#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;
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=1000,j0=0,binary=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.513,Ns=2.7285,Nb=30,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*1.012;  //0xffc0/2160=30.283
               Da_data2 = 32.283*key_in_value*1.013;  
               if(key_in_value>1600)
               {
                  Da_data1 += 20;
                  Da_data2 += 20;
               }  
               if(key_in_value>1800)
               {
                  Da_data1 += 10;
                  Da_data2 += 10;
               }  
               key_i = 0;
               break;  
       case 0x1400:  key_value = 11;//11 
               
               break;  
       case 0x8800:  key_value = 12;//12 步进 "+"
               if(Da_data_flag)
               {  
                  if(Da_data1<0xfd40)  //0xfd40=0xffc0-64*10
                     Da_data1 += 64*10;
                  Da_data_flag = 0;
               }
               else
               {   
                  if(Da_data2<0xfd40)  //0xfd40=0xffc0-64*10
                     Da_data2 += 64*10; //第七位加1步进1mv;临时乘10方便调试步进10mv
                  Da_data_flag = 1;
               }   
               break;  
       case 0x4800:  key_value = 13;//13 步进 "-"
               if(Da_data_flag)
               {
                  if(Da_data1>0x0280)
                     Da_data1 -= 64*10;
                  Da_data_flag = 0;
               }
               else
               {  
                  if(Da_data2>0x0280) 
                     Da_data2 -= 64*10; //第七位加1步进1mv;临时乘10方便调试步进10mv
                  Da_data_flag = 1;
               }   
               break;  
       case 0x2800:  key_value = 14;//14
               
 
               break;  
       case 0x1800:  key_value = 15;//15
                
           
               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_PutBitmap(&yu,127,64);
   FG_PutBitmap(&xian,127-16,64);
   FG_PutBitmap(&she,127-16*2,64);
   FG_PutBitmap(&ding,127-16*3,64);
   for(i=0;i<4;i++)
   {
      bb=*(&b0 + tm[i]);		
		FG_PutStr(bb,3,i*10,64); 
   }
   
}
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_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 - 0.006;
      /////////////////////////////////////////   
      binary = key_in_value;
      fenli();
      show();
      /////////////////////
      *P_Watchdog_Clear = 1;
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -