① 用51单片机写程序,4个按键灯控制8个彩灯切换九种灯光效果
P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。
② 如何用单片机一个按钮开关控制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.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;
*/
}
}
}
}
//-----------------------------------------------
//上面程序中有很多地方可以优化,这里只是给出一个参考供学习。
③ 基于51单片机的led彩灯设计。 9个灯(红绿蓝三色)。按键控制 c语言程序
首先要查看电路的连接,看看输入连接到单片机的哪个引脚(比如p1.0),led灯连接到哪个引脚(比如p2.0)。然后看是高电平有效还是低电平有效(也就是高电平时led灯亮,还是低电平时led灯亮)。
如果是高电平灯亮的话,程序如下:
p2.0=p1.0;
④ 51单片机1按键切换4种不同状态的灯的c程序可以是正闪,反闪,多种间隔闪。
以下是一个简单的51单片机程序,通过按下按键可以实现4种不同状态的灯亮灭,包括正闪、反闪、多种间隔闪。程序中使用了定时器来实现闪烁功能。
程序中使用了P1.0到P1.3作为控制灯的引脚,P3.2作为按键的引脚。每当按下按键时,通过判断状态值悄拦悉来切换不同的灯亮灭模式衡首。定启乎时器中断函数用来实现灯的闪烁,可根据需求自行调整闪烁频率。
编程不易,忘采纳
⑤ 求解读51单片机用四个按键独立控制四个led的c程序
#include<reg51.h>
//k2~k4分别控制le1~le4
voiddelay(unsignedintx)//延时函数
{
while(x--);//延时数减一
}
voidkey_event(unsignedchard)//根据扫描到的键值,亮相应的LED
{
switch(d)
{
case14:P1^=(1<<0);break;//k1键按下了
case13:P1^=(1<<1);break;//k2键按下了
case11:P1^=(1<<2);break;//k3键按下了
case7:P1^=(1<<3);break;//k4键按下了
//
default:P1^=(1<<7);break;//缺省值,都不亮
}
}
voidkey()//按键扫描
{
staticchari;
unsignedchara;
unsignedcharb;
a=P2;//0000aaaa,000076543210;
a>>=4;//a=a>>4;//移动4位,a取值
if(a!=15)//至少有个键按下
{
if(i==0)//0的时候,标示没有建按下
{
delay(1000);//延时1000次
b=P2;//把按键的口赋给变量b
b>>=4;//移动四位,b取值
if(a==b)//如果a和b相等
{
key_event(b);//这次按键有效
i=1;//1不允许其它键按下
}
}
}
else
{
i=0;//不是有效键按下,清0
}
}
voidmain()//主函数开始
{
while(1)//进入循环,检测按键按下情况
{
key();
}
}