?? pproject.i
字號(hào):
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");
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -