51单片机:
P3.2 引脚为INT0 中断
P3.3引脚为INT1 中断
按钮 P3.2 P3.3
按钮低电平触发:
while(PB0==0);
delay();
#include
#define SEG P0 // 定义七节显示器接至Port 0
sbit LED = P2^0; // 定义LED灯接至P2.0
sbit com = P1^0 ; // 数码管 com 口
sbit OC = P1^1; // 定义573锁存器使能口,我是用的573驱动7段数码管
void delay10ms(int x); // 声明延迟函数 10ms * x;
sbit PB0=P3^2; //按钮0
sbit PB1=P3^3; //按钮1
unsigned char code TAB[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67 }; // 共阴极
main()
{
OC = 0; //锁存置0 ,点亮数码管
com = 0; //点亮SEG
EA =1; //总中断
EX0 = 1; //外部中断 INT0
EX1 = 1; //外部中断 INT1
TR0 = 1; // 运行INT 0中断
TR1 = 1; // 运行INT1 中断
//TCON = 0x05; // 设置信号触发方式为负边沿触发
while(1)
{
int i;
for(i=0;i<10;i++) // 显示0-9(上数)
{ SEG=TAB[i];
delay10ms(40); // 延迟 0.4s
}
}
}
void my_int0(void) interrupt 0 // INT 0
{ int i;
while(PB0==0);
delay10ms(25);
for (i=9;i>=0;i--) // for循环显示9-0(下数)
{
SEG=TAB[i]; // 显示数字至七节显示器
delay10ms(40); // 延迟 0.4s
}
}
void my_int1(void) interrupt 2 //INT 1
{ int i;
while(PB1==0);
delay10ms(25);
for(i=0;i<10;i++)
{
LED = 0;
delay10ms(25);
LED = 1;
delay10ms(25);
}
}
/* 延迟函数,延迟约x*1ms */
void delay10ms(int x) // 延迟函数开始
{
int i,j;
for (i=0;i for (j=0;j<1200;j++); // 计数1200次,延迟10ms 1200*8us }
上一篇:KeilC51常用功能模块使用说明
下一篇:定时器的应用---中断方式---让8个LED灯,左右各4个来回亮
推荐阅读最新更新时间:2024-03-16 15:25