如何用单片机一个按钮开关控制3个灯3种效果。流水。闪烁。还有一直亮。用keil编程。

作者&投稿:云翰 (若有异议请与网页底部的电邮联系)
keil51单片机编程 一个控制灯闪烁的程序 麻烦帮忙看一下~

你的电路图画错了,发光二极管放反了,或者把+5V换成地

#include "reg51.h"
main()
{
unsigned int i,j;
while(1)
{
P1=0xfe; //点亮第一个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xfd; //点亮第二个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xfb; //点亮第三个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xf7; //点亮第四个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xef; //点亮第五个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xdf; //点亮第六个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xbf; //点亮第七个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0x7f; //点亮第八个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
}
}

或:
#include "reg51.h"
void delay(unsigned int t)
{
unsigned inti,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned char w,i;
while(1)
{
w=0xfe;
for (i=0;i<8;i++)
{
P1=w; //循环点亮LED
w<<=1; //点亮灯的位置移动,最低位补0
w=w|0x01; //将最低位置1
delay(500); //延时
}
}
}

或:
#include "reg51.h"
//程序中使用_crol_函数,所以要包含头文件"intrins.h"
#include "intrins.h"
void delay(unsigned int t)
{
unsigned int i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned char temp;
temp=0xfe;
while(1)
{
P1=temp;
delay(500); //延时
temp=_crol_(temp,1); //点亮LED的位置循环左移一位
}
}

下面是用C51编写的简单程序:
#include <reg51.h>
#include <intrins.h>
sbit io_Key = P1 ^ 1;
sbit led1 = P1 ^ 2;
sbit led2 = P1 ^ 3;
sbit led3 = P1 ^ 4;
unsigned char ucCount = 0;
bit flag05s = 0;
//---------------------------------
void delay125us(void) //@12.000MHz
{
unsigned char i;
i = 60;
while (--i);
}

void Timer0Init(void) //10毫秒@12MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xF0; //设置定时初值
TH0 = 0xD8; //设置定时初值
TR0 = 1; //开定时器0
ET0 = 1; //开定时器0中断
EA = 1; //开总中断
}
//T0中断用来计数器溢出
void zd0(void) interrupt 1
{
TL0 = 0xF0; //设置定时初值
TH0 = 0xD8; //设置定时初值
if(++ucCount >= 50)
{
ucCount = 0;
flag05s = 1; //g_flag05s = isYes定时0.52秒到,用于测量周期延时
}

}

void main(void)
{
unsigned char CountTemp = 0, ucState = 0;
Timer0Init();

while(1)
{
//-------------------------------
//简单的按键检测程序:
io_Key = 1;
_nop_();
if( io_Key == 0 )
{
CountTemp = 0;
do
{
delay125us();
if( io_Key != 0 ) break;
} while(++CountTemp > 160); // 延时20ms去抖动

if(CountTemp > 160)//如果按键时间有效,改变状态
{
switch(ucState)
{
case(0):
{
ucState = 1;

led1 = 0;
led2 = 0;
led3 = 0;
}
break;
case(1):
{
ucState = 2;
led1 = 0;
led2 = 0;
led3 = 0;
}
break;
case(2):
{
ucState = 0;
led1 = 0;
led2 = 1;
led3 = 1;
}
break;

}
while(io_Key == 0); //等待按键释放
}

}
//------------------------------
//每0.5秒改变一下LED状态
if(flag05s == 1)
{
flag05s = 0;
switch(ucState)
{
case(0):
{
led1 = !led1;
led2 = !led2;
led3 = !led3;
}
break;
case(1):
{
bit ledTemp = led1;
led1 = led2;
led2 = led3;
led3 = ledTemp;
}
break;
//LED常亮可以忽略改变LED状态
/*
case(2):
{
led1 = 0;
led2 = 0;
led3 = 0;
}
break;
*/

}

}

}

}
//-----------------------------------------------
//上面程序中有很多地方可以优化,这里只是给出一个参考供学习。


单片机控制以4位一体的数码管(共阴),设置一个按键,开机数码管显示“12...
2.依次点亮四个数码管:千位点亮3毫秒后关闭,紧接着点亮百位3毫秒,再是分别点亮十位和各位(3毫秒只是习惯参数,也可以2毫秒过意4毫秒,太长会出现数码管闪烁的情况)3.四位数码管依次点亮后,检测按钮,如果无信号,再次循环点亮四位数码管;4.如果检测按钮有信号,设定标志位,并且关闭数码管1秒钟...

单片机如何接收按钮信号,比如我按下开关,线路接通,单片机如何知道...
如图:两种方法,一个地点平触发(开关在下),一个高电平触发(开关在上)。如果连接的是普通的IO口,则采用轮询方式,就是程序要不停地判断端口是否有变化。如果连接的中断脚的话,单片机内部需要对触发类型做设置,开关在下的设置为低电平触发,开关在上的设置为高电平触发,这样不用你在程序里面不...

单片机一个按键控制3个led灯,多种状态
include <reg51.h> sbit key =P1^1;sbit led1=P1^2;sbit led2=P1^3;sbit led3=P1^4;bit key_flag;bit flag_500ms;void InitTimer0(void){ TMOD |= 0x01;TH0 = 0x3C;TL0 = 0x0B0;EA = 1;ET0 = 1;TR0 = 1;} unsigned char stat;void main(void){ InitTimer0();key_...

单片机 一个按钮设置按一下加1 另一个按键按一下减1 求帮忙编写程序
uchar data showIndex,indexTmp;uchar data W[8];void delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);\/\/能使之延时接近1毫秒就成 无需精确}void main(){ K1state = 0xFF; K2state = 0xFF; num = 0; while(1) { delay(1);\/...

c51单片机如何使用一个按钮就能实现数码管从0~9的循环并且还能实现数 ...
从你的仿真图中没有看到P1.0接什么,看程序也看不出来那个 t 是怎么能控制数码管循环显示和暂停的,都不能实现哪,只能是不停的循环显示,根本停不下来。数码管的段码表只有11个数,可数组却声明了70个元素,smg[70] ,这是根据什么确定的70,应该是smg[11] 就行。按理,一个按键是不可能...

单片机通过按钮控制一个LED小灯的亮灭,请问这个程序怎么写
led应该是一个变量,是代表led灯 亮或者灭的一个变量。 当你按下开关后,s1==0,就执行 led=!led 这条语句。 led=!led 的意思就是取反的意思,即原来led灯亮的话 执行该条语句后就变成灭;原来灭的话 执行该条语句后 就变成亮。按键按下就打控制灯的io取反就可以了。如:if(key1==1){...

一个按钮,按一下就会控制单片机发出一个命令给电脑,这个命令和空格键的...
串口实现,程序如下:KEY BIT P3.2 ;假设P3.2为按钮输入,键按下为低 ORG 0000H LJMP START ORG 0050H START:CLR EA MOV SP,#6FH MOV TMOD,#20H MOV SCON,#80H MOV TH1,#0FDH ;BRD=9600 MOV TL1,#0FDH SETB TR1 SETB KEY LOOP:JB KEY,LOOP ;等键按下 MOV SBUF,...

跪求单片机高手 我想加多3个按钮,一个按钮控制一个数码管, 例如第一...
dis[]这个里面的前三个位元就是你现在显示的0,1,2 dis[0]---就是第一个数码管的显示数据 dis[1]---就是第二个数码管的显示数据 dis[2]---就是第三个数码管的显示数据 所以,想在第一个数据管显示1就跟dis[0]=1; 显示2就dis[1]=2;写个按键对应程序就可以了 ...

单片机button是什么
单片机button是按键开关。buttonn对话框中的一种图形元素。当激活它时,能执行指定的功能。用户可以采用以下方法来激活按钮,用鼠标在其上单击,或者当按钮获得聚焦时按下Return或Enter键。鼠标上的一个活动片,用于激活一些功能。旧式的鼠标模型只有一个按钮,新式一般有两个或更多个按钮。单片机功能 单片机...

单片机控制led彩灯,想要设计一个按下按钮,彩灯暂停的程序,应该如何设计...
可以用外部中断来控制;如果单片机中断是低有效,将按钮设置成按下时为低电平,触发中断,在中断中设置一个标志位,然后退出中断;主程序来判断这个标志位,如果为1,则退出led跑灯程序; 如果为0,则继续跑灯。如果单片机中断是高有效,将按钮设置成按下时为高电平,同理。 设置一个全局变量a,并且...

洞头县15878427861: 单片机一个按键控制3个led灯,多种状态 -
柴响赖脯: #include <reg51.h>sbit key =P1^1; sbit led1=P1^2; sbit led2=P1^3; sbit led3=P1^4; bit key_flag; bit flag_500ms;void InitTimer0(void) {TMOD |= 0x01;TH0 = 0x3C;TL0 = 0x0B0;EA = 1;ET0 = 1;TR0 = 1; } unsigned char stat; void main(void) ...

洞头县15878427861: 单片机 按钮控制3只led灯 -
柴响赖脯: 先从简单的走起 按一次,进位一次; 循环1-3灯亮. 之后再你那个10秒,就容易些了...

洞头县15878427861: 如何用单片机一个按钮开关控制3个灯3种效果.流水.闪烁.还有一直亮.用keil编程. -
柴响赖脯: 下面是用C51编写的简单程序:#include <reg51.h>#include <intrins.h> sbit io_Key = P1 ^ 1; sbit led1 = P1 ^ 2; sbit led2 = P1 ^ 3; sbit led3 = P1 ^ 4; unsigned char ucCount = 0; bit flag05s = 0;//--------------------------------- void delay125us(void) //@12....

洞头县15878427861: 单片机C语言,一个按键控制三个流水灯 -
柴响赖脯: 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; ...

洞头县15878427861: 单片机中怎样定义一个按键控制转换三个模式 -
柴响赖脯: 参考如下: 假设按键按下为低电平; if(key1==0) { while(key1==0);//弹起后执行 { 按键1需要执行的功能; } } if(key2==0) { while(key2==0);//弹起后执行 { 按键2需要执行的功能; } }

洞头县15878427861: 用AT89C51单片机做一个仿真,P0输入P1输出 要求有三个按键 分别控制三个灯的亮和灭. -
柴响赖脯: #include sbit Key1=P0^0; sbit Key2=P0^1; sbit Key3=P0^2;//按键一脚接地,另一脚接IO且接10K电阻到电源.sbit Led1=P1^0; sbit Led2=P1^1; sbit Led3=P1^2;//LED阳极接电源,阴极接300欧姆到IO.//输入输出端口变化,需更改上面定义的端口号.main() { while(1) { Led1=Key1; Led2=Key2; Led3=Key3; } } 这样就好了.

洞头县15878427861: c51单片机独立按键控制三种流水灯 -
柴响赖脯: #include#include #define uchar unsigned char uchar keyval,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;i<120;i++); } main() { led=0xfe; led1=0x55; while(1) { ...

洞头县15878427861: 单片机怎么用一个按钮控制多种花样流水灯,只要一按就马上执行下一种花样. -
柴响赖脯: 你用中断就可马上执行.还有你如是用的扫描程序编的好也可马上执行的.这你自己 再想想吧.只要查到有键按下,就把那花样寄存器中加一,再用间转指令立即跳到不同的花样号的入口处.

洞头县15878427861: 单片机用一个按键随意切换控制三种状态,1、半小时后关灯;2、1小时后关灯;3、1小时后关灯,再1小时开灯 -
柴响赖脯: 可以按一下按键,切换一种状态,也可以用短按,长按和双击来区分3种状态.

洞头县15878427861: 用c语言编程三个按键对应点亮三个LED灯的程序,AT89S52单片机,最好有原理图,谢谢.急求 -
柴响赖脯: 这个也求?用按键点亮LED灯这个是51入门最基础的东西,真心想学的话,买块51的开发板,都带有例程,很快就可以入门的.建议你还是多看看资料把基础的东西学好.推荐你看一下《十天学会单片机和C语言编程》的视频教程对入门还是不...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网