您好,欢迎来到易妖游戏网。
搜索
您的当前位置:首页Proteus&keil-51单片机-外部中断控制流水灯

Proteus&keil-51单片机-外部中断控制流水灯

来源:易妖游戏网

实现功能

利用P0端口进行花样显示,显示顺序为:①,8个LED灯依次左移点亮;②,8个LED灯依次右移点亮;③,LED0、LED2、LED4、LED6亮1秒熄灭,LED1、LED3、LED5、LED7亮1秒熄灭,交替循环3次。④单片机的INT0引脚与按钮连接,每按下一次按钮K1,产生依次外部中断,使8个LED灯闪烁5次。

电路原理图

 C51代码

#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
const tab[]={0xfe,0xfd,0xf7,0xef,0xdf,0xbf,0x7f, //正向闪烁 LED
	0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff, // 反向闪烁 LED
	0xaa,0x55,0xaa,0x55,0xaa,0x55,0xff,}; // 交替闪烁 LED
const tab2[]={0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,}; //中断后的闪烁LED

void delay (void) 延时程序,11.592MHz晶振时延时0.5秒
{
	uint i,j,k;
	for(i=10;i>0;i--)
	{for(j=200;j>0;j--)
		{for(k=230;k>0;k--);}}
	}

void int0() interrupt 0 // INT0 中断服务程序 
{
	uchar i;
	for(i=0;i<10;i++)  //循环10次,延时0.5s*10=5秒
	{
		P0=tab2[i];
		delay();
	}
}

void INT0_init(void) 
{
	EX0=1; //打开外部中断0
	IT0=1; //下降沿触发中断INT0,对应电路图开关K1接地
	EA=1;// 允许总中断
}

void main(void) //主程序
{
	uchar x;
	INT0_init(); //触发中断时转到中断程序
	while(1)
	{
		for(x=0;x<23;x++) //循环左移右移闪烁
			{
				P0=tab[x];
				delay();
			}
		}
	}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- vipyiyao.com 版权所有 湘ICP备2023022495号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务