#include <reg51.h>
#include <intrins.h>
sbit SRCLK=P2^3;
sbit RCLK=P2^2;
sbit SER=P2^1;
sbit switch1=P0^0;
sbit switch2=P0^1;
sbit switch3=P0^2;
sbit switch4=P0^3;
sbit startkey=P0^4;
sbit stopkey=P0^5;
sbit DanBu=P0^6;
sbit LianXu=P0^7;
#define u8 unsigned char
#define u16 unsigned int
u8 code roll1_1[]={0xfc,0xf7,0xdf,0xff,0xbf,0xff,0x7f,0x7f,0x7f,0x7f,0xff,0xbf,0xff,0xdf,0xf7,0xfc};
u8 code roll1_2[]={0x1f,0xf7,0xfb,0xfd,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xff,0xfd,0xff,0xfb,0xf7,0x1f};
u8 code roll2_1[]={0xff,0xff,0xfc,0xf7,0xef,0xff,0xdf,0xdf,0xdf,0xdf,0xff,0xef,0xf7,0xfc,0xff,0xff};
u8 code roll2_2[]={0xff,0xff,0x3f,0xef,0xf7,0xff,0xfb,0xfb,0xfb,0xfb,0xff,0xf7,0xef,0x3f,0xff,0xff};
u8 code roll3_1[]={0xff,0xff,0xff,0xff,0xfe,0xfb,0xff,0xf7,0xf7,0xff,0xfb,0xfe,0xff,0xff,0xff,0xff};
u8 code roll3_2[]={0xff,0xff,0xff,0xff,0x7f,0xdf,0xff,0xef,0xef,0xff,0xdf,0x7f,0xff,0xff,0xff,0xff};
u8 code roll4_1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
u8 code roll4_2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
u8 code p[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void delay(u8 i)
{
u8 a;
for(a=0;a<2;a++)
while(i--);
}
void delay1(u8 i)
{
while(i--);
}
extern u8 key=0;
void KeyPos()
{
if(!switch1)
{
delay1(1000);
if(!switch1)
{
key=1;
}
while(!switch1);
}
if(!switch2)
{
delay1(1000);
if(!switch2)
{
key=2;
}
while(!switch2);
}
if(!switch3)
{
delay1(1000);
if(!switch3)
{
key=3;
}
while(!switch3);
}
if(!switch4)
{
delay1(1000);
if(!switch4)
{
key=4;
}
while(!switch4);
}
}
extern u8 button=0;
void ButtonPos()
{
if(!startkey)
{
delay1(1000);
if(!startkey)
{
button=1;
}
while(!startkey);
}
}
extern u8 stopbutton=1;
void StopButtonpos()
{
if(!stopkey)
{
delay1(1000);
if(!stopkey)
{
stopbutton=0;
}
while(!stopkey);
}
}
extern u8 SPDT=1;
void DanLian()
{
if(!DanBu)
{
delay1(2000);
if(!DanBu)
{
SPDT=0;
}
while(!DanBu);
}
}
void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++)
{
SER= dat1 >> 7;
dat1 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++)
{
SER = dat2 >> 7;
dat2 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++)
{
SER = dat3 >> 7;
dat3 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
for(a=0;a<8;a++)
{
SER = dat4 >> 7;
dat4 <<= 1;
SRCLK = 0;
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
void displayAll(u16 time,u8*dat1,u8* dat2,u8* dat3,u8* dat4,u8* dat5,u8* dat6,u8* dat7,u8* dat8)
{
u8 i,a,b;
while(time>0)
{
a=0x01;
b=0x00;
for(i=0;i<16;i++)
{
Hc595SendByte(dat1[ i]&dat3[ i]&dat5[ i]&dat7[ i],dat2[ i]&dat4[ i]&dat6[ i]&dat8[ i],b,a);
a<<=1;
b<<=1;
if(i==7)
{
b=0x01;
a=0x00;
}
}
StopButtonpos();
time--;
}
Hc595SendByte(0xff,0xff,0x00,0x00);
}
void main()
{
while(1)
{
KeyPos();
ButtonPos();
DanLian();
if(button)
{
if(key==1)
{
do
{
displayAll(80,roll4_1,roll4_2,p,p,p,p,p,p);//4 2s
displayAll(80,roll4_1,roll4_2,roll3_1,roll3_2,p,p,p,p);//43
displayAll(80,roll4_1,roll4_2,roll3_1,roll3_2,roll2_1,roll2_2,p,p);//432
displayAll(80,roll4_1,roll4_2,roll3_1,roll3_2,roll2_1,roll2_2,roll1_1,roll1_2);//4321
displayAll(700,roll4_1,roll4_2,roll3_1,roll3_2,roll2_1,roll2_2,roll1_1,roll1_2);//15ms
}while(SPDT&&stopbutton);
}
else if(key==2)
{
do
{
displayAll(80,roll1_1,roll1_2,p,p,p,p,p,p);
displayAll(80,roll1_1,roll1_2,roll2_1,roll2_2,p,p,p,p);
displayAll(80,roll1_1,roll1_2,roll2_1,roll2_2,roll3_1,roll3_2,p,p);
displayAll(80,roll1_1,roll1_2,roll2_1,roll2_2,roll3_1,roll3_2,roll4_1,roll4_2);
displayAll(1400,roll1_1,roll1_2,roll2_1,roll2_2,roll3_1,roll3_2,roll4_1,roll4_2);
}while(SPDT&&stopbutton);
}
else if(key==3)
{
u8 i;
do
{
for(i=0;i<5;i++)
{
displayAll(100,roll1_1,roll1_2,roll3_1,roll3_2,p,p,p,p);
displayAll(100,roll2_1,roll2_2,roll4_1,roll4_2,p,p,p,p);
}
displayAll(1400,roll1_1,roll1_2,roll2_1,roll2_2,roll3_1,roll3_2,roll4_1,roll4_2);
}while(SPDT&&stopbutton);
}
else if(key==4)
{
do
{
displayAll(20,roll1_1,roll1_2,p,p,p,p,p,p);
delay(50000);
displayAll(20,roll2_1,roll2_2,p,p,p,p,p,p);
delay(50000);
displayAll(20,roll3_1,roll3_2,p,p,p,p,p,p);
delay(50000);
displayAll(20,roll4_1,roll4_2,p,p,p,p,p,p);
delay(50000);
displayAll(1400,roll1_1,roll1_2,roll2_1,roll2_2,roll3_1,roll3_2,roll4_1,roll4_2);
delay(50000);
displayAll(20,roll4_1,roll4_2,p,p,p,p,p,p);
delay(50000);
displayAll(20,roll3_1,roll3_2,p,p,p,p,p,p);
delay(50000);
displayAll(20,roll2_1,roll2_2,p,p,p,p,p,p);
delay(50000);
displayAll(20,roll1_1,roll1_2,p,p,p,p,p,p);
delay(50000);
displayAll(1400,roll1_1,roll1_2,roll2_1,roll2_2,roll3_1,roll3_2,roll4_1,roll4_2);
}while(SPDT&&stopbutton);
}
button=0;
stopbutton=0;
key=0;
SPDT=1;
}
}
} |