单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4程序:ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP START可以检测单个按键,也可以同时检测多个

我说一个可行的吧,但是不一定是最好的。定义一个位变量 bit fangxiang=1 ; //1表示一个方向,0表示另一个方向。用定时器自动控制灯移动。主循环里面这样写 while(1){ 检测P10按键;如果有按键;fangxiang=!方向;

流水灯的按键需要一直按着才能改变流水方向,这是由于流水灯的控制方式决定的。流水灯一般是通过微处理器或者电子时钟芯片控制的,其控制方式为循环扫描控制,即不断重复执行一个循环,在每个循环中对流水灯进行控制。按键触发后

51单片机实现方法:按键控制标志位flag取反。然后把下面的代码放到循环里:U8 temp0 = 1。U8 temp1 = 0x80。U8 i = 0。if(flag == 1)。{。for(i=0;i<8;i++)。{。P1=temp0<

简单点的,用表格,事先计算好,放到ROM中,用的时候逐行编译输出就可以。 复杂点的,开一个缓冲区,用循环程序,根据花样的不同,每次填充一行,并输出,然后再计算一下行。除非表格太大,不建议这样用。当单片机接收到按

K1、K3、K4。K1是总开关,当K1首次按下时,流水灯由下往上流动、当K2按下时停止流动、当K3按下时,使灯由上往下流动、K4则是由下往上流动。

可以通过控制按键的次数来控制流水灯的亮度,每次按下按键,流水灯就会改变灯光的亮度。

有没有用一个按键进行流水灯的转换方向

1;sbit key1=P1.2;sbit key2=P1.3;void main(){ while(1){ if((key|key1|key2)==0){led1=~led1;while((key|key1|key2)==0);} } 没试过 可能有些地方不对 你自己改改 反正思路就这样了

初始化单片机(设置定时器的定时时间为0.1s,控制灯,数码管的IO口设置为输出模式,检测按键的IO口设置为输入模式)---> 写三个函数模块(按键检测函数模块keyscan(char times);,流水灯控制模块LED_Ctrl(char times,char

while(1)//把while放到你的主函数里 { if(key==0) //定义到自己的按键 { run++; //全局变量 if(run==4){ run=1;} } P0=0xff; //这个程序控制的是P0口 switch(run){ case 1:P0=0xfe;P0=0x

led,led1;sbit key=P3^2;void ext0() interrupt 0{while(key==0);keyval++;keyval%=3;}void delay(uchar a){uchar i;while(a--)for(i=0;

3个按键控制8个流水灯,P1口接8个LED灯,P3口接3个按键,仿真图如下。

怎么用c程序实现3个独立按键控制流水灯(按键1实现速度加快,按键2实现减慢,按键3实现停止)?

}} void main(void){// Write your code hereunsigned char ct=100;while (1) //主循环{switch(P1) //P1口作为独立按键输入端,检测端口电平并做如下判断{case 0xfe:P0=dofly_table[1];LED0=0;break;//0x

不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后:void light_water(){ num=1;for(a=0;a<8;

=0xff)//接地了,有按下 { delayxms(10);//等键盘稳定,以确认不是误按、抖动 temp=P2;//再次检测 temp=temp&0xff;//防抖 ,确认是按下 if (temp!=0xff)//确认不是误按、抖动 { switch (temp)

1. 确定使用的按键引脚和LED引脚,以及它们的初始化设置。例如,按键连接到了P1.0引脚,LED连接到了P2.0引脚。2. 在主函数中,使用一个循环来不断检测按键状态,如果按键被按下,则进入灯光渐变的控制流程。3. 在控制

52单片机独立按键控制LED流水灯

} } if(k2==0) { delay(10); if(k2==0) { while(k2==0); flag=2; } } if(k3==0) { delay(10); if(k3==0) { while(k3==0); flag=3;

P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。

delay(5000);如果所带参数是一个常数,那流水灯的速度就是固定不变的。如果改成一个变量,如:delay(speed); 这速度就可以变化可调了。这样,通过按键改变变量speed的值,就调速度了。

TLOW EQU 0F0HTHIGH EQU 0D8HFLAG_DIR BIT 20H.0;FANGXIANGCOUNT_INT DATA 30HCOUNT_K DATA 31HLEDVALUE DATA 32HCOUNT_KEY DATA 33HKEY0 EQU P2.0KEY1 EQU P2.1KEY2 EQU P2

51单片机汇编怎么用四个独立按键来控制流水灯的速度?

不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后: void light_water() { num=1; for(a=0;a<8;a++) { P1.1=num<<1; delay(1000); //延时; keyboard();//执行时又不停扫描键盘函数; } } 这样就会有一个LED从右往左移动8次;那么当第一次流水未完时,又调用第二个流水函数light_water1就能中断当前执行的流水函数又去执行第二个流水灯函数了。 希望我的回答能帮助到你。
其实很简单的,随便使用一个定时/计数 器,使其工作在方式1(方便计算初值),然后写中断服务函数,使用_crol_()函数来反复循环做流水效果,然后在主函数最后写while(1),一直不停扫描键盘函数,然后键盘函数定义4个按键,开始:TRx=1,停止:TRx=0,至于快慢的控制你可以在中断函数里边写一个延时函数,然后按键3和4按下一次自增或自减1000(你可以取其他值),然后传递给延时函数。 有不懂的地方随时回复我。 希望我的回答能帮助到你。
while(1) { P1=aa; delayms(1000); aa=_crol_(aa,1); } 这前面的while(1)根本不会退出,也就是不会执行下面的if(key1 == 0)的语句了,所以按键按下去当然没有反应了 if(key1==0) { P1=0x7e;
参考: http://hi.baidu.com/do_sermon/item/ba6c010d009b7b324ac4a399
void main() { int i=0; //设置参考变量 //初始化 p1.0=1; p1.1=0; p1.2=0; //进入按键操作 while(1) { if(p2.2==0) { i++; if(i==1) { p1.0=0; p1.1=1; p1.2=0; delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。 } if(i==2) { p1.2=1; p1.0=0; p1.1=0; delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。 } if(i==3) { p1.0=1; p1.1=0; p1.2=0; delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。 i=0;//参考变量归0 } } } }
要实物 还说仿真呢 硬件做好了吗 我做单片机的
单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4程序:ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP START可以检测单个按键,也可以同时检测多个按键过程:开始--读P1口数据到A--A中的数据右移4次--A中的内容和F0H相或--A中的数据送到P1口--回到开始
有这么好的动手机会,就自己做吧。对以后非常有用(过来人的建议。)。 分享下我思路: 1、将你控制用的单片机datasheet下载下来,不用全看,挑需要的看,其他的以后研究。 2、这个项目只是控制单片机的流水灯而已,由于你未提供原理图,我就假设一个IO口控制一盏灯,程序设计流程如下: 初始化单片机(设置定时器的定时时间为0.1s,控制灯,数码管的IO口设置为输出模式,检测按键的IO口设置为输入模式) -----> 写三个函数模块(按键检测函数模块keyscan(char times);,流水灯控制模块LED_Ctrl(char times,char direction)(times为间隔时间,dir为流水灯方向);间隔时间显示函数Display();); -----> 在定时中断函数里分别设置0.1s,0.5s,1s,1.5s,2s的中断标志(即在里面计数,进中断1次,5次,10次,15次,20次。); -----> 主循环重复跑这几个函数模块 以下为伪代码: int main(void) { Initialize(); while(1) { keyscan(); Display(times); LED_Ctrl(times, dir);//times在keyscan()函数里更改. } }