⑴ 单片机如何一个按钮实现控制4个led灯的循环闪烁
0 0
1 1
1 0
0 1
是这样的四种状态吗? 这样很简单的,, 主要还是检测按键, 按键按下 你把一个变量+1, 比如
if(Key == 0)
{
delay(); //延时10ms,延时函数 自己写吧
if(Key == 0)
{
num++;
if(num >= 4)
num = 0;
while(!Key);
}
}
然后根据num 的值 对Led进行状态刷新就好了。
switch(num)
{
case 0: Led1 = 1; Led2 = 0; break;
case 1: Led1 = 0; Led2 = 1; break;
case 2: Led1 = 0; Led2 = 0; break;
case 3: Led1 = 1; Led2 = 1; break;
default : break;
}
就可以了,,,顺序的话 可以按照具体要求更换下位置就可以了。
⑵ 51单片机按键控制按下K1四个led灯循环亮,再按一下全灭,c程序怎么写
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。
#include<reg51.h>
#include<intrins.h>
仿真图效果。
⑶ 51单片机:0faa为啥能控制四个灯啊
应该是0xaa吧,根据二进制码,0xaa=10101010,一般高电平的时候二极管亮,有四个高电平所以四个灯亮,具体要根据电路分析,希望可以帮到你
⑷ 急需单片机高手帮忙用C语言写一个单片机4个灯轮流闪亮的源程序。 详细内容看补充。
/*对于个单片机的初学者,我希望用最直观的方式来达到你要的要求,程序每一句我已经写好备注,希望对你有帮助*/
#include<reg51.h> //使用51功能头文件
sbit L1=P0^0; //L1对应P0.0,表示第一盏灯
sbit L2=P0^1; //L1对应P0.1,表示第二盏灯
sbit L3=P0^2; //L1对应P0.2,表示第三盏灯
sbit L4=P0^3; //L1对应P0.3,表示第四盏灯
void delay(unsigned int i) //延迟子程序,注意这里的unsigned int i,这里相当于限定了调用时候变量的类型
{
unsigned char j; //局部变量定义
while(i--) //循环i次,主程序main调用时候,i为100,这数值你可随便该,但小于65355
for(j = 200; j > 0; j--) ; //这步的意思是空操作200次,也就是暂用CPU200次的工作时间
}
void main(void) //主函数,这里的viod是无类型,意思是没有给这函数指定数据类型
{
P0=0x00; //将P0口初始化位高电平,如果没有这句,初始化为低电平,这里可根据需要选择
L1=1; //第一盏灯亮
delay(100); //调用延时子程序
L2=1; //第二盏灯亮
delay(100); //调用延时子程序
L3=1; //第三盏灯亮
delay(100); //调用延时子程序
L4=1; //第四盏灯亮
delay(100); //调用延时子程序
while(1); //这里我用了个死循环,目的程序只运行一次,如果需要自动重新运行,可以把这句删掉
}
纯手工书写,并仿真调试过,记得加分哟~
⑸ 谁知道用单片机如何点下K1、K2、K3、K4来控制四盏灯 要求点下时不亮松手才亮。 要求用SWITCH语句。急用!
main()
{
unsigned char i;
P1 &= 0xC3;//所有的灯亮
while()
{
while(P3&0x3C==0x3C);//同时检测4个按键
i = P3 & 0x3C;//有按键按下,读取键值
delay();//按键去抖延时10 - 50ms,自己定
if(P3 & 0x3C == i)//按键确认
{
switch(i)
{
case 0x38:P1^0 = 1;while(!P3^2);P1^0 = 0;break;//按键K1按下灯灭,等待按键松开D1亮
case 0x34:P1^1 = 1;while(!P3^3);P1^1 = 0;break;//k2
case 0x2C:P1^2 = 1;while(!P3^4);P1^2 = 0;break;//K3
case 0x1C:P1^3 = 1;while(!P3^5);P1^3 = 0;//K4
}
}
}
}
⑹ 单片机编程当k1按下时四个灯亮,松开则四个灯不亮
单片机io扫描按键电平,控制四个灯的io电平高低变化即可
⑺ 51单片机四灯闪烁c程序
#include<reg51.h>
sfr p2=0xa0;
sfr p1=0x90;
sbit p1_0=0x90;
sbit p1_1=0x91;
int kk[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; DELAY();
int a,b;
int main()
{
if(p1_0==0)
{
while(1)
{
b=1;
for(a=0;a<10;a++)
{p2=kk[a];
DELAY();
}
if(p1_1==0)
{b=0; break;}
if(p1_1==0)
{
while(1)
{b=0;
for(a=9;a>=0;a--)
{p2=kk[a];
DELAY();
} } }
if(p1_0==0)
{b=1;break;}
}
}
}
DELAY()
{
unsigned char i,j,p;
for(i=10;i>0;i--)
for(j=100;j>0;j--)
{if(p1_1==0)
{b=0;a=10;break;}
if(p1_0==0)
{b=1;a=-1;break;}
for(p=200;p>0;p--)
;
}
}
你看这样对么。
⑻ 单片机编程怎么让四个灯,每个灯延迟0.3秒亮的编程
当然可以了,加入延时函数即可实现,或者使用定时器实现。
⑼ 单片机编程题:开关控制四盏灯
昨天就看到有人问了,不会还是你吧,呵呵,你要说清楚啊,想怎么控制,一起亮,一起灭?一个按键开,一个按键关?说具体点,要不怎么帮你
呵呵,今天晚上上线晚了,明天上班抽时间给你写吧,一会儿就搞定了,要不要留个邮箱啊,电路图也给你吧
还有,一定要按这个顺序吗?如果我乱按会出现什么情况,直接无效??
算了,直接贴上来吧
#include"reg52.h"
#defineuintunsignedint
#defineucharunsignedchar
sbitLED_R=P2^0;
sbitLED_Y=P2^1;
sbitLED_B=P2^2;
sbitLED_G=P2^3;
sbitKey1=P1^0;
sbitKey2=P1^1;
ucharKey1_Times=0,Key2_Times=0,Key_Flag=0;
voidDelay(uintx)
{
uinta,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
voidKeyScan()
{
if(Key1==0)
{
Delay(10);
if(Key1==0)
{
Key_Flag=1;
Key1_Times++;
if(Key1_Times==3)
Key1_Times=2;
}
while(!Key1);
}
if(Key2==0)
{
Delay(10);
if(Key2==0)
{
Key_Flag=1;
Key2_Times++;
if(Key2_Times==3)
Key2_Times=2;
}
while(!Key2);
}
}
voidmain()
{
P2=0xff;
LED_R=0;
while(1)
{
KeyScan();
if(Key_Flag==1)
{
Key_Flag=0;
if((Key1_Times==1)&&(Key2_Times==0))
{
LED_R=1;
LED_Y=0;
}
elseif((Key1_Times==1)&&(Key2_Times==1))
{
LED_R=1;
LED_Y=1;
LED_B=0;
}
elseif((Key1_Times==1)&&(Key2_Times==2))
{
Key2_Times--;
}
elseif((Key1_Times==2)&&(Key2_Times==0))
{
Key1_Times--;
}
elseif((Key1_Times==2)&&(Key2_Times==1))
{
LED_R=1;
LED_Y=1;
LED_B=1;
LED_G=0;
}
elseif((Key1_Times==2)&&(Key2_Times==2))
{
LED_Y=1;
LED_B=1;
LED_G=1;
LED_R=0;
Key1_Times=0;
Key2_Times=0;
}
}
}
}
⑽ 内容是 用单片机控制四个灯,按照一定规律闪亮,闪亮方式能够通过按键控制转换, 这是c语言
template<classT>
voidSelectSort(Ta[],intlen)
{
Ttemp;
intnIndex=0;
//每次循环只进行一次交换最多进行len-1次循环,因此总体上,比冒泡进行交换的次数少
for(inti=0;i<len-1;i++)
{
//第i次排序时,已经进行了i次大循环,因此已经排好了i个元素
//已排好序的元素0,,...,i-2,i-1
//待排元素为i,i+1,...,len-1
nIndex=i;
for(intj=i+1;j<len;j++)
{
if(a[j]<a[nIndex])
{
nIndex=j;
}
}
//交换
if(nIndex!=i)
{
temp=a[i];
a[i]=a[nIndex];
a[nIndex]=temp;
}
}
}