89C52单片机中断与 I/O 控制

这个实验的内容是:通过外部中断控制8个LED灯顺序点亮(像流水灯),采用多个源文件和多个头文件编写C语言程序(即一个源文件对应一个头文件),并在proteus中在仿真。

关于多个源文件和多个头文件的编写规则请参考这篇博客:关于多个.c和.h文件时的相互调用

proteus图如下:
89C52单片机中断与 I/O 控制_第1张图片

具体实现方式请看下面的程序:

#include"main.h"

void main(){
     
	int1_init();  //初始化外部中断
	while(1);  //等待外部中断
}

#ifndef __MAIN_H__
#define __MAIN_H__

	#include"int1_init.h"
	#include"reg52.h"

#endif
#include"int1_init.h"

void int1_init(){
     
	IT1=1;//以下降沿为触发信号
	EX1=1;//外部中断控制位
	EA=1;//中断总控制位
}
#ifndef __INT1_INIT_H__
#define __INT1_INIT_H__

	#include"reg52.h"
	void int1_init(void);

#endif
#include"int1_isr.h"

int i=0;

//当按下按键时,进入中断函数执行指令
void int1_isr() interrupt 2{
     
	if(i<8){
     
		P0=~(0x01<<i);  //把0x01向左移一位,再按位取反
		i++;
	}
	//当i=8时,又点亮第一个LED灯
	else{
     
		i=1;
		P0=~(0x01);
	}
}
#ifndef __INT1_ISR_H__
#define __INT1_ISR_H__

	#include"reg52.h"

#endif

你可能感兴趣的:(单片机)