51单片机之外部中断

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);

}

}

相关推荐
AF_INET62 小时前
RV1126B开发板学习篇(二)v4l2+mpp编码
c语言·经验分享·音视频·视频编解码·嵌入式软件·rv1126b
冲,干,闯4 小时前
矩阵按钮部件
单片机
12.=0.4 小时前
【stm32_2.2】【快速入门】对GPIO解析、外设的初始化和配置、细节分析GPIO
stm32·单片机·嵌入式硬件
我是标同学4 小时前
单片机IO增强电流驱动能力的三极管几种接法
单片机·嵌入式硬件
心语星愿114 小时前
STM32单片机高级篇-物联网通信之CAN通讯(学习笔记)
stm32·单片机·物联网
我不是懒洋洋6 小时前
预处理详解
c语言·开发语言·c++·windows·microsoft·青少年编程·visual studio
计算机安禾6 小时前
【数据结构与算法】第14篇:队列(一):循环队列(顺序存储
c语言·开发语言·数据结构·c++·算法·visual studio
爱编码的小八嘎6 小时前
C语言完美演绎6-9
c语言
VALENIAN瓦伦尼安教学设备7 小时前
设备对中不良的危害
数据库·嵌入式硬件·算法