标题:
求助 51单片机外部中断下的LED控制器
[打印本页]
作者:
jiror
时间:
2018-4-29 14:43
标题:
求助 51单片机外部中断下的LED控制器
独立按键启动外部中断,按下K1后小灯全亮,再次按下K1小灯恢复原状态。外部中断服务函数内不知道该怎么写
<div>#include "reg52.h"</div><div>#include<intrins.h> //左右移函数头文件
#define GPIO_LED P0 //将P0口另外取名为GPIO_LED </div><div>
typedef unsigned int u16;
typedef unsigned char u8;</div><div>
</div><div>void type1();
void type2();
void type3();
void type4();
void allbright();
sbit k1=P3^2; //暂停全亮
sbit k2=P3^2; //自动与手动切换功能
sbit k3=P0^2; //type1
sbit k4=P0^1; //type2
sbit k5=P0^0; //type3
sbit k6=P0^3; //type4</div><div>void Delay1ms(unsigned int c) //延时函数
{
unsigned char a,b;
for (; c>0; c--)
{
for(b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
void Int0Init() //外部中断0和1初始化设置
{
IT0=1;
EX0=1;
IT1=1;
EX1=1;
EA=1;
}</div><div>/*初始效果:四种模式轮流播放*/
/*按下K1:暂停全亮,再按一次复位*/
/*按下K2:进入自选模式,按下K3456选择相应模式,再按K2复位*/
void main()
{
while(1)
{
Int0Init();
type1();
type2();
type3();
type4();
}
}</div><div>void allbright() //暂停全亮
{
P0=0xff;
Delay1ms(1000);
}
void type1() //间隔亮灭
{
P0=0xaa;
Delay1ms(1000);
P0=0x55;
Delay1ms(1000);
}
void type2() //半亮半灭
{
P0=0xf0;
Delay1ms(1000);
P0=0x0f;
Delay1ms(1000);
}</div><div>void type3() //流水效果1
{
unsigned char n;
GPIO_LED=0xfe;//1111_1110->1111_1101
for(n=0;n<7;n++) //左移7次,这样子就会到达最左边
{
GPIO_LED=_crol_(GPIO_LED,1); //将GPIO_LED左移一位
Delay1ms(100); //延时
}
for(n=0;n<7;n++) //右移7次,这样子就会到达最右边
{
GPIO_LED=_cror_(GPIO_LED,1); //将GPIO_LED右移一位
Delay1ms(100); //延时
}
}</div><div>void type4() //流水效果2
{
unsigned char n;
GPIO_LED=0x01;//0000_0001->0000_0010
for(n=0;n<7;n++) //左移7次,这样子就会到达最左边
{
GPIO_LED=_crol_(GPIO_LED,1); //将GPIO_LED左移一位
Delay1ms(100); //延时
}
for(n=0;n<7;n++) //右移7次,这样子就会到达最右边
{
GPIO_LED=_cror_(GPIO_LED,1); //将GPIO_LED右移一位
Delay1ms(100); //延时
}
}</div><div>
</div><div>void Int0() interrupt 0 //外部中断0 K1按下自动进入该服务函数
{
???
}</div><div>
</div>
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1