/*数码管动态显示12345678
*******************************************************************************************/
#include
#define uchar unsigned char
unsigned char code dutable[]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90,// 4, 5, 6, 7, 8, 9,
0x88,0x83,0xc6,0xa1,0x86,0x8e};//a,b,c,d,e,f,
unsigned char code wetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar num1,num2;
void delay_1ms()//毫秒级延时约等于4*256*1 us = 1024 us≈1 ms
{
unsigned char j=0,i=4;
do
{
while(--j) ;
}
while(--i);
}
void delay_ms(unsigned char i) //i*1毫秒延时
{
while(i--)
delay_1ms();
}
void main (void)
{ num1=0;
num2=0;
while(1)
{
if(num1==8)//==测试等于 看看是否为真
num1=0;
if(num2==8)
num2=0;
P2=wetable[num1];
P0=dutable[num2];
delay_ms(1);
num1++;
num2++;
}
}
这个程序错的。把定时器中断放到循环里面了。应该把第一个if里面的中断标志位清零、重装和counter计数放到中断函数里面,counter定义为volatile型。
电路图有吗?