cc2513685 发表于 2012-11-8 23:09:37

AVR定时器1中断程序—秒表,怎么只亮了一个数码管显示0,...

#include<iom16v.h>
#include<macros.h>

#define smgen_set PORTD |=BIT(6)
#define smgen_clr PORTD &=~BIT(6)

#define uchar unsigned char
#define uint unsigned int

uchar table2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};   
uchar table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar table={0,0,0,0,0,0,0,0};
uchar num;
void init(void)   //数码管初始化
{
DDRA=0XFF;
PORTA=0x0;

DDRC=0XFF;
PORTC=0x0;

DDRD=0XFF;
PORTC=0x0;
}

void init1(void)//定时器初始化
{
TCCR1B=0X04; //256分频
TCNT1H=0X8f;
TCNT1L=0X80;
TIMSK |=BIT(2);
SREG |=BIT(7);
}
void delay(uint t) //延时函数
{
uint b;
for(b=0;b<10;b++)
{
while(t--);
}
}


void display(uchar *p)//数码管显示函数
{
uchar i;
for(i=0;i<8;i++)
{
PORTA=table2[*p];   //段选
p++;
smgen_set;            //开数码管
PORTC=table1;      //位选
delay(200);
}
}

void main()
{
   init();   //数码管初始化
   init1();   //定时器初始化
   while(1)
   {
   display(table);
   }
}

#pragma interrupt_hander timer_isr:9
void timer_isr(void)
{
num++;
if(num==60)
num=0;
table=num%10;
table=num/10;

TCNT1H=0X8f;
TCNT1L=0X80;
}

lcw_swust 发表于 2012-12-11 13:02:12

init1()去掉呢
页: [1]
查看完整版本: AVR定时器1中断程序—秒表,怎么只亮了一个数码管显示0,...