惊奇!进不了循环!!
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/wdt.h> #include "key.c" #define COM_PORT PORTB #define COM_PIN1 (1<<PINB1) #define COM_PIN2 (1<<PINB2) #define SET_COM1 {PORTB |= (1<<PINB1);} #define CLR_COM1 {PORTB &= ~(1<<PINB1);} #define SET_COM2 {PORTB |= (1<<PINB2);} #define CLR_COM2 {PORTB &= ~(1<<PINB2);} #define SEG_PORT PORTC const unsigned charnum_table[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; unsigned char num_buf; void Num_San(void) { if(COM_PORT & COM_PIN1) { SET_COM2 SEG_PORT = num_table[num_buf%10]; CLR_COM1 } else { SET_COM1 SEG_PORT = num_table[num_buf/10]; CLR_COM2 } } SIGNAL(SIG_OVERFLOW1) { TCNT1H = 0xAA; //赋计数初值 TCNT1L = 0xFF; //赋计数初值 Num_San(); KeyScan(); } voidGPIO_Init(void) { //数码管初始化 DDRB |= (1<<PINB1)|(1<<PINB2); DDRC |= 0xFF; } void TM1_init(void) { TCCR1B |= 0x01; //进行1024分频 TCNT1H = 0x00; //赋计数初值 TCNT1L = 0x12; //赋计数初值 TIMSK |= 0x04;; //开使能 sei(); //开总中断 } int main( void ) { wdt_disable(); GPIO_Init(); KeyInit(); TM1_init(); num_buf = 1; _delay_ms(1000); num_buf = 2; _delay_ms(1000); num_buf = 3; _delay_ms(1000); num_buf = 4; _delay_ms(1000); num_buf = 5; _delay_ms(1000); while(1) { num_buf = 45; } }
|