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

📄 fivechess.c

📁 在ARM7 44B0上开发的一个能下五子棋的程序 ADS1.2版本
💻 C
字号:
#include "h\fivechess.h"

void Main(void)
{
 

    rSYSCFG=SYSCFG_8KB;

    Isr_Init();
    Port_Init();
    Uart_Init(0,115200);
    LcdInit();
    rPDATB =rPDATB|0x400;
    Uart_Select(0);

    InitScreen();
    InitVarible();
    DrawCurrentPlayer(Player);
    Delay(0);  //calibrate Delay()
    while(1)
    {
	 Test_Kb();
    }
}

void Isr_Init(void)
{
    U32 i;
    
    pISR_UNDEF=(unsigned)HaltUndef;
    pISR_SWI  =(unsigned)HaltSwi;
    pISR_PABORT=(unsigned)HaltPabort;
    pISR_DABORT=(unsigned)HaltDabort;
    
     for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)
    {
	*((volatile unsigned *)i)=0xEA000000+0x1FFE;
    }
    
    rINTCON=0x5;	  // Non-vectored,IRQ enable,FIQ disable    
    rINTMOD=0x0;	  // All=IRQ mode
    rINTMSK|=BIT_GLOBAL|BIT_EINT3;	  // All interrupt is masked.
}

void HaltUndef(void)
{
    Uart_Printf("Undefined instruction exception!!!\n");
    while(1);
}

void HaltSwi(void)
{
    Uart_Printf("SWI exception!!!\n");
    while(1);
}

void HaltPabort(void)
{
    Uart_Printf("Pabort exception!!!\n");
    while(1);
}

void HaltDabort(void)
{
    Uart_Printf("Dabort exception!!!\n");
    while(1);
}

void keyboard_ISR(void) 
{

    	char x,y,xrecord,yrecord,temp;
    
     	rI_ISPC=BIT_EINT0;	//clear pending_bit
		rPDATG=0X00;
       	Delay(400);		//delay 40ms
    	if((rPDATF&0x1E0)==0x1E0)
       	{
       		return;			//no keyboard press,return
       	}
    	else
    	{
    		x=1;
    		y=1;
    		xrecord=~rPDATF>>5&0x0F;		
    		while(xrecord!=0x1)			//judge row
    		{
    			x=x+1;
    			xrecord=xrecord>>1;    
    			if(xrecord==0)
    			{
    				rPDATG=0X0F;		// no ,return
    				return;}
   	 	}
   	 	Delay(200);		//delay 20ms
    		rPDATG=0XEF; 				//input high
    		while((rPDATF&0x1E0)==0x1E0)		
   	 	{
    			rPDATG=rPDATG<<1;
    			temp=rPDATG;
    			if((temp&0xf0)==0XF0)		//noboard press,return
    			{
    				rPDATG=0X0F;
    				return;}    	
    		}
    		Delay(200);		//delay 10ms
   	 	yrecord=~rPDATG>>4&0x0F;
   	 	while(yrecord!=0x1)			// judge line
    		{
    			y=y+1;
    			yrecord=yrecord>>1;
    			if(yrecord==0)
    			{
    				rPDATG=0X0F;	//no board press,return
    				return;}
    		}
    		Led_Display(x+(y-1)*4-1);
    		Uart_Printf("%3d",x+(y-1)*4-1); 
    		KeyAction(x+(y-1)*4-1);
    		Delay(1200);		//delay 40ms
    		rPDATG=0X0F;
    	}
}


void Test_Kb(void)
{
    pISR_EINT0=(unsigned)keyboard_ISR;
    
    Uart_Printf("keyboard test for S3C44B0X\n");
    Uart_Printf("press any key,it will display on 8-SEG\n");
    Uart_Printf("Typing any key to exit!!!\n");	 
    
    rINTMSK =~(BIT_GLOBAL|BIT_EINT0); 
    while(1);


}

void InitScreen(void)
{
 U32 i;
 clrscreen();
 LCD_DrawRectange(10,20,210,220,FCOLOR);
 for(i=1;i<10;i++)
  LCD_DrawHLine(10,210,20+i*20,FCOLOR,1);
 for(i=1;i<10;i++)
  LCD_DrawVLine(20,220,10+i*20,FCOLOR,1);
  //draw 'c'
 LCD_DrawVLine(200,205,230,FCOLOR,1);
 LCD_DrawHLine(230,240,205,FCOLOR,1);
 LCD_DrawVLine(200,205,240,FCOLOR,1);
 //draw 'p'
 LCD_DrawRectange(230,190,240,195,FCOLOR);
 LCD_DrawHLine(240,245,195,FCOLOR,1);
 //draw ':'
 PutPixelColor(233,185,High_Low(FCOLOR));
 PutPixelColor(238,185,High_Low(FCOLOR));
}

void InitVarible(void)
{
 int i,j;
 for(i=ChessLen-1;i>=0;i--)
  for(j=ChessWid-1;j>=0;j--)
   ChessBG[i][j]=0;
 Player=1;
 x=5;
 y=5;
  //init position
 //LCD_DrawRetange((10+6*20-ChessR,220-6*20-ChessR,10+6*20+ChessR,220-6*20+ChessR,COLOR3);
 DrawChess(10+x*20,220-y*20,COLOR3);
}
void DrawChess(U32 x,U32 y,U8 c)
{
 int i;
 for(i=ChessR;i>0;i--)
  LCD_DrawRectange(x-i,y-i,x+i,y+i,c);
}
void DrawChessBG(void)
{
 int i,j;
 clrscreen();
 InitScreen();
 for(i=ChessLen-1;i>=0;i--)
  for(j=ChessWid-1;j>=0;j--)
  {
    switch(ChessBG[i][j])
    {
     case 1:
     		DrawChess(10+i*20,220-j*20,COLOR1);
     		break;
     case 2:
     		DrawChess(10+i*20,220-j*20,COLOR2);
     		break;
     default:
     		break;
    }
  }
 DrawChess(10+x*20,220-y*20,COLOR3);
}

void KeyAction(U32 key)
{
 U32 temp;
 temp=ChessBG[x][y];
 switch(key)
 {
  case 6://down
  		 if(x<10)
  		 {
  		  ChessBG[x][y]=temp;
  		  x++;
  		  DrawChessBG();
  		  DrawCurrentPlayer(Player);
  		  DrawChess(10+x*20,220-y*20,COLOR3);
  		 }
  		 break;
  		  
  case 2://left
  		if (y>0)
  		{
  		 ChessBG[x][y]=temp;
  		 y--;
  		 DrawChessBG();
  		 DrawCurrentPlayer(Player);
  		 DrawChess(10+x*20,220-y*20,COLOR3);
  		}
  		break;
  case 10://right
  		if (y<10)
  		{
  		 ChessBG[x][y]=temp;
  		 y++;
  		 DrawChessBG();
  		 DrawCurrentPlayer(Player);
  		 DrawChess(10+x*20,220-y*20,COLOR3);
  		}
  		break;
  case 5://up
  		 if(x>0)
  		 {
  		  ChessBG[x][y]=temp;
  		  x--;
  		  DrawChessBG();
  		  DrawCurrentPlayer(Player);
  		  DrawChess(10+x*20,220-y*20,COLOR3);
  		 }
  		 break;  
  case 14://play
  		if(ChessBG[x][y]==0)
  		{
  		 ChessBG[x][y]=Player;
  		 DrawChessBG();
  		 DrawChess(10+x*20,220-y*20,COLOR3);
  		 if (IsWin(Player))
  		 {
  		  DrawWinner();
  		 }
  		 Player=3-Player;
  		 DrawCurrentPlayer(Player);
  		}
  		break;
  case 15://reset
  		InitScreen();
  		InitVarible();
  		break;
  default:
  		break;
 }
}

void DrawCurrentPlayer(U32 p)
{
 if (p==1)
 {
  LCD_DrawHLine(230,240,180,FCOLOR,1);
  PutPixelColor(231,179,High_Low(FCOLOR));
  LCD_DrawVLine(177,182,240,FCOLOR,1);
 }
 else
 {
  LCD_DrawVLine(175,180,230,FCOLOR,1);
  LCD_DrawVLine(175,180,235,FCOLOR,1);
  LCD_DrawVLine(175,180,240,FCOLOR,1);
  LCD_DrawHLine(230,235,175,FCOLOR,1);
  LCD_DrawHLine(235,240,180,FCOLOR,1);
 }
}
unsigned int IsWin(unsigned int p)
{
 //U32 cx,cy;
 unsigned int i;
 U32 count;
 //cx=x,cy=y;
 count=0;
 for(i=0;i<11;i++)
 {
  if (ChessBG[x][i]==p)
   count++;
  else
   count=0;
  }
  if (count>WinNum-1) return 1;
  count=0;
  for(i=0;i<11;i++)
 {
  if (ChessBG[i][y]==p)
   count++;
  else
   count=0;
  }
 if (count>WinNum-1) return 1;
 return 0;
 
}
void DrawWinner()
{
 unsigned int i,j;
 
 for(i=230,j=120;i<=240;i++)
 {
  PutPixelColor(i,j,High_Low(BGCOLOR));
  if (j<125)j++;
 }
 for(i=230,j=130;i<=240;i++)
 {
  PutPixelColor(i,j,High_Low(BGCOLOR));
  if (j>125)j--;
 }
  
}

⌨️ 快捷键说明

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