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

📄 main.c

📁 实现单片机与计算机之间的usb通讯 实现单片机与计算机之间的usb通讯
💻 C
字号:
/*四层楼电梯模拟*/
#include "SPCE061A.h"
#include "a2000.h"
#include "consist.h"
#define watchdog_clear (volatile unsigned int *)0x7102
#define	P_IOA_Data     (volatile unsigned int *)0x7000;        // Write Data into data register and read from IOA pad
#define P_IOB_Data     (volatile unsigned int *)0x7005;        // Write Data into the data register and read from IOB pad
#define	C_BELL       00       //报时声
#define	C_T00        01       //0
#define	C_T01        02       //1
#define	C_T02        03       //2
#define	C_T03        04       //3
#define	C_T04        15       //4
int up1,up2,up3,down2,down3,down4,goto1,goto2,goto3,goto4; /*记录用户请求*/
int open_color;/*电梯状态颜色*/
int shang,floor;/*相关参数*/
unsigned int uiValue,ko;	
unsigned int uiDelay=0x0008;
int keyscan1(void);
int keyscan2(void);
void Clear_WatchDog(void);
void POA_Initial(void);
void POB_Initial(void);
void goto1_off(void);
void goto1_on(void);
void goto2_off(void);
void goto3_on(void);
void goto3_off(void);
void goto3_on(void);
void goto4_off(void);
void goto4_on(void);
void up1_off(void);
void up1_on(void);
void up2_off(void);
void up2_on(void);
void up3_off(void);
void up3_on(void);
void down2_off(void);
void down2_on(void);
void down3_off(void);
void down3_on(void);
void down4_off(void);
void down4_on(void);
void stoplift_off(void);
void stoplift_on(void);
void downlift_off(void);
void downlift_on(void);
void uplift_off(void);
void uplift_on(void);
void screen_1(void);
void screen_2(void);
void screen_3(void);
void screen_4(void);

void delay(void)
{   int i,j;
    for(i=1;i<334;i++)
      {for(j=0;j<0xffff;j++)
	     {Clear_WatchDog();
        	}
       }	 
}
/********************************/

void screen_show(int n)
{switch(n)
  { case 1:screen_1();break;
    case 2:screen_2();break;
    case 3:screen_3();break;
    case 4:screen_4();break;
    default:break;
}


}

/************************播放提示语音*********************/
void PlayRespond(unsigned int Result)      
{  SACM_A2000_Initial(1);
   SACM_A2000_Play(Result,3,3);
   while((SACM_A2000_Status()&0x0001) != 0)
    { Clear_WatchDog();
	  SACM_A2000_ServiceLoop(); 
    }
   SACM_A2000_Stop();
}

/*报楼层*/
void playsound(int n)
{PlayRespond(C_BELL);
 PlayRespond(n+C_BELL);
  }

/*初始化*/
void init(void)
{ 
  up1 = 0;
  up2 = 0;
  up3 = 0;
  down2 = 0;
  down3 = 0;
  down4 = 0;
  up1_off();
  up2_off();
  up3_off();
  down2_off();
  down3_off();
  down4_off();
  stoplift_on();
  uplift_off();
  downlift_off();
  screen_show(floor);
  }
  
void stay(void)
{ 
	init();
}

void stop(void)
{
	stoplift_on();
	delay();
}

void opendoor(int n)
{ open_color=1;  
  if(shang = 1)
	  { 
	  	switch(n)
	 	  {case 1: up1=0;goto1=0;goto1_off();up1_off();break;
	 	   case 2: up2=0;goto2=0;goto2_off();up2_off();break;
	 	   case 3: up3=0;goto3=0;goto3_off();up3_off();break;
	 	   case 4: goto4=0;down4=0;goto4_off();down4_off();break;
	 	  }
	 	}  
	else
	    {
	     switch(n)
	      {case 1:up1=0;goto1=0;goto1_off();up1_off();break;
	 	   case 2:down2=0;goto2=0;goto2_off();down2_off();break;
	 	   case 3:down3=0;goto3=0;goto3_off();down3_off();break;
	 	   case 4:down4=0;goto4=0;goto4_off();down4_off();break;
	 	  }
	   } 
delay();
delay();
delay();	
open_color=0;    
}

void timer_Load(void)
{ screen_show(floor);
  playsound(floor);
  if(floor > 4)
    { floor = floor - 2;
      shang = 0;
    }
  if(floor < 1)
    {floor = floor + 2;
     shang=1;
   	}   
  if(up1 == 1 || up2 == 1 || up3 == 1 || down2 == 1 || down3 == 1 || down4 == 1 || goto1 == 1 || goto2 == 1 || goto3 == 1 || goto4 == 1)
	{ stoplift_off(); 
	  if(shang == 1)
	    {uplift_on();
	  	 downlift_off();
	  	 switch(floor)
		      { case 1:
		      	 if(up1 == 1 || goto1 == 1)
			       stop();
			       opendoor(1);
			       break;
			   case 2:
			     if((up2 == 0 && up3 == 0 && down3 == 0 && down4 == 0 && goto3 == 0 && goto4 == 0) && (up1 == 1 || down2 == 1 || goto1 == 1))
			        {shang=0;
			        	}
			     if(up2 == 1 || goto2 == 1)
			       stop();
			       opendoor(2);
			       break;
			   case 3:
			     if((up3 == 0 && down4 == 0 && goto4 == 0) && (up1 == 1 || down2 == 1 || up2 == 1 || down3 == 1 || goto1 == 1 || goto2 == 1))
			        {shang=0;
			        	}
			      if(up3 == 1 || goto3 == 1)
			        stop();
			        opendoor(3);
			        break;
			   case 4:
			      if(goto4 == 1)
			        stop();
			        opendoor(4);
			        break;
		      }
		  floor++; 
		  }
		  else
	         {uplift_off();
	  	  	  downlift_on();
	         switch(floor)
			    { case 1:
			      if(goto1 == 1)
			        stop();
			        opendoor(1);
			        break;
			     case 2:
			       if(up1 == 0 && down2 == 0 && goto1 == 0 && (up2 == 1 || down3 == 1 || up3 == 1 || down4 == 1 || goto3 == 1 || goto4 == 1))
			        {shang=1;
			        	} 
			       if(down2 == 1 || goto2 == 1)
			         stop();
			         opendoor(2);
			         break;
			     case 3:
			       if(up1 == 0 && down2 == 0  && up2 == 0 && down3 == 0 && goto1 == 0 && goto2 == 0 && (up3 == 1 || down4 == 1 || goto4 == 1))
			        {shang=1;
			        	}
			       if(down3 == 1 || goto3 == 1)
			         stop();
			         opendoor(3);
			         break;
			     case 4:
			       if(down4 == 1 || goto4 == 1)
			         stop();
			         opendoor(4);
			         break;
	             }
	         floor--;
	         }
	 }          
else
   {
   uiValue=-1;
   stay();	
	}
}


int KeyFind()                                //键扫描并取得健值
{int keyfirst=0,keylast;
    keyfirst=keyscan1();                       //取得第一次扫描的值
	keylast=keyscan2();                       //取得第二次扫描的值
	uiValue=0x000f;
    keyfirst=uiValue&keyfirst;
    uiValue=0x00f0;
    keylast=uiValue&keylast;
    keyfirst=keyfirst|keylast;
    uiValue=0x00ff;
    keyfirst^=uiValue;                        //数据处理得到想要的扫描值
    Clear_WatchDog();
     switch(keyfirst)                         //把对应的值赋给uiValue
	{
		case 0x0000:
		  break;
		case 0x00ee:
		  uiValue=0;
		  break;
		case 0x00de:
		  uiValue=1;
		  break;
		case 0x00be:
		  uiValue=2;
		 break;
		case 0x007e:
		  uiValue=3;
		  break;
		case 0x00ed:
		  uiValue=4;
		  break;
		case 0x00dd:
		  uiValue=5;
		  break;
		case 0x00bd:
		  uiValue=6;
		 break;
		case 0x007d:
		  uiValue=7;
		  break;
	    case 0x00eb:
	    uiValue=8; 
	    break;
	    case 0x00db:
	      uiValue=9;
	      break;
	    case 0x00bb:
	      uiValue=10;
	      break;
	    case 0x007b:
	      uiValue=11;
	      break;
	    case 0x00e7:
	      uiValue=12;
	      break;
	    case 0x00d7:
	      uiValue=13;
	      break;
	    case 0x00b7:
	      uiValue=14;
	     break;
	    case 0x0077:
	      uiValue=15;
	     break;
	     return ;
}
	if(uiValue==255) 
	  { ko=ko;}
       else   
          {
    	    ko=uiValue;
           }
	  
return uiValue;          
}


void scankey(void)
{ uiValue=KeyFind();
 if(uiValue >= 0 )
    {switch(uiValue)
		{case 0:
		   up1 = 1;
           up1_on();
           break;
		 case 1:
		   up2 = 1;
           up2_on();
           break;
		case 2:
		   down2 = 1;
           down2_on();
           break;
		case 3:
		   up3 = 1;
           up3_on();
           break;
		case 4:
		   down3 = 1;
           down3_on();
           break;
		case 5:
		   down4 = 1;
	       down4_on();
	       break;
		case 6:
		   goto1_on();
	       goto1 = 1;
	       break;
		case 7:
		   goto2_on();
	       goto2 = 1;
	       break;
		case 8:
		   goto3_on();
	       goto3 = 1;
	       break;
		case 9:
		   goto4_on();
	       goto4 = 1;
	       break;
	    default:
	       break; 
	  } 
   }  
}

main() //低四位为带下拉电阻的输入端
{ 
 POA_Initial();
 POB_Initial();
 Clear_WatchDog();                                   
 floor=1;
 shang=1;	
 stoplift_on();
 uiValue=-1;
 init(); 
 while(1) 
  {scankey();
   timer_Load();
   Clear_WatchDog();
   delay();
  }  
}

⌨️ 快捷键说明

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