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

📄 pproject.i

📁 AVRkaifashili.rar
💻 I
📖 第 1 页 / 共 2 页
字号:
 unsigned char Read_1byte(unsigned char Slave,unsigned char Address)
{
 unsigned char data0,x;
 do
 {
  Start();
  Write_Byte(Slave);
  Check_Ack();
 }
 while(Ack_Flag);
 do
 {
  Write_Byte(Address);
  Check_Ack();
 }
 while(Ack_Flag);
 do
 {
  Start();
  Write_Byte(Slave+1);
  Check_Ack();
 }
 while(Ack_Flag);
 data0=Read_Byte();
 Nack();
 Stop();
 return data0;
}


void Led_Display(unsigned char Number)
{
 unsigned char d0,d1;
  d0=Number/10;
  d1=Number%10;
  Write_2byte(0x70,0x20,d1,d0);
}


void Key_Act(void)
{
(*(volatile unsigned char *)0x5B) &=0x7f;
 switch(Key_Value)
 {
  case 1:
   Inform(State);
   Lattice_Display();
   Key_Value=0;
   break;
  case 2:
   if(State<16)
    State++;
   else
	State=0;
   Led_Display(State);
   Key_Value=0;
   break;
  case 4:
   Spec++;
   Special(Spec);
   Key_Value=0;
   break;
  case 8:
   Pst_Flag=!Pst_Flag;
   Key_Value=0;
   break;
  case 16:
   if(State)
State--;
   else
	State=16;
   Led_Display(State);
   Key_Value=0;
   break;
  case 32:
  Pre_Inform(State+1);
   Lattice_Display();
   Key_Value=0;
   break;
  default:
 asm("nop");
 }
(*(volatile unsigned char *)0x5B) |=0x80;
}




void Set_CE(unsigned char level)
{
 if(level==1)
(*(volatile unsigned char *)0x3B) |=0x10;
 else
(*(volatile unsigned char *)0x3B) &=0xef;
}


void Set_PD(unsigned char level)
{
 if(level)
(*(volatile unsigned char *)0x3B) |=0x08;
 else
(*(volatile unsigned char *)0x3B) &=0xf7;
}


void Set_PR(unsigned char level)
{
 if(level)
(*(volatile unsigned char *)0x3B) |=0x04;
 else
(*(volatile unsigned char *)0x3B) &=0xfb;
}


void Set_A6(unsigned char level)
{
 if(level)
(*(volatile unsigned char *)0x3B) |=0x02;
 else
(*(volatile unsigned char *)0x3B) &=0xfd;
}


void Set_A0(unsigned char level)
{
 if(level)
(*(volatile unsigned char *)0x3B) |=0x01;
 else
(*(volatile unsigned char *)0x3B) &=0xfe;
}



void Seek_Segment(unsigned char s)
{
 Set_PD(1);
 delay(20000);
 Set_PD(0);
 Set_PR(1);
 Set_A0(1);
 while(s--)
 {
  Set_CE(0);
  Set_CE(1);
  do
 asm("nop");
  while(EOM_Flag);
  EOM_Flag=1;
 }
 Set_A0(0);
}


void Play(void)
{
 Set_CE(0);
 Set_CE(1);
 do
 asm("nop");
 while(EOM_Flag);
 EOM_Flag=1;
}




void Inform(unsigned char m)
{
 unsigned char i;
 if(Pst_Flag)
  Snd_Info[0]=m;
 else
  Snd_Info[0]=17-m;
 Set_PD(1);
 delay(20000);
 Set_PD(0);
 for(i=0;i<2;i++)
 {
  Seek_Segment(Snd_Info[i]);
  Play();
 }
}


void Pre_Inform(unsigned char m)
{
 unsigned char i;
 if(Pst_Flag)
  Snd_Pre_Info[1]=m;
 else
  Snd_Pre_Info[1]=17-m;
 Set_PD(1);
 delay(20000);
 Set_PD(0);
 for(i=0;i<3;i++)
 {
  Seek_Segment(Snd_Pre_Info[i]);
  Play();
 }
}


void Special(unsigned char m)
{
 Set_PD(1);
 delay(20000);
 Set_PD(0);
 Seek_Segment(Snd_Spec[m]);
 Play();
}


void Welcome()
{
 Set_PD(1);
 delay(20000);
 Set_PD(0);
 Seek_Segment(Snd_Welc);
 Play();
}



void Key_Scan(void)
{
 unsigned char Press,Debounce;
(*(volatile unsigned char *)0x5B) &=0xbf;
 Press=Read_1byte(0x70,0x0c);
 if(Press)
 {
   Debounce=Read_1byte(0x70,0x08);
   if(Debounce==Press)
   	Key_Value=Press;
 }
(*(volatile unsigned char *)0x5B) |=0x40;
 Key_Act();
}


void Receive_EOM(void)
{
(*(volatile unsigned char *)0x5B) &=0x7f;
 Set_PD(1);
 delay(20000);
 Set_PD(0);
 EOM_Flag=0;
(*(volatile unsigned char *)0x5B) |=0x80;
}



void MAX6959_Initialize(void)
{
 Write_1byte(0x70,0x01,0x0f);
 Write_1byte(0x70,0x02,0x3f);
 Write_1byte(0x70,0x03,0x03);
 Write_1byte(0x70,0x04,0x21);
 Write_1byte(0x70,0x06,0x58);
}


void AVR_Initialize()
{
(*(volatile unsigned char *)0x3A)=0xff;
(*(volatile unsigned char *)0x3B)=0x16;
(*(volatile unsigned char *)0x37)=0xff;
(*(volatile unsigned char *)0x38)=0xff;
(*(volatile unsigned char *)0x34)=0xff;
(*(volatile unsigned char *)0x35)=0x30;
(*(volatile unsigned char *)0x5F)=0x80;
(*(volatile unsigned char *)0x5B)=0xc0;
(*(volatile unsigned char *)0x55)=0x0a;
}





void display()
{
 unsigned char a;
(*(volatile unsigned char *)0x35)=0x60;
for(a=0;a<32;a++)
{
if((*(volatile unsigned char *)0x35)==0x6f)
(*(volatile unsigned char *)0x35)=0x50;
if((*(volatile unsigned char *)0x35)==0x5f)
(*(volatile unsigned char *)0x35)=0x60;
(*(volatile unsigned char *)0x35)++;
(*(volatile unsigned char *)0x38)=text[a];
delay(20000);
(*(volatile unsigned char *)0x38)=0;
}
}


void change()
{
 unsigned char m;
 if(!Pre_Flag)
 {
  switch(State)
  {
   case 1:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 2:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 3:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 4:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 5:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 6:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 7:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 8:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 9:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 10:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 11:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 12:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 13:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 14:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 15:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 16:
    if(Word_Number<5)
    {
     if(Word_Number<3)
     {
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=DL[Word_Number-3][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
  }
 }
 else
 {
  switch(State)
  {
   case 1:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 2:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 3:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 4:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 5:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 6:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 7:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 8:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 9:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 10:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 11:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 12:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 13:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 14:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 15:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State1[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
   case 16:
    if(Word_Number<7)
    {
     if(Word_Number<4)
     {
      for(m=0;m<32;m++)
       next[m]=QFDZ[Word_Number][m];
     }
     else
      for(m=0;m<32;m++)
       next[m]=State2[Word_Number-4][m];
     Word_Number++;
    }
    else
     Word_Number=0;
    break;
  }
 }
}


void move(void)
{
 unsigned char b;
 if(Move_Flag==16)
 {
  Move_Flag=0;
  change();
 }
 for(b=0;b<15;b++)
  text[b]=text[b+1];
 text[15]=next[0];
 for(b=0;b<15;b++)
  next[b]=next[b+1];
 for(b=16;b<31;b++)
  text[b]=text[b+1];
 text[31]=next[16];
 for(b=16;b<31;b++)
  next[b]=next[b+1];
 Move_Flag++;
}


void Lattice_Display(void)
{
 unsigned char k;
while(1)
 {
  if(k==Speed)
  {
   move();
   k=0;
  }
  display();
  k++;
 }
}



void main()
{
 AVR_Initialize();
 MAX6959_Initialize();
 Welcome();
 while(1)
 asm("nop");
}

⌨️ 快捷键说明

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