用的是keil 5,芯片是AT89C52
#include<reg51.h>#define uchar unsigned char#define uint unsegned intsbit g=P2^1;sbit s=P2^0;bit button,flag;uchar shi,ge,temp,t0;uchar code table[]={0x3f,0x6f,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}void display(shi,ge)void delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}uchar switchscan(){ temp=P1; if(temo==0xfe) { delay(5) temo=P1; if(temo==0xfe) { button=~button; if(button) TR0=1; else TR0=0;t0=0; flag=0; shi=o; ge=0; } } while (temp==0xfe) { temp=P1; desplay(shi,ge); } return button;}void keyscan(){ temp=P1; if(temp==0xfd||temp==0xfb||temp==0xf7) {delay(5);temp=P1;if (temp==0xfd||temp==0xfb||temp==0xf7) switch(temp) { case 0xfd: { TR0=~TR0; } break; case 0xfb: { TR0=0; t0=0; shi=0; ge=0; } break; case 0xf7:{flag=~flag;} break; } }}while(gemp==0xfd||temp==0xfb||temp==0xf7) { temp=P1; display(shi,ge); }}Void display(shi,ge){ P0=table[shi]; s=o; P0=table[shi];delay(1);s=1;P0=table[ge];g=o;P0=table[ge];delay(1);g=1;}void count(){ t0=0; ge++; if(ge==10){ge=0;shi++;} if(shi==10) shi=0;}main(){shi=0;ge=0;button=0;TM0D=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=0;while(1){display(shi,ge);switchscan();{while(button){display(shi,ge);switchscan();if(button)keyscan();}while(!button){TR0=0;display(shi,ge);switchscan();}}} }void timer0() interrut 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;t0++;if(flag){if(t0>=2)count();}if(!flag){if(t0>=20)count();}}
|