版主
主题
回帖0
积分27576
阅读权限200
注册时间2008-11-19
最后登录1970-1-1
在线时间 小时
|
就是个开发板带的例程,我居然死活运行不出结果。代码如下,现在的现象就是按键时数码管有闪动一下,但是显示的值根本不变,一直是125 。折腾一晚上了,把数码管换成led或者蜂鸣器都试过,感觉中断发生了,但是中断处理程序根本没运行。
#include "iom16v.h"
#include "macros.h"
#pragma interrupt_handler Increase_INT0_Ir:2
#pragma interrupt_handler Decrease_INT1_Ir:3
//变量定义
unsigned char Click=125;
//数码管显示函数
void Number_Show(unsigned char Num)
{
unsigned char Hundred,Ten,One;
Hundred=Num/100; //取百位
Ten=Num%100/10; //取十位
One=Num%10; //取个位
//显示百位
PORTB=Number[Hundred]; //送模码
PORTA|=BIT(PA3); //PA3高电平
PORTA&=~BIT(PA3); //PA3低电平
PORTB=~BIT(0); //送位选
PORTA|=BIT(PA4); //PA3高电平
PORTA&=~BIT(PA4); //PA3低电平
Delay(100); //稍微延迟
//显示十位
PORTB=Number[Ten]; //送模码
PORTA|=BIT(PA3); //PA3高电平
PORTA&=~BIT(PA3); //PA3低电平
PORTB=~BIT(1); //送位选
PORTA|=BIT(PA4); //PA3高电平
PORTA&=~BIT(PA4); //PA3低电平
Delay(100); //稍微延迟
//显示个位
PORTB=Number[One]; //送模码
PORTA|=BIT(PA3); //PA3高电平
PORTA&=~BIT(PA3); //PA3低电平
PORTB=~BIT(2); //送位选
PORTA|=BIT(PA4); //PA3高电平
PORTA&=~BIT(PA4); //PA3低电平
Delay(100); //稍微延迟
}
//中断初始化函数
void Interrupt_Init()
{
MCUCR&=0xF0; //INT0,1为低电平触发
GICR|=BIT(7)|BIT(6); //GICR|=0xC0; INT0,1中断允许位为1
GIFR|=BIT(7)|BIT(6); //GIFR|=0xC0; INTO,1中断标志位清零
}
//数码管(引脚)初始化函数
void LED7_Init()
{
DDRA|=BIT(PA3); //PA3状态为输出
DDRA|=BIT(PA4); //PA4状态为输出
DDRB=0xff; //PB状态为输出
}
//IO初始化函数
void Port_Init()
{
DDRD|=BIT(PD7); //PD7为输出状态
PORTD&=~BIT(PD7); //PD7为输出低电平
DDRD&=~BIT(2)&~BIT(3); //PD2~3为输入状态
PORTD|=BIT(2)|BIT(3); //PD2~3带上拉输入
}
//主函数
void main()
{
Port_Init(); //调用IO初始化函数
LED7_Init(); //调用数码管初始化函数
Interrupt_Init(); //调用中断初始化函数
SREG|=BIT(7); //全局中断使能位置一
while(1)
{
Number_Show(Click); //不停显示
}
}
//INT0中断函数-加一
void Increase_INT0_Ir()
{
unsigned int i=100;
while(i--)
Number_Show(Click); //适当的按键消抖
Click++; //Click变量+1
}
//INT0中断函数-减一
void Decrease_INT1_Ir()
{
unsigned int i=100;
while(i--)
Number_Show(Click); //适当的按键消抖
Click--; //Click变量-1
}
|
|