一切都在代码中
#include
#define uchar unsigned char
#define uint unsigned int
#define LED P1_1
#define kEY P0_1
void Delayms(uint);
void InitLed(void);
void KeyInit();
uchar KeyValue = 0;
/***
延时函数
*/
void Delayms(uint xms)
{
uint i,j;
for(i = xms;i > 0;i--)
for(j = 587;j>0;j--);
}
/****
LED初始化程序
*/
void InitLed(void)
{
P1DIR |= 0x02;//设置为输出
LED = 1;//LED1熄灭
}
/**
KEY初始化程序--外部中断
*/
void KeyInit()
{
P0IEN |= 0x02;//设置各个控制口的中断使能,0为中断禁止,1为中断使能 / /允许按键 P0_1中断使能
PICTL |= 0x02;//0---3设置各个端口的中断触发方式,0为上升沿触发,1为下降沿触发
IEN1 |= 0x20; //允许P0口中断 中断使能1 0为中断禁止,1为中断使能
P0IFG =0x00;//终端状态标志寄存器,当输入端口有中断请求,相应的位置1
EA =1;//开启总中断
/**
外部中断操作思路:
1、 首相设置中断使能为,确认让那个IO口进行中断使能进行中断操作,使用的P0IEN寄存器进行微操作,确认哪一个进行中断操作 0禁止中断操作, 1 进行终端操作
2、 然后设置进行中断的条件(上升沿进行中断/下降沿进行中断) 使用的是PICTL寄存器 0上升沿进行中断, 1进行下降沿进行中断
3、 中断使能(一共有三个 IEN0 IEN1 IEN2) 0 中断禁止 1中断使能 和上边的第一步有什么区别???????????????
4、 将终端状态标志位进行置 0 ,他是中断的状态的标志,只要条件完全满足,中断开始,这个P0IFG就会自动置 1,但是中断完成后要记得将他重新置 0
5. 打开总中断
*/
}
/**
中断处理函数
*/
/**
格式 #pragma vector = 中断向量,紧接着是中断处理程序
**/
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
Delayms(10);//去除抖动
LED = ~LED;
P0IFG = 0;//清除中断标志
P0IF = 0;//清除中断标志???为啥还要用 搜不到
}
/**
主函数
*/
void main(void)
{
InitLed();
KeyInit();
while(1)
{
}
}