题目要求是,20秒红,16秒绿,4秒黄。问题是在每次20秒循环之后,的最后一个数显示为00 和2 请问是哪里的问题。程序和电路图如下。
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- uchar num,num2,shi,ge,shi2,ge2;
- uchar num1=0;
- uint i;
- void diaplayw(uchar shi,uchar ge);
- void diaplayn(uchar shi,uchar ge);
- void delay(uint xms);
- void init();
- char code table[]={0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,0x7f,0x6f,
- 0x77,0x7c,0x39,0x5e,0x79,0x71};
- void main()
- {
- while(1)
- {
- num2=17;
- num=21;
- init();
- while(num>=1)
- {
- if(num>=5)
- {
- diaplayn(shi,ge);
- diaplayw(shi2,ge2);
- P1=0xc6;
- }
- if(num<=4)
- {
- diaplayn(shi,ge);
- diaplayw(shi,ge);
- if(num%2==1)
- {
- P1=0Xa6;
- }
- else
- P1=0xe6;
- }
- }
- num2=17;
- num=21;
- init();
- while(num>=1)//¶«Î÷ÂìÄϱ±oì
- {
- if(num>=5)
- {
- diaplayn(shi2,ge2);
- diaplayw(shi,ge);
- P1=0x63;
- }
- if(num<=4)
- {
- diaplayn(shi,ge);
- diaplayw(shi,ge);
- if(num%2==1)
- {
- P1=0X65;
- }
- else
- P1=0x67;
- }
- }
- }
- }
- void diaplayw(uchar shi,uchar ge)
- {
- LSA=1;LSB=0;LSC=0;
- P0=table[shi];
- delay(1);
- P0=0X00;
- LSA=0;LSB=0;LSC=0;
- P0=table[ge];
- delay(1);
- P0=0X00;
- }
- void diaplayn(uchar shi,uchar ge)
- {
- LSA=1;LSB=0;LSC=1;
- P0=table[shi];
- delay(1);
- P0=0X00;
- LSA=0;LSB=0;LSC=1;
- P0=table[ge];
- delay(1);
- P0=0X00;
- }
- void T1_time() interrupt 3
- {
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256;
- num1++;
- if(num1==20)
- {
- num1=0;
- num--;
- num2--;
- shi=num/10;
- ge=num%10;
- shi2=num2/10;
- ge2=num2%10;
- }
- }
- void delay(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=250;j>0;j--);
- }
- void init()
- {
- TMOD=0x10;
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256;
- EA=1;
- ET1=1;
- TR1=1;
- }
复制代码
|