用4个按键控制流水灯,P1口接8个LED流水灯,P3.4~P3.7接有4个按键,仿真图如下。
你可以简单地认为单片机只能输出5V或者0V的电压 分别对应1和0,那么LED灯的另一端接地或者接5V,如果你 的单片机输出5V接到LED灯,LED灯另一端接地 ,那就产生电压了,电路就导通了,灯就亮了 ,反之也是这个道理。时间
不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后:void light_water(){ num=1;for(a=0;a<8;
}}按键控制两个灯#include
//控制引脚定义 sbit LED1 = PX.X; //P0.0-P3.7任意引脚 sbit LED12 = PX.X;//宏定义灯亮灯灭 define LED1_ON( ) LED1 =0 //阳极接电源 define LED1_OFF( ) LED1
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定
include "reg51.h"unsigned char led[]={0xfe,0xfd,0xfb,0xf7}; //LED灯的花样数据 void delay(unsigned char time){ //延时函数 unsigned int j=15000;for(;time>0;time--)for(;j>0;j--);} void m
C51单片机编程,按键控制流水灯
当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循环,LED取反得到LED = 0,灯亮。*/ delay(500); /*此处延迟,保证连续两次按键
首先if(SW13==0)是判断此引脚是否为0 (按键按下)然后一个delay用于按键防抖动 没被注释的那部分是靠if在次判断是否为0按下按下后执行LED_ON函数使LED亮 然后通过while判断按键是否松开,如果松开的话就继续执行LED_O
你没有松手监测呀!就是在按键处理程序后要加一个while(k1!=0);就是只有你松开按键后才认为本次按键执行完毕,不然就会一直重复执行按键按下的程序,那么你的d1一直就会执行亮灭操作!
void main(void){ P1=oxff;//初始化P1 while(1){ LED=~K1;} }
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
单片机用c语言,按钮控制一个LED灯,要求按下松开,LED亮,按下松开,LED暗!循环
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。include
电平状态输出相应的信号来控制LED的亮灭。将按键与某个IO口相连。当按下按钮时,IO口会被拉低(变为低电平),未按下按钮时为高电平。在程序中通过循环检测IO口的状态,检测到低电平表示按钮被按下,可以执行相应操作。
1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,
int0中断 程序我先试试 include
if(!KEY1) //检测到按键按下 { LED = ~LED; /*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入
51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
方法1:用8050的三极管做开关电路,三极管的基极接P2.0,然后用集电极通过LED接5v电源,发射极通过220欧姆电阻接地。执行SETB P2.0 指令可以点亮led。方法2:用P1.0直接驱动led,应该让led另一端通过220欧姆电阻接5v
单片机(microcontroller)可以通过控制其硬件输出接口来控制LED灯的亮灭。在使用单片机控制LED之前,需要对单片机的硬件进行接线和配置。首先,将LED的正极接入单片机的硬件输出口,将LED的负极接入单片机的地。然后,使用单片机编程
1.LED的阳极接地,阴极接单片机IO口,那么IO口高电平,LED灭,低电平,LED亮 2.LED的阴极接地,阳极接单片机IO口,那么IO口高电平,LED亮,低电平,LED灭
LED_D1 =1;//=1亮灯 ,=0灭灯当也要看电路,完善的电路还会有驱动电路如三极管点了,也要看LED固定的那端是接地还是接VCC。最终无非就是通过单片机的IO口输出一个0或1来是LED二极管电路正向导通形成发光。
在上述代码中,我们首先将P1口设置为全灭状态,然后使用一个循环将P1口设置为全亮状态,并延时1秒钟。接着,我们将P1口设置为全灭状态,并再次延时1秒钟。这样,LED灯就会一亮一灭间隔1秒。需要注意的是,上述代码中的延
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
如何通过单片机控制LED灯亮灭?
case 0: led = 1; readkey(); break; //熄灭 case 1: delay(); readkey(); //慢速闪烁 case 2: delay(); readkey(); //中速闪烁 case 3: delay(); readkey(); led = ~led; //快速闪烁 } }
C语言实现LED灯闪烁控制配套51单片机开发板。include //包含单片机寄存器的头文件 /***函数功能:延时一段时间 / void delay(void) //两个void意思分别为无需返回值,没有参数传递。{ unsigned int i; //定义
led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,
同时开放了定时器中断,并将定时器中断优先级设置为1(即高优先级)。在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式
1、新建项目,如图所示。2、添加头文件,创建延迟函数。3、创建C主函数。4、添加死循环效果。5、点亮LED灯。P1=0x7e;二进制11111110。6、添加延迟效果。注意事项:很多公司都有51系列的兼容机型推出,今后很长的一段时间内
说明:单片机控制LED灯间隔时间闪烁 所用程序很简单,实际情况可作相应变化,也有多种方式实现。proteus电路图 所需元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极管 电阻 (tip:没有给高电
51单片机C程序实验LED灯:[1]单个灯闪烁
bit flash;//闪烁标志位 sbit led=P0^0; sbit P01=P0^1; sbit P02=P0^2; void main() { P01=P02=0; flash=0; led=0; while(1) { scankey(); ledflash(); } } void scankey()//键盘扫描 { P01=1;//行线给1 if(P02)//如果P02也是1则说明接通 { delay(10);//去抖动10MS if(P02)//再次确定按键按下 { while(P02){flash=flash}//按住按键的动作 flash=~flash;//按键按下后执行动作 } } } void ledflash() { if(flash) { led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0; } void delay(unsigned int i) {自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)这个很简单啊~~ 写一个嵌套判断~ if(key==0) { delay(100); //假设这是1s的延时,嵌套10个就是10秒的~~ if(key==0) { delay(100); if(key==0) { flag=1; //标志位改变 } } } if(flag==1) { led=1; //灯点亮 } if(key==1) { flag=0; //标志位还原 } if(flag==0) { led=0; //灯熄灭 }
while(1) { P1=aa; delayms(1000); aa=_crol_(aa,1); } 这前面的while(1)根本不会退出,也就是不会执行下面的if(key1 == 0)的语句了,所以按键按下去当然没有反应了 if(key1==0) { P1=0x7e;
while(1) { P1=aa; delayms(1000); aa=_crol_(aa,1); } 这前面的while(1)根本不会退出,也就是不会执行下面的if(key1 == 0)的语句了,所以按键按下去当然没有反应了 if(key1==0) { P1=0x7e;