❶ 用單片機製作的心形燈 我需要16盞燈的 程序還有電路圖 還有其他的都要
自己仿照一下就可以了,用P1、P2、P3都可以
#include//51系列單片機定義文件
#defineucharunsignedchar//定義無符號字元
#defineuintunsignedint//定義無符號整數
voiddelay(uint);//聲明延時函數
voidmain(void)
{
uinti;
uchartemp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++)//8個流水燈逐個閃動
{
P0=~temp;
delay(100);//調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++)//8個流水燈反向逐個閃動
{
P0=~temp;
delay(100);//調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++)//8個流水燈依次全部點亮
{
P0=temp;
delay(100);//調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++)//8個流水燈依次反向全部點亮
{
P0=temp;
delay(100);//調用延時函數
temp>>=1;
}
}
}
voiddelay(uintt)//定義延時函數
{
registeruintbt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
❷ 如何用匯編語言控制led燈閃爍
用AT89C2051單片機(可以換成任意的51單片機)模擬,控制一個LED燈閃爍,LED燈接在P1.7腳上。程序如下
LED1 BIT P1.7
MAIN:CPL LED1
ACALL DELAY
SJMP MAIN
DELAY:MOV R7,#0;延時子程序
MOV R6,#0
LOP:DJNZ R6,$
DJNZ R7,LOP
RET
模擬圖如下
❸ 基於51單片機16個彩燈從左到右再從右左循環閃爍的匯編程序
在進行單片機控制彩燈的循環閃爍程序設計時,我們可以使用51單片機來實現。假設連接彩燈的埠為P1和P2,其中P1.0到P1.7代表從左到右依次點亮的7個燈,P1.7代表最右邊的燈。P2.0到P2.7則代表從右到左依次點亮的7個燈,P2.7代表最左邊的燈。整個程序設計的目標是讓彩燈從左到右依次點亮,然後從右到左依次熄滅,再重復此過程。
為了實現這一功能,我們需要編寫一段匯編程序。首先,我們定義一個循環,讓P1.0到P1.7依次點亮,然後P1.7熄滅,P1.6點亮,以此類推,直到P1.0熄滅。此時,我們再讓P2.7到P2.0依次點亮,然後P2.0熄滅,P2.1點亮,以此類推,直到P2.7熄滅。這樣,彩燈就會按照從左到右再從右到左的順序循環閃爍。
具體的匯編代碼如下:
1. 初始化埠P1和P2,設置為輸出模式。
2. 設置一個計數器變數,用於記錄當前點亮的燈的位置。
3. 使用一個循環,點亮當前計數器位置的燈,然後將計數器加1,直到計數器超過最大值。
4. 當計數器超過最大值後,重新設置計數器為初始值,並開始點亮P2埠的燈,直到P2埠的燈全部點亮,然後重新點亮P1埠的燈。
5. 重復上述步驟,實現彩燈的循環閃爍。
通過上述程序設計,我們可以實現51單片機控制彩燈從左到右再從右到左的循環閃爍功能。這一過程需要根據具體的硬體配置和單片機型號進行適當調整。
❹ 單片機 8個LED燈隨機閃爍怎麼做
1、首先在電腦中新建項目:Keil uVision4 51單片機LED閃爍編程,如下圖所示。
❺ 如何用單片機製作交通燈
LED模擬交通燈
本例中的12隻LED分成東西向和南北向兩組,各組指示燈均有相向的2隻紅色、2隻黃色與2隻綠色的LED,本例中對應的LED單獨進行定義,程序運行時模擬了十字路口交通信號燈得切換過程與顯示效果。
本例電路如下圖:
(呵呵 圖片插入不進來)
程序設計調試與實訓:
源程序中用6行sbit對東西和南北向的紅、黃、綠指示燈分別進行定義,這樣便於對它們進行單獨控制。
本例交通指示燈切換時間設置的較短,這樣可在調試的時候較快觀察到運行效果,可在調試運行本例後修改代碼,使指示燈切換過程更接近於實際的交通指示燈切換過程。
源程序代碼:
//----------------------------------------------------------------
// 名稱:LED模擬交通燈
//----------------------------------------------------------------
// 說明:東西向綠燈亮若干秒後,黃燈閃爍5次後亮紅燈,紅燈亮後,
// 南北向由紅燈變為綠燈,若干秒後,南北向黃燈閃爍,
// 閃爍5次後亮紅燈,東西向綠燈亮,如此重復。
//
//-----------------------------------------------------------------
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P0^0; //東西向指示燈
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
sbit RED_B=P0^3; //南北向指示燈
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;
uchar Flash_Count = 0;
Operation_Type = 1; //閃爍次數及操作類型變數
//--------------------------------------------------------
//延時
//--------------------------------------------------------
void DelayMS(uint x)
{
uchar t;
while(x--)
{
for(t=120;t>0;t--);
}
}
//---------------------------------------------------------
//交通燈交換子程序
//---------------------------------------------------------
void Traffic_lignt()
{
switch(Operation_Type)
{
case 1: //東西向綠燈與南北向紅燈亮
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
DelayMS(2000); // 延時
Operation_Type = 2; //下一操作
break;
case 2: //東西向黃燈開始閃爍,綠燈關閉
DelayMS(300); //延時
YELLOW_A=!YELLOW_A; //閃爍5次
if(++Flash_Count !=10)
return;
Flash_Count=0;
Operation_Type = 3; //下一操作
break;
case 3: //東西向紅燈與南北向綠燈亮
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
DelayMS(2000); //延時
Operation_Type = 4; //下一操作
break;
case 4: //南北向黃燈開始閃爍
DelayMS(300); //延時
YELLOW_B=!YELLOW_B;
if(++Flash_Count !=10)
return; //閃爍5次
Flash_Count=0;
Operation_Type = 1; //回到第一種操作
break;
}
}
//----------------------------------------------------------
//主程序
//----------------------------------------------------------
void main()
{
while(1)
{
Traffic_lignt();
}
}