51单片机之外部中断
描述:利用KEIL5编程,使AT89C52单片机的外部中断触发控制RGB灯显示。
硬件:
电路仿真图(未运行)

电路仿真(运行)

程序:
设置好外部中断数据,建议使用下降沿模式,低电平模式机械按键按下有跳动,需要通过消抖。



#include <REGX52.H>
sbit LED_R = P2^0; //ºì
sbit LED_G = P2^1; //ÂÌ
sbit LED_B = P2^2; //˦
unsigned char LED_Mode = 0;
void LED_RGB(unsigned char i)
{
switch(i)//¿ØÖÆLEDÏÔʾÑÕÉ<<
{
case 0: LED_R = 1; LED_G = 1; LED_B = 1; break; //black
case 1: LED_R = 0; LED_G = 1; LED_B = 1; break; //red
case 2: LED_R = 1; LED_G = 0; LED_B = 1; break; //green
case 3: LED_R = 1; LED_G = 1; LED_B = 0; break; //blue
case 4: LED_R = 0; LED_G = 0; LED_B = 1; break; //yellow
case 5: LED_R = 0; LED_G = 1; LED_B = 0; break; //violet
case 6: LED_R = 1; LED_G = 0; LED_B = 0; break; //cyan
case 7: LED_R = 0; LED_G = 0; LED_B = 0; break; //white
default: break;
}
}
void INT0_Isr(void) interrupt 0 //ÓÅÏȼ¶0 ×î¸ß
{
++LED_Mode;
LED_Mode %= 8;
}
void Ext_Init(void) //³õʼ>>¯ÍⲿÖжÏ0
{
IT0 = 1; //INT0(P3.2)ϽµÑØÄ£Ê½
EX0 = 1; //¿ªÆôÍⲿÖжÏ0
EA = 1; //¿ªÆô×ÜÖжÏ
}
void main()
{
Ext_Init();
while(1)
{
LED_RGB(LED_Mode);
}
}