延时子程序 /// void delay(unsigned int cnt){ while(--cnt);} /// // 主函数 ///
void int0(void) interrupt 0 using 0 //用于减小流水灯速度 { if(flag<9)flag++;} / 函数功能:外中断T0的中断服务程序 / void int1(void) interrupt 2 using 0 //用于增加流水灯速度 { if(flag>1)flag--;}
include
T0 工作模式2 计时器中断,一次200us,1s流水灯左移或右移一次。k3触发外部中断0,级别高于计时器中断,故暂停。include
void light_water(){ num=1;for(a=0;a<8;a++){ P1.1=num<<1;delay(1000); //延时;keyboard();//执行时又不停扫描键盘函数;} } 这样就会有一个LED从右往左移动8次;那么当第一次流水未完时,又调用第
if(Flag1==1)(Flag2=~Flag2); //如果一旦检测到一次按键扫描就把标志位2 打开;再次就关闭;if(Flag2==1)// 如果标志位打开就开始流水灯 { temp=0x01;for(i=0;i<8;i++) //8个流水灯逐个闪动 { P1=~te
可以用for循环试试unsingned char i;for(i=0;i<5;i++)//流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-
用C语言编写按键控制流水灯的程序
//单片机流水灯程序,是学习单片机的最简单的程序。//流水灯 include
/***32灯流水——火柴天堂作品-20130520***/ /***52单片机,12MHz晶振,P0-P3 接32颗LED,低电平驱动***/ include"REG52.h"//包含52头文件 define TRUE 1//定义布尔量'1':真 define FALSE 0//定义布尔量'0'
}} 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流水灯
P1口接8个流水灯,用两个开关K1和K2控制流水灯的方向,仿真图如下。
MO P1,A ;将A的值赋给P1口 LCALL DEL1S ;调用1S延时子程序 DJNZ R4,LOOP ;判断R4是否为0,不为0跳转,为0顺序执行 LJMP LIGHT ;跳转指令,跳转至LIGHT处继续执行 ;1S延时子程序(11.MHz晶振,误差0微
KEYR EQU P1.0 KEYL EQU P1.1 LED EQU P0 ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN:MOV TMOD,#01H MOV TH0,#HIGH(65536-50000)MOV TL0,#LOW(65536-50000)SETB ET0 SETB EA MOV A,#
K1 EQU P1.0K2 EQU P1.1ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,#0FEH CLR 00H CLR 01HLOOP: JB K1,LOOP1 SETB 00H CLR 01H SJMP LOOPLOOP1: JB K2,LOOP2 SETB 01H
include
求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢
while(1){ P1=aa;delayms(1000);aa=_crol_(aa,1);} 这前面的while(1)根本不会退出,也就是不会执行下面的if(key1 == 0)的语句了,所以按键按下去当然没有反应了 if(key1==0){ P1=0x7e;
} void main(){ bit dir=0,run=0; //标志位定义及初始化 char i;while(1){ switch (P0 & 0x0f){ //读取键值 case 0x0e:run=1;break; //K1动作,设run=1 case 0x0d:run=0,dir=0;break;
P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。
} } 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;
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单片机汇编怎么用四个独立按键来控制流水灯的速度?
1、可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。2、具体实现方法可以参考如下程序:
单片机流水灯C语言程序的源代码如下:include //51系列单片机定义文件 define uchar unsigned char //定义无符号字符 define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void){ uint
proteus电路图 画法依旧不说,给出元件清单,其实都差不多,与上篇一致51单片机 电容 瓷片电容 晶振 红色二极管 电阻 电路图如图 程序清单 说明:流水灯的闪亮方法肯定不是唯一的,按照各种形式都可以写出所需的程序,这里只用
P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay
可以用for循环试试unsingned char i;for(i=0;i<5;i++)//流水灯闪烁程序。若干个灯泡依次点亮就叫流水灯,它用在夜间建筑物装饰方面。例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。单片机(Single-
( 1 ) LED LED灯驱动程序,两种演示方式 ( 2 ) SMG 数码管驱动程序,循环滚动显示数字1-6 ( 3 ) 1602 1602液晶驱动程序,除正常显示ASCII码外,还教如何显示中文 ( 4 ) 12864 12864液晶驱动程序,显示汉字和图形。
流水灯的多种实现方式: 编写单片机C语言程序,在单片机实验板上实现流水灯效果,
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() { 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 } } } }要实物 还说仿真呢 硬件做好了吗 我做单片机的
上一节我们介绍了什么是总线的方法,以及如何通过十六进制来控制IO口。并把我们的之前单点操作的流水灯进行了改进,成为了一个新的更加简洁的程序。这回,就再用总线方法,来实现流水灯的更加多样化的操作。 这次,我们要实现正向流水结束后再反过来流水,如此循环。然后再间隔闪烁。然后再累积流水,最后结束。 正向流水结束,再反过来。这个如何实现呢,我们需要使用到一些运算方法。 第一个是移位指令<<。 由于数字对比不强,看的不是很清晰,所以把数字给换成红色了。 <<这个标志符的意思是,向左移动一位,就像下边这样: 1111 1111》1111 111_ 移动完成后,会发现,最低位空出来了,此时程序会自动去填补一个0。于是就成了: 1111 1111》1111 111_》1111 1110 第一次移位1111 1110,第二次在第一次基础上移位1111 1100,第三次在第二次基础上移位1111 1000,如此循环,就可以一直把所有位都变成0。 我们在看下一句"|",这个符号是或的意思,我们知道,逻辑中的或,是说只要有其一为一,结果就是一。所以,我们把1100|0001,结果就是头两个一和最后一个一留下来,第三位因为都是0,所以就是0.结果就是1101了。当再次移位后,数据就变成1010了,我们再次跟0001取或,最后一位就再次置1,结果就是1011,从结果上看,1110》1101》1011……就是0在不断的左移。 通过这个方法,可以让每一位都会单独置零。然后再给以一定时间的延时,就会看到流水灯了。 如果我们不赋初值0xfe会出现什么情况? 就会出现,移位产生一个0,在或运算时就会被重新置1,如此循环,就进入不到第二个LED,也就不会出现流水灯了。可以自己尝试下。 向右流水,效果是一样的,需要注意的是初值更改为左侧为0,就是0x7f,0111 1111,然后移位符号>>,还有取或的语句需要用0x80,1000 0000. 基本上是在左移位的基础上稍作修改即可。 接下来是闪烁的。 闪烁,我们用的是间隔LED的方法,就是隔一个亮一个,端口输出是1010 1010。翻译成十六进制就是0xaa。这次用到的是一个取反的运算,就是把每一位的0变成1,1变成0,然后延时一段时间,再次取反,循环几个周期,就看起来像是不断闪烁。取反的操作相对好理解一些,就是这一位,现在是1,那么取反后就是0,就是0和1的变换。 最后是一个累积点亮LED。 这个程序就是把第一个我们向左移位的函数,进行了更改,取消了赋初值,不用取或了,这样就可以对比着理解,各个语句的作用,如果不使用,会产生什么结果。如果我们的第一个函数不用取或这一步,那最终输出结果就和这个现象一样了。 所以,我们在写程序时,需要认真,仔细分析自己需要的结果,然后对照程序进行简单的演算。保证每一段都是可以输出想要的结果,不然累积到最终,几百行的代码,看起来就会头疼的,尤其是在没有标注释的情况下,有时就会忘记自己为什么要写这一句。 好的,这篇先说到这里,有问题或建议可以留言或私信给我。 想了解更多精彩内容,快来关注小亮谈电气 更多多内容,欢迎关注百家号:小亮谈电气。微信公众号:电气学苑。
你好,单片机LED流水灯设计实验现象如下:1. 初始状态下,LED灯全部熄灭。2. 单片机输出高电平时,点亮第一个LED灯,其余LED灯仍然熄灭。3. 单片机输出低电平时,熄灭第一个LED灯,点亮第二个LED灯,其余LED灯仍然熄灭。4. 重复步骤2-3,依次点亮后续的LED灯,形成流水灯效果。[握手]【摘要】 单片机LED流水灯设计实验现象【提问】 你好,单片机LED流水灯设计实验现象如下:1. 初始状态下,LED灯全部熄灭。2. 单片机输出高电平时,点亮第一个LED灯,其余LED灯仍然熄灭。3. 单片机输出低电平时,熄灭第一个LED灯,点亮第二个LED灯,其余LED灯仍然熄灭。4. 重复步骤2-3,依次点亮后续的LED灯,形成流水灯效果。[握手]【回答】 所以说通过这个实验,可以了解单片机控制LED灯的原理和方法,可以进一步掌握单片机的编程技能,为后续的电子设计和开发打下坚实的基础喔。[抱抱]【回答】
不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,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(你可以取其他值),然后传递给延时函数。 有不懂的地方随时回复我。 希望我的回答能帮助到你。
java代码吗。
#include #include void deley(int i) {int j; while(i--) { for(j = 0;j<115;j++); } } void INT0_srv(void) interrupt 0 { delay1ms(10); if(INT0==0) { flag = !flag; while(INT0 == 0); } } void main { while(1) if(flag == 0) { P1 = 0xfe; delay(100); P1 = 0xfd; delay(100); P1 = 0xfb; delay(100); P1 = 0xf7; delay(100); } if(flag ==1) { P1 = 0xf7; delay(100); P1 = 0xfb; delay(100); P1 = 0xfd; delay(100); P1 = 0xfe; delay(100); } } } 通过外部中断INT0所连的按键可以控制P1.4-P1.7所控制的LED等顺序或者逆序形成流水灯。这是基于51的程序,其它CPU的也大同小异,希望对你有帮助!
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
一般都是用io口控制.输入口接受按键信息.输出口控制流水灯. 你的硬件平台是什么啊
自己不知道去做:八九不离十;程序都是调出来的: