单片机独立式按键的外部中断扫描
k1~k4接p1.0~p1.3。8只LED灯接p2口,按键要求外部中断扫描,k1控制LED由上到下亮10次,k1控制由下到上亮十次,k3高低四位交替闪烁十次,k4八只LE...
k1~k4接p1.0~p1.3。8只LED灯接p2口,按键要求外部中断扫描,k1控制LED由上到下亮10次,k1控制由下到上亮十次,k3高低四位交替闪烁十次,k4八只LED闪烁10次,求程序
展开
4个回答
展开全部
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar key;
void ext0() interrupt 0
{
if(P1&0x01)key=1;
else if(P1&0x02)key=2;
else if(P1&0x04)key=3;
else if(P1&0x08)key=4;
else key=0;
}
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
main()
{
uchar led,i,j;
while(1)
{
switch(key)
{
case 1:
led=0xfe;
for(i=0;i<10;i++)
for(j=0;j<8;j++)
{
P1=led;
led=_crol_(led,1);
delay(200);
}
break;
case 2:
led=0x7f;
for(i=0;i<10;i++)
for(j=0;j<8;j++)
{
P1=led;
led=_cror_(led,1);
delay(200);
}
break;
case 3:
led=0x0f;
for(i=0;i<10;i++)
{
P1=led;
delay(200);
led=~led;
P1=led;
delay(200);
led=~led;
}
break;
case 4:
for(i=0;i<10;i++)
{
P1=0x00;
delay(200);
P1=0xff;
delay(200);
}
break;
}
}
}
展开全部
4个按键,共用一个中断,跟查询没什么区别呀。
主程序中:
EX0=1;EA=1; IT0=1;
while(1)
{
P1=0XF7;delayms(10);//扫描按键1
P1=0XFB;delayms(10);//扫描按键2
P1=0XFD;delayms(10);//扫描按键3
P1=0XFE;delayms(10);//扫描按键4
}
中断程序中:
EX0=0;//关中断
if(P1==0XF7){ 自上而下亮 }
if(P1==0XFB){ 自下而上亮 }
if(P1==0XFD){ 交替闪烁}
if(P1==0XFE){ 8只闪烁 }
EX0=1;//开中断
主程序中:
EX0=1;EA=1; IT0=1;
while(1)
{
P1=0XF7;delayms(10);//扫描按键1
P1=0XFB;delayms(10);//扫描按键2
P1=0XFD;delayms(10);//扫描按键3
P1=0XFE;delayms(10);//扫描按键4
}
中断程序中:
EX0=0;//关中断
if(P1==0XF7){ 自上而下亮 }
if(P1==0XFB){ 自下而上亮 }
if(P1==0XFD){ 交替闪烁}
if(P1==0XFE){ 8只闪烁 }
EX0=1;//开中断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得没人会专门为了回答问题而写个代码,除非刚好有现成。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
交通灯仿真实例,可以参考一下,下载附件仿真试试。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询