芯片破解51单片机的4人抢答器代码
- /*
- 芯片破解此程序为4人抢答器。
- 芯片破解抢答者4人对应,K1-4的按钮
- 芯片破解裁判可操作Ks,Kr,Kc,Ka4个按钮
- Ks:按下就进入抢答倒计时
- Kr:按下复位,准备下次抢答
- Kc,Ka:用于调整倒计时。
- 在复位之前使用,且当前的操作是对复位之后的倒计时有用
- 保证没有人按下除了Kc,Ka之外的按钮。
- 最大设置为1分钟,最小10s
- 按一次Kc加1s
- 操作步骤:按下Kr,后要按住Ka不松的状态按Kc加时间,然后再次按下Kr
- 显示器第一行显示倒计时的时间
- 例如:countdown:10s
- 显示器第二行显示违规者和抢答成功者的对应按钮
- 例如:error:0 win:2 表示:无人违规,2号抢答成功
- 例如:error:2 win:0 表示:有人违规,2号违规
- */
- #include "reg52.h"
- #include "lcd.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit K1=P1^0;
- sbit K2=P1^1;
- sbit K3=P1^2;
- sbit K4=P1^3;
- sbit Ks=P3^0; //按下就进入抢答倒计时
- sbit Kr=P3^2; //按下复位,准备下次抢答
- sbit Kc=P3^3; //按下调整倒计时,注意事项见timeset()
- sbit Ka=P3^4; //配合Kc
- sbit beep=P3^7;
- sbit led=P3^1;
- uchar fallflag=0,sflag=0,jflag=0,sjflag=0;
- uchar win,time=10; //time为倒计时秒数,num为程序中控制倒计时的变量,win为抢答成功的按钮
- uchar num,numf; //numf为配合num来显示lcd
- uchar Disp1[16]="countdown:00s ";
- uchar Disp2[16]="error:0 win:0 ";
- void judge();
- void search();
- void delay(uchar ms)
- {
- uchar y;
- for(;ms>0;ms--)
- for(y=120;y>0;y--);
- }
- void T0_Init()
- {
- TMOD=0X11;
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- TH1=(65536-1000)/256;
- TL1=(65536-1000)%256;
- ET0=1;
- ET1=1;
- TR0=1; //定时器0开
- TR1=0; //定时器1关
- EA=1;
- }
- /*lcd1602显示程序*/
- void display(uchar date1,uchar date2)
- {
- uchar i,a;
- LcdInit();
- Disp1[10]=num/10+'0';
- Disp1[11]=num%10+'0';
- Disp2[6]=date1+'0';
- Disp2[12]=date2+'0';
- for(i=0;i<16;i++)
- {
- LcdWriteData(Disp1[i]);
- }
- LcdWriteCom(0x80+0x40);
- for(a=0;a<16;a++)
- {
- LcdWriteData(Disp2[a]);
- }
- }

芯片解密