蓝桥开发板(CT107D)学习记录———7.外部中断控制数码管显示数值的增减

题目要求:
外部中断每发生一次,在数码管上显示一个数字,数码管显示初始状态为灭。且中断每触发一次显示的数值增加1或减少1(INTO做加法,INT1做减法)。

/*外部中断,INT0加一,INT1减一,初始时数码管灭*/
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define KEYPORT P3
sbit INT_0=P3^2;//位定义外部中断的接口
sbit INT_1=P3^3;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管编码表0~9
int num=-1;
uchar Trg=0,Cont;
void Delay2ms()		//@11.0592MHz
{
	unsigned char i, j;
	_nop_();
	_nop_();
	i = 22;
	j = 128;
	do
	{
		while (--j);
	} while (--i);
}
void init(void)
{
	P2=0xa0;P0=0x00;P2=0x00;//关蜂鸣器
	P2=0x80;P0=0xff;P2=0x00;//LED消影
}
void inter_EX()//初始化外部中断
{
	EA=1;//开总中断
	EX0=1;EX1=1;//开外部中断0,开外部中断1
	IT0=1;IT1=1;//下降沿触发
}
void Display(int n)
{
	  if(n<0)
	  {
			P2=0xc0;P0=0xff;P2=0x00;//初始时n=-1,不显示
			P2=0xe0;P0=0xff;P2=0x00;
			Delay2ms();
	  }
	  else
	  {
			P2=0xc0;P0=0x40;P2=0x00;//位选,选中十位
			P2=0xe0;P0=table[n/10];P2=0x00;
			Delay2ms();
			P2=0xc0;P0=0x80;P2=0x00;//段选选中个位
			P2=0xe0;P0=table[n%10];P2=0x00;
			Delay2ms();
			n=0;
	  }
}
void ex0_inter() interrupt 0
{
	EX0=0;//关中断,防止中断再次发生
	num++;//显示加一
	if(num>99)
		num=0;
	EX0=1;//开中断
}
void ex1_inter() interrupt 2
{
	EX1=0;
	num--;//显示减一
	if(num<0)
		num=99;
	EX1=1;
}
void main()
{
	init();
	inter_EX();
	while(1)
	{ 
		Display(num);
	}
}

触发方式要注意一下,还有就是,显示时,初始时候是灭的,还有0的时候再减一,像这种操作,要人为规定操作。比如0-1=99;还有就是中断发生时要关上中断防止中断再次发生,可能会导致,长按加好次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值