程序是这样的,主要实现的功能是在三个数码管上显示数字,利用int0下降沿中断,
PD2按下一次,数字加一,本来给的计数值初值Count=0,只有响应中断后Count++,但是电源上电后数码管上却显示的0 0 1,求解释
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#define clear_key_on (PIND&_BV(PD6))==0x00 //定义清零键按下
const uint8_t CODE8[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
uint8_t Count=0; //计数值
uint8_t Dis_buffer[]={0,0,0};
void Show() //显示函数
{
Dis_buffer[2]=Count/100;
Dis_buffer[1]=Count%100/10;
Dis_buffer[0]=Count%10;
if(Dis_buffer[2]==0)
{
Dis_buffer[2]=10;
if(Dis_buffer[1]==0)
{
Dis_buffer[1]=10;
}
}
PORTA=CODE8[Dis_buffer[2]];
PORTB=CODE8[Dis_buffer[1]];
PORTC=CODE8[Dis_buffer[0]];
}
int main()
{
DDRA=0xFF;PORTA=0xFF;
DDRB=0xFF;PORTB=0xFF;
DDRC=0xFF;PORTC=0xFF;
DDRD=0x00;PORTD=0xFF;
MCUCR=0x02;
GICR=0x40;
SREG=0x80;
while(1)
{
Show();
if(clear_key_on)
{
Count=0;
}
}
}
ISR(INT0_vect) //中断函数
{
Count++;
} |