实现功能
利用P0端口进行花样显示,显示顺序为:①,8个LED灯依次左移点亮;②,8个LED灯依次右移点亮;③,LED0、LED2、LED4、LED6亮1秒熄灭,LED1、LED3、LED5、LED7亮1秒熄灭,交替循环3次。④单片机的INT0引脚与按钮连接,每按下一次按钮K1,产生依次外部中断,使8个LED灯闪烁5次。
电路原理图
![](https://img-blog.csdnimg.cn/e8ead909dc014f0abc910d8b2ca20dde.png)
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();
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)