微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 如何用2个按键实现2种灯光效果的转换

如何用2个按键实现2种灯光效果的转换

时间:10-02 整理:3721RD 点击:
如题,小弟今年准备毕业 学的是电子信息工程 尝试用C编写了个16个灯的流水灯+按键转换效果的程序
一开始从左往右 按了一下就从右至左。用的是中断实现
我现在向用另外一个按键来实现第三种效果 不知道该怎么编写
下面附上源程序  求帮忙

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#include <intrins.h>
void delay(int a)
{
uint x,y;
for(x=0;x<100;x++)
for(y=0;y<a;y++);
}
void main()
{
uchar a=0xfe,b=0xfe,c=0x7f,q;
IT0=0;
EX0=1;
EA=1;
while(1)
{
for(q=0;q<8;q++)
{
    P0=a;
    a=_crol_(a,1);
    delay(50);
}
    P0=0xff;
for(q=0;q<8;q++)
{
    P2=a;
    a=_crol_(a,1);
    delay(50);
}
    P2=0xff;

/*P0=b;
delay(100);
b=_crol_(b,1);
delay(100);
P0=0xff;*/
/*P2=0xff;
P2=a;
delay(100);
a=_crol_(a,1);
delay(100);
P2=0xff;*/
}
}
int0() interrupt 0//外部中断0服务子程序
{
uchar a=0xfe,b=0xfe,c=0x7f,q;
for(q=0;q<8;q++)
{
    P2=c;
    c=_cror_(c,1);
    delay(50);
}
    P2=0xff;
for(q=0;q<8;q++)
{
    P0=c;
    c=_cror_(c,1);
    delay(50);
}
    P0=0xff;
}

/*P0=0x00;         //16个灯闪烁
P2=0x00;
delay(100);
P0=0xff;
P2=0xff;
delay(100);*/

第三种效果是从两边向中间逐个点亮  谢谢

可以从硬件电路上改进,比如两个开关都接中断口,同时又分别接两个io口,触发中断后,再检测按的是哪个开关,实现对应效果。

比如说从中间向两边散,再由两边向中心聚
int1() interrupt 1//外部中断1服务子程序
{
uchar a=0xfe,b=0xfe,c=0x7f,q;
for(q=0;q<8;q++)
{
    P0=a;
    P2=c;
    c=_crol_(c,1);
    c=_cror_(c,1);
    delay(50);
}
    P2=0xff;
    P0=0xff;
for(q=0;q<8;q++)
{
P0=c;
P2=a;
a=_crorr_(c,1);
c=_crol_(c,1);
delay(50);
}
P2=0xff;
P0=0xff;
}
PCB打样找华强 http://www.hqpcb.com 样板2天出货

说明哦,我不知道你的灯啥顺序的,顺序不对的话把a与c,_cror_与_crol_换换就好了

说明哦,我不知道你的灯啥顺序的,顺序不对的话把a与c,_cror_与_crol_换换就好了

像楼上说的,io口和中断口搭配可以实现n中顺序

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top