你的中断程序和显示程序都有问题,给你改好了,你试试。
代码:
- #include <reg52.h>
- typedef unsigned int uint;
- typedef unsigned char uchar;
- sbit LED1=P1^0;
- sbit dula=P2^6;
- sbit wela=P2^7;
- uchar num,num1,shi,ge;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f,
- 0x77,0x7c,0x39,0x5e,0x79,0x71}; //显示0~F的十六进制的数;0 1 2 3 4 5 6 7 8 9
- void delayms(uint xms) //延时函数
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(uchar i)
- {
- P0=0xfe;//送十位位码
- wela=1;
- wela=0;
- P0=table[i/10];//送十位段码
- dula=1;
- dula=0;
- delayms(2);
-
- P0=0xfd;//送十位段码
- wela=1;
- wela=0;
- P0=table[i%10];//送个位段码
- dula=1;
- dula=0;
- delayms(2);
- }
- void main()
- {
- TMOD=0x01;
- TH0=(65536-45872)/256; //赋初值
- TL0=(65536-45872)%256;
- EA=1; //打开总中断
- ET0=1; //开定时器0中断
- TR0=1; //启动定时器0中断
- while(1) //等待中断开启
- {
- display(num1);
- }
- }
- void T0_time() interrupt 1 //方式1
- {
- TH0=(65536-45872)/256; //赋初值
- TL0=(65536-45872)%256;
- num++;
- if(num==20)
- {
- num=0;
- LED1=~LED1;//LED闪烁
- num1++;
- if(num1==60)
- {
- num1=0;
- }
- }
- }