您的位置:首页 > 其它

单片机中断的应用

2015-11-19 14:00 405 查看
51单片机:

P3.2 引脚为INT0 中断

P3.3引脚为INT1 中断

按钮 P3.2 P3.3

按钮低电平触发:

while(PB0==0);

delay();

#include <reg51.h>
#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<x;i++)        //    计数x次,延迟x*10ms
for (j=0;j<1200;j++);    //    计数1200次,延迟10ms   1200*8us
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: