⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 01-外部中断.c

📁 CAN现场总线.rar
💻 C
字号:
//	01-外部中断.c
//	记录外部中断的次数(外部中断的次数),然后显示在数码管
//	29-09-09 akuei2

#include "reg52.h"
#define uchar unsigned char

sbit    SJA1000_CS  = P2^0;//SJA1000片选管脚. 低电平有效

//定义数码管码
uchar code Led_Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//定义位选码
//0b111011111,0b11011111,0b10111111,0b01111111
uchar code Led_Select[]={0xEF,0xDF,0xBF,0x7F};  

int Click;

//50微秒延迟函数
void Delay_50us(int t)
{
	uchar j; 
    t--;
	for(;t>0;t--)  
   		for(j=19;j>0;j--);
    
}

//1毫秒延迟函数
void Delay_1ms(int t)
{
	uchar j; 
	for(;t>0;t--)  
   		for(j=112;j>0;j--);
    
}

//数码管显示函数
void Display(void)
{
	int Digit[4],i;
	Digit[3]=Click/1000;			//第一个数码管取千位
	Digit[2]=Click%1000/100;		//第二个数码管取百位
	Digit[1]=Click%100/10;			//第三个数码管取十位
	Digit[0]=Click%10;				//第四个数码管取个位
	for(i=0;i<4;i++)
	{
		P0=Led_Code[Digit[3-i]];		//送数码管码
		P2=Led_Select[i];				//送位选码
		Delay_50us(20);					//延迟1微秒
		P0=P2=0xff;						//消影
	}
}

//初始化函数
void Init(void)
{
	IT0 = 1;		//外部中断0负边沿触发
    EX0 = 1;		//打开外部中断0
    EA = 1;  		//打开总中断
	SJA1000_CS = 1;	//片选无效
}

//主函数
void main(void)
{
	Init();
	while(1)
	{
		Display();
	}
}

//外部0中断函数
void Ir_ex0(void) interrupt 0
{
	EX0=0;EA=0;				//关闭外部中断0,关闭全局中断使能
	Delay_1ms(10);			//消抖
	Click++;				//记录按键次数
	if(Click>=10000) Click=0;	//如果案件超过一万次就回归0
	EX0=1;EA=1;					//开启外部中断0,开启全局中断使能
	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -