想弄个可调的倒计时显示。可是仿真之后数码管不动。- #include<AT89X51.H>
- #define uchar unsigned char
- #define uint unsigned int
- uchar bbit[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};
- uchar buffer[]={0,0,0,0};
- uchar minute=0,sec=30;
- uint count;
- uint k;
- sbit FM = P1^7;
- void delay(uchar ms)
- {
- uchar i,j;
- for(i=ms;ms>0;ms--);
- for(j=112;j>0;j--);
- }
- void tt0()interrupt 1 using 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- if(count==10)
- {
- count=0;
- if(sec==0&&minute==0)
- {
- P0=0xc0;
- P2=0x0f;
- P3_0=0; //rel
- FM=0;
- while(1){P3_1=1;} //daim yenix
- }
- if(sec==0)
- {
- sec=60;minute--;
- if(minute=9)minute=9;
- }
- sec--;
- if(sec>=59)sec=59;
- }
- buffer[0]=sec%10;
- buffer[1]=sec/10;
- buffer[2]=minute%10;
- buffer[3]=minute/10;
- count++;
- /*if(count%10==0)
- P3_1=0;*/
- }
- void display()
- {
- uchar i;
- for(i=10;i!=0xff;i--)
- {
- P0=buffer[i];
- P2=bbit[i];
- delay(10);
- P0=0xff;
- }
- }
- void main()
- {
- P0=0x00;
- P2=0x0f;
- P3_0=0;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=0;
- ET0=0;
- while(1)
- {
- buffer[0]=sec%10;
- buffer[1]=sec/10;
- buffer[2]=minute%10;
- buffer[3]=minute/10;
- display();
-
- if(P1_0==0)
- {
- delay(20);
- if(P1_0==0)
- {sec++;if(sec>=60)sec=0;}while(P1_0==0);
- }
- if(P1_1==0)
- {
- delay(20);
- if(P1_1==0)
- {sec--;if(sec>=60)sec=59;}while(P1_1==0);
- }
- if(P1_3==0)
- {
- delay(20);
- if(P1_3==0)
- {minute++;if(minute>=9)minute=0;}while(P1_3==0);
- }
- if(P1_2==0)
- {
- delay(20);
- if(P1_2==0)
- {minute--;if(minute>=9)minute=9;}while(P1_2==0);
- }
- if(P1_4==0) //qikip,wakit balgulaxka baxlax
- delay(20);
- if(P1_4==0)
- {
- EA=1;
- ET0=1;
- TR0=1;
- P3_1=0;
- while(1)
- {
- display();
- }
- }
- }
- }
复制代码
|