几个钟头了,用简单中断试过,软件没问题,计数器由DCLOCK激励输入,还试过直接开关加接地手动方波。
谢谢大佬们!
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- sbit duan=P3^0;
- sbit wei=P3^1;
- unsigned long pl;
- unsigned int ct0,ct1;
- unsigned char code table[] = {
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71 };
- void delay(unsigned int z) //延迟
- {
- unsigned char i,j;
- for(i=0;i<z;i++)
- for(j=0;j<110;j++);
- }
- void cl(void) //初始化
- {
- pl=100;
- ct0=0;
- ct1=0;
- TMOD=0x15;
- EA=1;
- ET0=1;
- ET1=1;
- TH0=0xff;
- TL0=0xfc;
- TR0=1;
- TH1=0;
- TL1=0;
- TR1=1;
- }
- void show6led(long num) //数码管输出,大佬可以不看
- {
- unsigned char i,q,w,e,r;
- i=num/10000;
- duan=1;
- P2=table[i];
- duan=0;
- P2=0xff;
- wei=1;
- P2=0xfd;
- wei=0;
- delay(10);
- P2=0xff;
- P3=0xff;
- q=num%10000/1000;
- duan=1;
- P2=table[q]+0x80;
- duan=0;
- P2=0xff;
- wei=1;
- P2=0xfb;
- wei=0;
- delay(10);
- P2=0xff;
- P3=0xff;
- w=num%1000/100;
- duan=1;
- P2=table[w];
- duan=0;
- P2=0xff;
- wei=1;
- P2=0xf7;
- wei=0;
- delay(10);
- P2=0xff;
- P3=0xff;
- e=num%100/10;
- duan=1;
- P2=table[e];
- duan=0;
- P2=0xff;
- wei=1;
- P2=0xef;
- wei=0;
- delay(10);
- P2=0xff;
- P3=0xff;
- r=num%10;
- duan=1;
- P2=table[r];
- duan=0;
- P2=0xff;
- wei=1;
- P2=0xdf;
- wei=0;
- delay(10);
- P2=0xff;
- P3=0xff;
- }
- void main()
- {
- long number=23333;
- P2=0x00;
- cl();
- while(1)
- {
- if(ct0)
- {
- TR0=0;
- TR1=0;
- TH0=0xff;
- TL0=0xfc;
- TH1=0x00;
- TL1=0x00;
- pl=ct1;
- ct0=0;
- TR0=1;
- TR1=1;
- number=4000000/pl;
- }
- show6led(number);
- }
- }
- void t() interrupt 1
- {
- TR1=0;
- TR0=0;
- ct1=TH1*256;
- ct1=ct1+TL1;
- TH0=0xff;
- TL0=0xfc;
- TH1=0;
- TL1=0;
- ct0=1;
- TR0=1;
- TR1=1;
- P1=0x00; //用来判断中断到底有没有进去,看来是失败了
- }
复制代码
|