#include<avr/io.h>
#include<u
til/delay.h>
#include<avr/interrupt.h>
const unsigned char display_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};
unsigned char num=0;
int main()
{
EICRA=0X02;//外部中断0设置为下降沿触发
EIMSK=0X01;//开外部中断0
sei();//开总中断
DDRC=0xff;//PC口设置为输出,用来控制数码管显示数字,用的共阳数码管
DDRD=0XFE;//PD0设置为输入
PORTD=0X01;//PD0内部上来电阻有效,按键控制中断
while(1)
{
PORTC=display_code[num];
}
}
SIGNAL(SIG_INTERRUPT0)//按键按下时,进入中断
{
_delay_ms(10);
num++;
if(num==10)
num=0;
}
用Atmega128写的,有一个警告,
proteus仿真时数码管只显示1,按键时不发生改变
去了延时也是一样,好像是进了一次中断,仿真时直接就进了,如果把数码管显示程序放进中断,主程序只是等待,那么每次按键就能实现计数功能,弄的挺郁闷的
一周热门 更多>