基于51单片机俄罗斯方块小游戏

基于51单片机俄罗斯方块游戏

(仿真+程序)

功能介绍

具体功能:

1.用LCD12864显示游戏界面;

2.用四个按键控制游戏(左、右移、下移、翻转);

3.游戏规则和平时玩的俄罗斯方块一样;

​演示视频:

基于51单片机俄罗斯方块游戏 

添加图片注释,不超过 140 字(可选)

程序

#include <AT89X51.H>
/***公众号:木子单片机****/
#define DOWNTIME 30
#define MAXHANG 20
#define MAXLIE  16
#define MAXPIX  3
#define PUSHON  50

#define LCD P2
#define EN  P3_0
#define RW  P3_1
#define RS  P3_2
#define CS1 P3_3
#define CS2 P3_4

#define KEYLEFT P1_0
#define KEYDOWN P1_7
#define KEYRIGH P1_6
#define KEYROTATION P1_1

unsigned char gkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;
unsigned char miao=0,fen=0;
unsigned char downok;
bit keyflag,timeupdate,fashionupdate;
unsigned char idata cubeMap[MAXHANG][2];
typedef struct{
               unsigned char code * box;
 			   unsigned char cube : 4;
			   unsigned char state : 4;
			   char row;
			   char column;
			   } block;
block this;
unsigned int score=0;
unsigned char speed=1;
unsigned char code bittable[8]={1,2,4,8,0x10,0x20,0x40,0x80};
unsigned char code cube[]=
{
/*  ■
  ■■■
*/
0,4,0xe,0,  0,2,6,2,     0,7,2,0,     4,6,4,0,

/*■
  ■■■ 
*/
0,8,0xe,0,  0,4,4,0xc,   0,0,0xe,2,   0,6,4,4,
/*■■■
  ■    
*/
0,0xe,8,0,  0,4,4,6,     0,1,7,0,     6,2,2,0,
/*■■
    ■■
*/
0,0xc,6,0,  0,2,6,4,     0,6,3,0,     2,6,4,0,
/*  ■■
  ■■  
*/
0,6,0xc,0,  0,4,6,2,     0,3,6,0,     4,6,2,0,
/*■■■■ 
*/
0,0xf,0,0,  4,4,4,4,     0,0,0xf,0,   2,2,2,2,
/*■■
  ■■ 
*/
0,6,6,0,    0,6,6,0,     0,6,6,0,     0,6,6,0
}; 
unsigned char code asii[]=
{
    0x3E,0x51,0x49,0x45,0x3E, // -0-
    0x00,0x42,0x7F,0x40,0x00, // -1-
    0x62,0x51,0x49,0x49,0x46, // -2-
    0x21,0x41,0x49,0x4D,0x33, // -3-
    0x18,0x14,0x12,0x7F,0x10, // -4-
    0x27,0x45,0x45,0x45,0x39, // -5-
    0x3C,0x4A,0x49,0x49,0x31, // -6-
    0x01,0x71,0x09,0x05,0x03, // -7-
    0x36,0x49,0x49,0x49,0x36, // -8-
    0x46,0x49,0x49,0x29,0x1E, // -9-
    0x00,0x36,0x36,0x00,0x00, // -:-10
//next
    0x7F,0x04,0x08,0x10,0x7F, // -N-11
    0x7F,0x49,0x49,0x49,0x41, // -E-12
    0x63,0x14,0x08,0x14,0x63, // -X-13
    0x01,0x01,0x7F,0x01,0x01, // -T-14
//speed
    0x26,0x49,0x49,0x49,0x32, // -S-15
    0x7F,0x09,0x09,0x09,0x06, // -P-16
    0x7F,0x49,0x49,0x49,0x41, // -E-17
    0x7F,0x41,0x41,0x41,0x3E, // -D-18
//score
    0x3E,0x41,0x41,0x41,0x22, // -C-19   
    0x3E,0x41,0x41,0x41,0x3E, // -O-20
    0x7F,0x09,0x19,0x29,0x46, // -R-21
    0x00,0x00,0x00,0x00,0x00,  // - -22
//GAME OVER
    0x3E,0x41,0x51,0x51,0x72, // -G-23
    0x7C,0x12,0x11,0x12,0x7C, // -A-24
    0x7F,0x02,0x0C,0x02,0x7F, // -M-25
    0x1F,0x20,0x40,0x20,0x1F, // -V-26
//TIME
//  0x00,0x41,0x7F,0x41,0x00  // -I-27
};

void lcdCmd(unsigned char cmd)
{
 bit ea;
 ea=EA;
 EA=0;
 EN=0;
 RW=0;
 RS=0;
 LCD=cmd;
 EN=1;
 EN=1;
 EN=0;
 EA=ea;
}
//-------------------------------------------------------------------------------
void lcdWriteByte(unsigned char ch)
{
 EN=0;
 RS=1;
 RW=0;
 LCD=ch;
 EN=1;
 EN=1;
 EN=0;
}
//--------------------------------------------------------------------------------
void lcdSetPage(unsigned char page)
{
  page &=0x7;
  page +=0xb8;
  lcdCmd(page);
}
//--------------------------------------------------------------------------------
void lcdSetColumn(unsigned char column)
{
  column &=0x3f;
  column +=0x40;
  lcdCmd(column);
}
//--------------------------------------------------------------------------------
//character fron=5*8
void lcdPlayChar(unsigned char index,unsigned char page,unsigned char colume)
{
 unsigned char i,temp;
 unsigned int p;
 p=5*index;
 for(i=colume;i<colume+5;i++)
  {
    if(i<64)
	 {
	  CS1=1;
	  CS2=0;
	  temp=i;
	 }
	else
	 {
	  CS1=0;
	  CS2=1;
	  temp=i-64;
	 }
	lcdSetPage(page);
	lcdSetColumn(temp);
	lcdWriteByte(asii[p++]);
  }
}
//---------------------------------------------------------------------------------
//rectangle(3,0,50,60)
void rectangle(void)
{
  unsigned char i,page;
  CS1=1;
  CS2=0;
  lcdSetPage(0);  
  lcdSetColumn(2); 
  EN=0;
  RS=1;
  RW=0;
  LCD=0xff;
  EN=1;
  EN=1;
  EN=0;
  for(i=3;i<51;i++)
   {
     EN=0;
     RS=1;
     RW=0;
     LCD=0x1;
     EN=1;
     EN=1;
     EN=0;   
   }
  EN=0;
  RS=1;
  RW=0;
  LCD=0xff;
  EN=1;
  EN=1;
  EN=0;
//---------------------------
for(page=1;page<7;page++)
 { 
  lcdSetPage(page);  
  lcdSetColumn(2); 
  EN=0;
  RS=1;
  RW=0;
  LCD=0xff;
  EN=1;
  EN=1;
  EN=0;
  for(i=3;i<51;i++)
   {
     EN=0;
     RS=1;
     RW=0;
     LCD=0x0;
     EN=1;
     EN=1;
     EN=0;   
   }
  EN=0;
  RS=1;
  RW=0;
  LCD=0xff;
  EN=1;
  EN=1;
  EN=0;
 }
//---------------------------
  lcdSetPage(7);  
  lcdSetColumn(2); 
  EN=0;
  RS=1;
  RW=0;
  LCD=0x1f;
  EN=1;
  EN=1;
  EN=0;
  for(i=3;i<51;i++)
   {
     EN=0;
     RS=1;
     RW=0;
     LCD=0x10;
     EN=1;
     EN=1;
     EN=0;   
   }
  EN=0;
  RS=1;
  RW=0;
  LCD=0x1f;
  EN=1;
  EN=1;
  EN=0;
}
//--------------------------------------------------------------------
//x:列;y行,页 3*3
void lcdPutPix(unsigned char x, unsigned char y,unsigned char flag)
{
  unsigned char i,dat,bitmask,nextbit;
  bit bflag,pflag,ea;
  x=x*MAXPIX;
  y=y*MAXPIX;
  bflag=0;
  pflag=0;
  i=y%8;
  if(i==0)
   bitmask=0x7;
  else if(i==1)
   bitmask=0xe;
  else if(i==2)
   bitmask=0x1c;
  else if(i==3)
   bitmask=0x38;
  else if(i==4)
   bitmask=0x70;
  else if(i==5)
   bitmask=0xe0;
  else if(i==6)
   {
    bflag=1;
    bitmask=0xc0;
    nextbit=1;
   }
  else if(i==7)
   {
    bflag=1;
    bitmask=0x80;
    nextbit=3;
   }
  if(x<62)
   {
    CS1=1;
    CS2=0; 
   }
  else if(x>63)
   {
    x-=64;
    CS1=0;
    CS2=1;
   }
  else
   pflag=1;
  lcdSetPage(y/8);
  for(i=x;i<x+MAXPIX;i++)
   {
    if(pflag)
     {
      if(i==62 || i==63)
       {
         CS1=1;
         CS2=0;
         lcdSetPage(y/8);
        }
      else if(pflag && i==64)
       {
        CS1=0;
        CS2=1;
        lcdSetPage(y/8);
       }
      } 
     lcdSetColumn(i); 
     ea=EA;
     EA=0;
     EN=0;
     LCD=0xff;
     RS=1;
     RW=1; 
     EN=1; 
     EN=0;
 
     EN=1; 
     dat=LCD;
     EN=0;
     if(flag==1)
       dat|=bitmask;
     else
       dat&=~bitmask;
     lcdSetColumn(i);  
 
     EN=0;
     RW=0;
     RS=1;
     LCD=dat;
     EN=1;
     EN=1;
     EN=0;
     EA=ea;
   }
 if(bflag)
  {
   lcdSetPage(y/8+1);
   for(i=x;i<x+MAXPIX;i++)
   {
    if(pflag)
     {
      if(i==62 || i==63)
       {
        CS1=1;
        CS2=0;
        lcdSetPage(y/8+1);
       }
      else if(pflag && i==64)
       {
        CS1=0;
        CS2=1;
        lcdSetPage(y/8+1);
       }
      } 
     lcdSetColumn(i); 
     ea=EA;
     EA=0;
     EN=0;
     LCD=0xff;
     RS=1;
     RW=1; 
     EN=1; 
     EN=0;
 
     EN=1; 
     dat=LCD;
     EN=0;
     if(flag==1)
       dat|=nextbit;
     else
       dat&=~nextbit;
     lcdSetColumn(i);  
 
     EN=0;
     RW=0;
     RS=1;
     LCD=dat;
     EN=1;
     EN=1;
     EN=0;
     EA=ea;  
  }
 }
}
//------------------------------------------------------------------
void lcdClear(void)
{
  unsigned char i,page;
  CS1=1;
  CS2=0;
  for(page=0;page<8;page++)
   {
    lcdSetPage(page);
    lcdSetColumn(0);
    for(i=0;i<64;i++)
	   lcdWriteByte(0);
   }
  CS1=0;
  CS2=1;
  for(page=0;page<8;page++)
   {
    lcdSetPage(page);
    lcdSetColumn(0);
    for(i=0;i<64;i++)
	   lcdWriteByte(0);
   }
}
//-----------------------------------------------------------------
#define STAR 53
#define WIDE 6
void lcdIni(void)
{
 lcdCmd(0x3f);
 lcdCmd(0xc0);
 lcdClear();
 rectangle();
//NEXT
 lcdPlayChar(11,0,STAR);
 lcdPlayChar(12,0,STAR+1*WIDE);
 lcdPlayChar(13,0,STAR+2*WIDE);
 lcdPlayChar(14,0,STAR+3*WIDE);
//SPEED
 lcdPlayChar(15,3,STAR);
 lcdPlayChar(16,3,STAR+1*WIDE);
 lcdPlayChar(17,3,STAR+2*WIDE);
 lcdPlayChar(17,3,STAR+3*WIDE);
 lcdPlayChar(18,3,STAR+4*WIDE);
//01
 lcdPlayChar(0,4,STAR+2*WIDE);
 lcdPlayChar(1,4,STAR+3*WIDE);
 
//SCORE
 lcdPlayChar(15,5,STAR);
 lcdPlayChar(19,5,STAR+1*WIDE);
 lcdPlayChar(20,5,STAR+2*WIDE);
 lcdPlayChar(21,5,STAR+3*WIDE);
 lcdPlayChar(12,5,STAR+4*WIDE);

 lcdPlayChar(0,6,STAR+1*WIDE);
 lcdPlayChar(0,6,STAR+2*WIDE);
 lcdPlayChar(0,6,STAR+3*WIDE);
 lcdPlayChar(0,6,STAR+4*WIDE);
//TIME
 lcdPlayChar(0,7,STAR);
 lcdPlayChar(0,7,STAR+1*WIDE);
 lcdPlayChar(10,7,STAR+2*WIDE);
 lcdPlayChar(0,7,STAR+3*WIDE);
 lcdPlayChar(0,7,STAR+4*WIDE);
}
//-----------------------------------------------------------------
void showScoreSpeed(void)
{
  unsigned char num[5];
  char i;
  unsigned int temp;
  temp=score;
  for(i=0;i<5;i++)
   {
     num[i]=temp%10;
	 temp=temp/10;
   }
  for(i=4;i>0;i--)
   {
     if(num[i]==0)
	  num[i]=22;
	 else
	  break;
   }
  for(i=4;i>-1;i--)
   lcdPlayChar(num[i],6,STAR+(4-i)*WIDE);

 lcdPlayChar(speed/10,4,STAR+2*WIDE);
 lcdPlayChar(speed%10,4,STAR+3*WIDE);
}
//-------------------------------------------------------------------
void timeServer(void)
{
  if(timeupdate)
   {
    timeupdate=0;
    lcdPlayChar(fen/10,7,STAR);
    lcdPlayChar(fen%10,7,STAR+1*WIDE);
    lcdPlayChar(10,7,STAR+2*WIDE);
    lcdPlayChar(miao/10,7,STAR+3*WIDE);
    lcdPlayChar(miao%10,7,STAR+4*WIDE);    
   }
  if(fashionupdate)
   {
     fashionupdate=0;
     lcdPlayChar(22,7,STAR+2*WIDE);
   }
}
//===================================================================
void t0isr(void) interrupt 1
{
  unsigned char key;
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  downtimegap++;
  t0ms=++t0ms%100;
  if(t0ms==0)
   {
     timeupdate=1;
     miao=++miao%60;
	 if(miao==0)
	  fen=++fen%60;
   }
  if(t0ms==50)
   fashionupdate=1;
//----------------------------
  key=0xff;
  KEYLEFT=1;
  KEYRIGH=1;
  KEYROTATION=1;
  KEYDOWN=1;
  if(!KEYLEFT)
    key=0;
  if(!KEYRIGH)
    key=1;
  if(!KEYROTATION)
    key=2;
  if(!KEYDOWN)
    key=3;

  switch(keystate)
   {
    case 0: if(key!=gkey)
	         {
			  gkey=key;
			  keystate=1;
			 }
			break;
   case 1: if(key==gkey)
             {
			   t0ms1=0;
			   keystate=2;
			   if(key!=0xff)
			     keyflag=1;
			 }
		   else
		     keystate=0;
		   break;
   case 2: if(key==gkey)
             {
			   if(t0ms1<PUSHON)
			     t0ms1++;
			 }
		   else
		    {
			  keystate=0;
			  keyflag=0;
			  gkey=0xff;
			}
		   break;
   }

}
//===================================================================
void showNextCube(unsigned char code * p,unsigned char x,unsigned char y)
{
 unsigned char i,j,temp;
  for(i=0;i<4;i++)
   {  
      temp=1;
      for(j=0;j<4;j++)
      {
        if(p[i] & temp)
         lcdPutPix(x+j,y+i,1); 
        else
         lcdPutPix(x+j,y+i,0); 
        temp<<=1;
      }
   }  
}
//------------------------------------------------------------------
void createCube(void)
{
  static unsigned char next;
  this.cube=next;
  next=TL0%7;
  this.row=0;
  this.column=6;
  this.state=0;
  this.box=cube+16*this.cube;
  showNextCube(cube+16*next,19,3);
}
//------------------------------------------------------------------
void showCubeMap(void)
{
 unsigned char hang,lie,temp; 
 for(hang=MAXHANG-1;hang>0;hang--)
  {
   if(cubeMap[hang][0]==0 && cubeMap[hang][1]==0)
     break;

   for(lie=0;lie<(MAXLIE/8);lie++)
    {
     temp=8*lie;
     if(cubeMap[hang][lie]&0x01)
       lcdPutPix(temp+1,hang,1);

     if(cubeMap[hang][lie]&0x02)
       lcdPutPix(temp+2,hang,1);

     if(cubeMap[hang][lie]&0x04)
       lcdPutPix(temp+3,hang,1);

     if(cubeMap[hang][lie]&0x08)
       lcdPutPix(temp+4,hang,1);

     if(cubeMap[hang][lie]&0x10)
       lcdPutPix(temp+5,hang,1);

     if(cubeMap[hang][lie]&0x20)
       lcdPutPix(temp+6,hang,1);

     if(cubeMap[hang][lie]&0x40)
       lcdPutPix(temp+7,hang,1);

     if(cubeMap[hang][lie]&0x80)
       lcdPutPix(temp+8,hang,1);
    }
  }
}
//-------------------------------------------------------------------
void writeCubeToMap(void)
{
  unsigned char row,column,temp;
  unsigned char hang,lie;
  for(row=0;row<4;row++)
   {
     temp=1;
     for(column=0;column<4;column++)
	  {
	    if(this.box[row] & temp)
		 {
		   hang=this.row+row;
		   lie=this.column+column;
           cubeMap[hang][lie/8] |=bittable[lie%8];
	       lcdPutPix(lie+1,hang,1);			  
		 }
		temp<<=1;
	  }
   }
}
//-------------------------------------------------------------------
void clearCubeFromMap(void)
{
  unsigned char row,column,temp;
  unsigned char hang,lie;
  for(row=0;row<4;row++)
   {
     temp=1;
     for(column=0;column<4;column++)
	  {
	    if(this.box[row] & temp)
		 {
		   hang=this.row+row;
		   lie=this.column+column;
           cubeMap[hang][lie/8] &=~bittable[lie%8];
	       lcdPutPix(lie+1,hang,0);		  
		 }
		temp<<=1;
	  }
   }
}
//-------------------------------------------------------------------
unsigned char checkBorder(void)
{
 if(this.box[3]!=0 && this.row>(MAXHANG-4)) 
    return 1;
  else if(this.box[2]!=0 && this.row>(MAXHANG-3))
    return 1;
  else if(this.box[1]!=0 && this.row>(MAXHANG-2))
    return 1;
  else if(this.box[0]!=0 && this.row>(MAXHANG-1))
    return 1;
//---------------------
  if((this.box[0] & 0x01) || (this.box[1] & 0x01) || (this.box[2] & 0x01) ||(this.box[3] & 0x01) ) 
   {
     if(this.column<0)
      return 1;
   }   
  else if((this.box[0] & 0x02) || (this.box[1] & 0x02) || (this.box[2] & 0x02) ||(this.box[3] & 0x02) ) 
   {
     if(this.column<-1)
      return 1;
   }
  else if((this.box[0] & 0x04) || (this.box[1] & 0x04) || (this.box[2] & 0x04) ||(this.box[3] & 0x04) ) 
   {
     if(this.column<-2)
      return 1;
   }
   else if((this.box[0] & 0x08) || (this.box[1] & 0x08) || (this.box[2] & 0x08) ||(this.box[3] & 0x08) ) 
   {
     if(this.column<-3)
      return 1;
   }
//---------------------
  if((this.box[0] & 0x08) || (this.box[1] & 0x08) || (this.box[2] & 0x08) ||(this.box[3] & 0x08) ) 
   {
     if(this.column>(MAXLIE-4))
      return 1;
   }   
  else if((this.box[0] & 0x04) || (this.box[1] & 0x04) || (this.box[2] & 0x04) ||(this.box[3] & 0x04) )
   {
     if(this.column>(MAXLIE-3))
      return 1;
   }
  else if((this.box[0] & 0x02) || (this.box[1] & 0x02) || (this.box[2] & 0x02) ||(this.box[3] & 0x02) ) 
   {
     if(this.column>(MAXLIE-2))
      return 1;
   }
  else if((this.box[0] & 0x08) || (this.box[1] & 0x08) || (this.box[2] & 0x08) ||(this.box[3] & 0x08) ) 
   {
     if(this.column>(MAXLIE-1))
      return 1;
   }
//--------------------
  return 0;
}
//------------------------------------------------------------------
unsigned char checkClask(void)
{
  unsigned char row,column,temp;
  unsigned char hang,lie;
  for(row=0;row<4;row++)
   {
     temp=1;
     for(column=0;column<4;column++)
	  {
	    if(this.box[row] & temp)
 	      {
		    hang=this.row+row;
			lie=this.column+column;
		    if(cubeMap[hang][lie/8] & bittable[lie%8])
			  return 1;
		  }
		temp<<=1;
	  }
   }
  return 0;
}
//-------------------------------------------------------------------
void checkMap(void)
{
  unsigned char i,j,delete;
  bit full;
  full=0;
  delete=0;
  for(i=MAXHANG-1;i>0;i--)
   {
     if(cubeMap[i][0]==0 && cubeMap[i][1]==0)
 	   break;
	 if(cubeMap[i][0]==0xff && cubeMap[i][1]==0xff)
	   {
	     delete++;
		 full=1;
		 for(j=i;j>0;j--)
		  {
		    cubeMap[j][0]=cubeMap[j-1][0];
		    cubeMap[j][1]=cubeMap[j-1][1];
		  }
		 i++;
		 cubeMap[0][0]=0;
		 cubeMap[0][1]=0;
	   }
   }
 if(full)
  {
    if(delete==1)
	  score++;
	else if(delete==2)
	  score+=4;
	else if(delete==3)
	  score+=9;
	else if(delete==4)
	  score+=16;
	rectangle();
	showCubeMap();
    if(score<50)
	 speed=1;
	else if(score<100)
	 speed=2;
	else if(score<500)
	 speed=3;
	else if(score<1000)
	 speed=4;
	else if(score<5000)
	 speed=5;
	else if(score<10000)
	 speed=6;
	else if(score<20000)
	 speed=7;
	else if(score<30000)
	 speed=8;
	else if(score<40000)
	 speed=9;
	else if(score<50000)
	 speed=10;
	else if(score<60000)
	 speed=11;
	else 
	 speed=12;  
	showScoreSpeed();
  }
}
//-------------------------------------------------------------------
void moveLeft(void)
{
  clearCubeFromMap();
  this.column--;
  if(checkBorder() || checkClask())
    this.column++;
  writeCubeToMap();
}
//-------------------------------------------------------------------
void moveRigh(void)
{
  clearCubeFromMap();
  this.column++;
  if(checkBorder() || checkClask())
    this.column--;
  writeCubeToMap();
}
//-------------------------------------------------------------------
void moveDown(void)
{
  clearCubeFromMap();
  this.row++;
  if(checkBorder() || checkClask())
   {
    this.row--;
	downok=1;
   }
  else
   downok=0;
  writeCubeToMap();
  if(downok)
    checkMap();
}
//------------------------------------------------------------------
void cubeRotation(void)
{
  unsigned char temp;
  temp=this.state;
  clearCubeFromMap();
  this.state=++this.state%4;
  this.box=cube+16*this.cube+4*this.state;
  if(checkBorder() || checkClask())
   {
     this.state=temp;
     this.box=cube+16*this.cube+4*this.state;
   }
  writeCubeToMap(); 
}
/

硬件设计

使用元器件:

单片机:AT89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序等。具体内容如下,全网最全! !

可以关注下方公众号!

点赞分享一起学习成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/695666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web前端:作业二

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* 1.将ul的子l…

搭建电商项目||购物商城||APP|小程序|电商独立站系统如何接入JD商品

京东商品采集的步骤和应用场景可以归纳如下&#xff1a; 一、采集步骤 注册账号&#xff1a;首先&#xff0c;需要在京东开放平台注册一个开发者账号。创建应用&#xff1a;登录开放平台后&#xff0c;创建一个应用以获取API密钥和应用凭据。获取权限&#xff1a;根据所需的服…

Docker高级篇之轻量化可视化工具Portainer

文章目录 1. 简介2. Portainer安装 1. 简介 Portianer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便管理Docker环境&#xff0c;包括单机环境和集成环境。 2. Portainer安装 官网&#xff1a;https://www.portainer.io 这里我们使用docker命令安装&…

【力扣高频题】003.无重复字符的最长子串

前段时间和小米的某面试官聊天。因为我一直在做 算法文章 的更新&#xff0c;就多聊了几句算法方面的知识。 并且在聊天过程中获得了一个“重要情报”&#xff1a;只要他来面试&#xff0c;基本上每次的算法题&#xff0c;都会去考察关于 子串和子序列 的问题。 的确&#xf…

每日一题——Python实现PAT乙级1099 性感素数(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 专业点评 时间复杂度分析 空间复杂度分析 综合点评 我要更强 优化点 …

私有化AI搜索引擎FreeAskInternet

什么是 FreeAskInternet FreeAskInternet 是一个完全免费、私有且本地运行的搜索聚合器&#xff0c;并使用 LLM 生成答案&#xff0c;无需 GPU。用户可以提出问题&#xff0c;系统将使用 searxng 进行多引擎搜索&#xff0c;并将搜索结果合并到ChatGPT3.5 LLM 中&#xff0c;并…

⌈ 传知代码 ⌋ 基于曲率的图重新布线

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

数据库索引压力测试

本实验测试数据库在有索引和五索引内容上的查询时间随着数据量级增长的变化 测试的表结构 使用一个菜单的数据库表&#xff0c;包括菜品的ID&#xff0c;菜品名和价格 CREATE TABLE Menu (dish_id int(6) unsigned zerofill NOT NULL AUTO_INCREMENT,dish_name varchar(255)…

高通Android开关机动画踩坑简单记录

1、下面报错有可能是selinux的原因 Read-only file system 2、接着push 动画 reboot之后抓取logcat出现 &#xff0c;以下这个报错。看着像是压缩格式有问题。 3、于是重新压缩一下报错没有再出现 &#xff0c;压缩格式默认是标准&#xff0c;这里必须要改成存储格式哈 4、修改…

matlab演示地月碰撞

代码 function EarthMoonCollisionSimulation()% 初始化参数earth_radius 6371; % 地球半径&#xff0c;单位&#xff1a;公里moon_radius 1737; % 月球半径&#xff0c;单位&#xff1a;公里distance 384400; % 地月距离&#xff0c;单位&#xff1a;公里collision_tim…

Signac|成年小鼠大脑 单细胞ATAC分析(2)

引言 在本教程中&#xff0c;我们将探讨由10x Genomics公司提供的成年小鼠大脑细胞的单细胞ATAC-seq数据集。本教程中使用的所有相关文件均可在10x Genomics官方网站上获取。 本教程复现了之前在人类外周血单核细胞&#xff08;PBMC&#xff09;的Signac入门教程中执行的命令。…

【linux】进程控制——进程创建,进程退出,进程等待

个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 祝福语&#xff1a;愿你拥抱自由的风 相关文章 【Linux】进程地址空间-CSDN博客 【linux】详解linux基本指令-CSDN博客 目录 进程控制概述 创建子进程 fork函数 父子进程执行流 原理刨析 常见用法 出错原因 进程退出 概…

7-43 排列问题

排列问题 分数 10 全屏浏览 切换布局 作者 雷丽兰 单位 宜春学院 全排列问题 输出自然数1至n中n个数字的全排列&#xff08;1≤n≤9&#xff09;&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式: 一个自然数 输出格式: 由1到n中n个数字组成的…

Python魔法之旅专栏(导航)

目录 推荐阅读 1、Python筑基之旅 2、Python函数之旅 3、Python算法之旅 4、博客个人主页 首先&#xff0c;感谢老铁们一直以来对我的支持与厚爱&#xff0c;让我能坚持把Python魔法方法专栏更新完毕&#xff01; 其次&#xff0c;为了方便大家查阅&#xff0c;我将此专栏…

freertos中的链表1 - 链表的数据结构

1.概述 freertos中链表的实现在 list.c 和 list.h。旨在通过学习freertos中的链表的数据结构&#xff0c;对freertos中的链表实现有一个整体的认识。freertos使用了三个数据结构来描述链表&#xff0c;分别是&#xff1a;List_t&#xff0c; MiniListItem_t&#xff0c;ListIt…

【Linux】进程6——环境变量

1.什么是环境变量 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 比如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但是照样可以链接成功&…

Windows 10 找不到Microsoft Edge 浏览器

下载链接 了解 Microsoft Edge 手动下载浏览器 问题说明 一般来说&#xff0c;windows10系统应该是自带浏览器edge的&#xff0c;但有的电脑就是没有找到edge浏览器&#xff0c;可能系统是精简过的&#xff0c;可能是被卸载了。如下&#xff0c;控制面板确实没找到程序。 ​ …

笔记本充电出现了问题。

不知道为什么。电池充电图片一直显示的空。谁能救救我&#xff01;

C++命名空间的定义、C++命名空间的使用、C++输入输出等的介绍

文章目录 前言一、C命名空间的定义1. C命名空间产生的原因2. 作用域限定符3. C变量的访问顺序 二、C命名空间的使用1. 加命名空间名称及作用域限定符2. 使用using将命名空间中某个成员引入3. 使用using namespace 命名空间名称 引入4. 嵌套命名空间使用 三、 C输入&输出总结…

天才程序员周弈帆 | Stable Diffusion 解读(二):论文精读

本文来源公众号“天才程序员周弈帆”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Stable Diffusion 解读&#xff08;二&#xff09;&#xff1a;论文精读 【小小题外话】端午安康&#xff01; 在上一篇文章天才程序员周弈帆 …