① 用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();
}
}