📄 ext_int0.c
字号:
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//功能描述:
// INTO按键为计数按键,数码管显示按键的次数 &
// 上电后数码管显示0,十进制显示 &
// 使用者可以进一步开发T1计数程序 &
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! &
//【声明】 作者: PIAE小组
/*
*/
#include <reg52.h>
#include <intrins.h>
#include <ext_int0_def.h>
void INT0_Counter( void ) interrupt 0 using 1
{//INT0为计数按键
EA = 0;
Show_Data++; //计数单元加1
EA = 1;
}
void main(void)
{
CPU_init();
_nop_();
while(1)
{
NOPS;
///////////////////////数码管显示程序/////////////////////////////////
led_seg7(1,Show_Data);
LED_RED = !LED_RED;
LED_GRE = !LED_GRE;
///////////////////////数码管显示程序/////////////////////////////////
}//while 结束
}//main结束
void Delay(uchar delay_time)
{//延时程序
while(delay_time--)
{}
}
void CPU_init(void)
{//初始化CPU
IT0 = 1;//外部中断0负边沿触发
EX0 = 1;//打开外部中断0
EA = 1; //打开总中断
SJA1000_CS = 1;//片选无效
}
void led_seg7(uchar from,uchar number) //from(1_4):数码管显示起始位置(从右到左),number:显示的数
{
uchar digit,temp_l;
uchar temp_h=0x7f;
temp_h = _cror_(temp_h,from-1); //确定从哪一位开始显示,即确定高四位
temp_h = temp_h & 0xf0; //取高四位
temp_l = P2 & 0x0f; //取P2的低四位
P2 = temp_h | temp_l; //设定P2口
if(number==0)
{
P0 = led[0];
Delay(5);
P0 = 0xff;
}
else
{
while(number)
{
digit = number%10 ;
number /= 10;
P0 = led[digit] ;
Delay(5);
temp_h = P2 & 0xf0; //取P2的高四位
temp_h = temp_h | 0x0f; //拼装 temp_h,进行位选
temp_h = _cror_(temp_h,1);
temp_h = temp_h & 0xf0; //取高四位
temp_l = P2 & 0x0f; //取P2的低四位
P0 = 0xff;
P2 = temp_h | temp_l; //设定P2口
}//while结束
}//else结束
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -