interrupt
interrupt test
hardware
- STC89C52RC
code
/************************
external interrupt test (triggered by LOW)
give P3.2 LOW signal, make LED 4/4 reserve status
connect P3.2 - right lower corner pin
*************************/
#include <reg52.h>
void delay(unsigned int xms)
{
unsigned int i,j;
for (i = xms; i > 0; i--)
for(j = 112; j < 0; j--);
}
void main()
{
P1 = 0x0f; // 0000 1111 turn on 4 leds & turn off 4 leds
EX0 = 1; // INT0 interrupt allow
EA = 1; // global interrupt open
IT0 = 0; // emit LOW
while(1);
}
void low() interrupt 0
{
P1 = ~ P1;
delay(200);
}
/************************
external interrupt test (down triggered by LOW)
connect P3.3 - P3.6
*************************/
#include <reg52.h>
void main()
{
P1 = 0x0f; // 0000 1111 turn on 4 leds & turn off 4 leds
EX0 = 1; // INT0 interrupt allow
EA = 1; // global interrupt open
IT0 = 1; // down trigger
while(1);
}
void jump_low() interrupt 2
{
P1 = ~ P1;
}
Interrupt control LED display

/**
* 采用外部中断控制的条形LED彩灯设计
* hardware: STC89C51RC
* crystal: 12.0HMz
*/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar a;
void delayms(uint ms)
{
uint i;
while (ms--)
{
for (i=0;i<120;i++);
}
}
void LED1(void) // 左移花样
{
uchar i,j;
j = 0x01;
for (i=0;i<8;i++)
{
P0=~j;
delayms(250);
j=j<<1;
}
}
void LED2(void) // 右移花样
{
uchar i,j;
j = 0x80;
for (i=0;i<8;i++)
{
P0=~j;
delayms(250);
j=j>>1;
}
}
void LED3(void) // 拉幕式与闭幕式花样
{
uchar i,j,k,LED;
j = 0x10;
k = 0x08;
for (i=0;i<4;i++)
{
LED=j|k;
P0=~LED;
delayms(250);
j = _crol_(j, 1);
k = _cror_(k, 1);
}
LED = 0xFF;
P0 = ~LED;
delayms(250);
j = 0x80;
k = 0x01;
for (i=0;i<4;i++)
{
LED = j|k;
P0 = LED;
delayms(250);
j = _cror_(j, 1) + 0x80;
k = _crol_(k, 1) + 0x01;
}
}
void int_1() interrupt 2
{
delayms(100);
if (INT1 == 0)
{
a++;
if (a > 3)
{
a = 1;
}
}
}
void INT1_init(void)
{
EX1 = 1;
IT1 = 1;
EA = 1;
}
void main(void)
{
INT1_init();
a = 1;
while(1)
{
switch(a)
{
case 1: LED1();break;
case 2: LED2();break;
case 3: LED3();break;
}
}
}
Page Source