单片机数码管动态显示的问题

2024-11-20 16:31:04
推荐回答(3个)
回答1:

/*数码管动态显示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++;
}
}

回答2:

这个程序错的。把定时器中断放到循环里面了。应该把第一个if里面的中断标志位清零、重装和counter计数放到中断函数里面,counter定义为volatile型。

回答3:

电路图有吗?