void Key_Init(void)
{
rGPFCON&=~((3<<2)|(3<<4)|(3<<6)|(3<<8))//初始化GPF1,GPF2,GPF3,GPF4(分别对应KEY2,KEY3,KEY4,KEY5)
rGPFCON|=(2<<2)|(2<<4)|(2<<6)|(2<<8)//将GPF1,GPF2,GPF3,GPF4分别设置为EINT
}
然后设置中断控制寄存器:
void Irq_Init(void)
{
rINTMSK &= ~((1<<2)|(1<<3)|(1<<4)|(1<<5))//将INTMSK(中断屏蔽寄存器)中的EINT1-4_7设置为可服务状态
rEINTMASK &= ~((1<毕源差<4))//外部中断屏蔽寄存器(KEY1,KEY2,KEY3和KEY4分别对应EINT4)
}
然后就要写中断服务函数了。
void Isr_Init(void)
{
pISR_EINT1=(unsigned int)Eint1_Isr
}
void __irq Eint1_Isr(void)
{
unsigned long val
val=rEINTPEND
if(val&(1<<1))
{
rEINTPEND |=1<<8
Led1_On()
Delay1s()
Led1_Off()
}
rSRCPND |=1<<1
rINTPND |=1<<1
}
不明白的可以追问我。
#include "reg52.h"sbit key=P3^2
void main()
{
IT0=1//外部中断0连沿触发方式
EX0=1//使磨基液能外部锋歼中断0
EA=1//开部瞎物中断
while(1)
}
void int0() interrupt 0
{
int tab[]={0xff,0x7f,0xbf,0x3f,0xdf,0x5f,0x9f,0x1f,0xef,0x6f,0xaf,0x2f,0xcf,0x4f,0x8f,0x0f}
int count=15
long int i
while(1)
{
if(key==0)
for(i=0i<10000i++)
if(key==0)
{ count--
if(count==0)
count=15
P3= tab[count]
while(key==0)
}
}
}
sbit p32=P3^2void ext0() interrupt 0
{
unsigned num=0
while(num<4)
渗差桐 {
丛坦while(p32==0)
num++
freq+=100
庆行 }
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)