求助各位大神!!!
我完全按照郭天祥《51单片机C语言程序教程》例13.1.1的源程序编写下载后,数码管理论上从“00”开始递增,到“05”后变成只显示一个“5”。但我还没有用导线接入外部中断(INT0或INT1),没过几秒数码管重新从“06”开始计数了。。。请问这是什么原因呢? 我的程序还需要进行什么修改吗?
我的开发板是STC89C52,清翔电子的,略有不同。
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula=P2^6;
- sbit wela=P2^7;
- uchar code table[]=
- {
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
- };
- uchar num;
- void delayms(uint);
- void display(uchar shi, uchar ge)
- {
- dula=1;
- P0=table[shi];
- dula=0;
- P0=0xff;
-
- wela=1;
- P0=0xfe;
- wela=0;
- delayms(5);
-
- dula=1;
- P0=table[ge];
- dula=0;
- P0=0xff;
-
- wela=1;
- P0=0xfd;
- wela=0;
- delayms(5);
- }
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void main()
- {
- uchar a,b,num1;
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- EX0=1;
- EX1=1;
- TR0=1;
- while(1)
- {
- if(num>=20)
- {
- num=0;
- num1++;
- if(num1==6)
- {
- ET0=0;
- PCON=0x01;
- }
- a=num1/10;
- b=num1%10;
- }
- display(a,b);
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- num++;
- }
- void ex_int0() interrupt 0
- {
- PCON=0;
- ET0=1;
- }
- void ex_int1() interrupt 2
- {
- PCON=0;
- ET0=1;
- }
复制代码
|