#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; } } } |