導航:首頁 > 操作系統 > 舞燈單片機程序

舞燈單片機程序

發布時間:2022-10-10 08:20:50

❶ 求單片機彩燈循環控製程序

ORG0000H

AJMPMAIN

ORG0100H

MAIN:JBP2.0,m1

JBP2.1,m2

JBP2.2,m3

JBP2.3,m4

JBP2.4,m5

JBP2.5,m6

JBP2.6,m7

JBP2.7,m8

SJMPMAIN

m1:MOVR1,#02H;四亮四閃

LOOP:MOVP1,#00H

XRLA,#0AAH

MOVP1,A

CALLDELAY

DJNZR1,LOOP

SJMPMAIN

m2:MOVR1,#08H;向右閃爍

MOVA,#0FEH

LOOP1:MOVP1,A

CALLDELAY

RLA

DJNZR1,LOOP1

SJMPMAIN

m3:MOVR1,#02H;整體閃爍

LOOP2:MOVP1,#00H

CALLDELAY

MOVP1,#0FFH

CALLDELAY

DJNZR1,LOOP2

SJMPMAIN

m4:MOVR1,#08H;奇數向右閃爍

MOVA,#0AAH

LOOP3:MOVP1,A

RRA

CALLDELAY

DJNZR1,LOOP3

SJMPMAIN

m5:MOVR1,#08H;兩邊中間

LOOP4:MOVP1,#3CH

CALLDELAY

MOVP1,#0C3H

CALLDELAY

;MOVP1,#7EH

;CALLDELAY

;MOVP1,#0BDH

;CALLDELAY

;MOVP1,#0DBH

;CALLDELAY

;MOVP1,#0E7H

;CALLDELAY

DJNZR1,LOOP4

SJMPMAIN

m6:MOVR1,#04H

LOOP5:MOVP1,#0F0H;亮一半滅一半

CALLDELAY

MOVP1,#0FH

CALLDELAY

DJNZR1,LOOP5

JMPMAIN

m7:MOVR1,#02H;中間往兩邊滅

LOOP6:MOVP1,#00H

CALLDELAY

MOVP1,#18H

CALLDELAY

MOVP1,#3CH

CALLDELAY

MOVP1,#7EH

CALLDELAY

MOVP1,#0FFH

CALLDELAY

DJNZR1,LOOP6

LJMPMAIN

m8:MOVR1,#01H;雙燈循環

LOOP7:MOVP1,#3FH

CALLDELAY

MOVP1,#0FCH

CALLDELAY

MOVP1,#0CFH

CALLDELAY

MOVP1,#0F3H

CALLDELAY

DJNZR1,LOOP7

JMPMAIN

DELAY:MOVR5,#10

DEL1:MOVR7,#200

DEL:MOVR6,#123

NOP

NOP

DJNZR6,$

DJNZR7,DEL

DJNZR5,DEL1

RET

就是沒有數碼管顯示!一共八種模式!

❷ 100分跪求 舞台燈C語言程序

//舞台燈
//P1口輸出高電平導通
//P3.2口控制開關
//P3.3口控制模式

#include<reg51.h>
#define uchar unsigned char

bit key1=0; //開關標志
bit key2=1; //模式標志

void START()interrupt 0 using 0
{
key1=~key1; //開關控制
}
void CHANGE()interrupt 2 using 2
{
key2=~key2; //改變點亮模式
}

void delay(uchar time)
{
uchar i;
while(time--)
for(i=0;i<250;i++);
}

void main()
{
uchar led_l=0x10;
uchar led_r=0x08;
uchar led;

IE=0x85;
TCON=0x05;

while(1)
{
while(key1) //檢查是否按下START鍵
{
led=led_l+led_r;
P1=led; //輸出燈亮碼

if(key2) //檢查是否按下CHANGE鍵
{
led_l=led_l<<1;led_r=led_r>>1; //默認狀態下未按CHANGE時從中向兩邊點亮
if(led_l==0x00){led_l=0x10;led_r=0x08;}
}
else
{
led_l=led_l>>1;led_r=led_r<<1; //按下CHANGE時
if(led_l==0x08){led_l=0x80;led_r=0x01;}

}
delay(200); //延時
}
P1=0x00;
}
}

❸ 單片機彩燈循環控製程序

ORG 0000H
LJMP MAIN
ORG 4000H
MAIN: MOV A,#0F8H ;用P1低六位控制燈
MOV P1,A
CALL DELAY
CLR A ;取反
MOV P1,A ;點亮下三個,滅上三個
CALL DELAY
LJMP MAIN
DELAY: .......
自己添上吧,很簡單
.......
END

❹ 用C語言編寫一個單片機控制LED燈閃爍三次的程序,急求!

# P1上接LED等。
#include "reg51.h"

void delayms(unsigned int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=0;j<120;j++);
}

void main(void)
{
char i;
for(i=0;i<6;i++)

{
P1 = ~P1;
delayms(1000);
}
while(1);

}

❺ 8051單片機舞台燈光程序

給你基於DMX512協議的調光燈程序,做做參考吧。 #include <AT892051.H>
#define uchar unsigned char
//**********************************************************
//定義全局變數給中斷程序使用。
//**********************************************************
uchar t0_mark=0x00, data1=0x00, data2=0x00, data3=0x00,data4=0x00,data5, data6, data7;
uchar da1=0x80, da2=0x80, da3=0x80,da4=0xff,mark=0x00,add=0x00;
unsigned int time;
//*******************************************************
//捕捉「開始」函數 如果捕捉成功 則啟動串口 DMX512協議部分。。。。加註
//*******************************************************
void start_bit(void)
{ uchar a;
TR0=1;
while (P3_0==1); // 等待傳輸暫停
TR0=0;
TH0=0x00;
TL0=0x00;
TR0=1;
while (P3_0==0); //等待埠變化
if(TL0>0x80||TH0>0x00) //大於96微秒
{ REN=1;
time=0x00;
while(RI==0);
data1=SBUF;
if (mark==0x00)
{ for( a=add; a!=0x00; a--)
{while(RI==0);<br> RI=0; } //啟動串口
while(RI==0);
data5=SBUF;
RI=0;
while(RI==0);
data6=SBUF;
RI=0;
while(RI==0);
data7=SBUF;
RI=0;
REN=0;
if(data1==0x00)
{ data2=(data5&0xfc)>>2;
data3=(data6&0xfc)>>2;
data4=(data7&0xfc)>>2; }
}
else { for( a=0xff; a!=0x00; a--)
{
while(RI==0);
RI=0; } //啟動串口
for( a=add; a!=0x00; a--)
{while(RI==0);<br> RI=0; } //啟動串口
while(RI==0);
data5=SBUF;
RI=0;
while(RI==0);
data6=SBUF;
RI=0;
while(RI==0);
data7=SBUF;
RI=0;
REN=0;
if(data1==0x00)
{ data2=(data5&0xfc)>>2;
data3=(data6&0xfc)>>2;
data4=(data7&0xfc)>>2; }
}
P1=0xff;
if(P3_5==0)
{ mark=0x00;
add=P1; }
else { mark=0xff;
add=P1; } }
} void main(void)
{
P3=0x00;
P3_0=1;
P3_1=1;
P3_5=1;
P1=0xff;
if(P3_5==0)
{ mark=0x00;
add=P1; }
else { mark=0xff;
add=P1; }
SCON=0x88;
ACC=PCON;
ACC=ACC+0x80;
PCON=ACC; //串口方式2
TMOD=0x21; // 定時器0方式1 定時器1方式8
TH1=0x80; //60個周期中斷一次
TL0=0x80;
TR1=1;
IE=0x8a; //允許允許T0中斷
do {
do {
start_bit();
}
while(REN==0); }
while(1) ;
}

//****************************************
//定時器T0 16bit
//****************************************
void t0_irq(void) interrupt 1
{ t0_mark++;
time++;
if (time>0x500)
{ time=0x00;
data2=0x00;
data3=0x00;
data4=0x00; }
}
//***************************************
//定時器T1 方式2 自動重裝, PWM 200Hz
//***************************************
void t1_irq(void) interrupt 3
{ if(da1==0x00)
{P3_2=0; }
else {da1--;<br> P3_2=1; }
if(da2==0x00)
{P3_3=0; }
else {da2--;<br> P3_3=1;}
if(da3==0x00)
{P3_4=0; }
else {da3--;<br> P3_4=1;}
if(da4==0x00)
{ da1=data2;
da2=data3;
da3=data4;
da4=0x40; }
da4--;
}

❻ 80c51單片機 彩燈控制器程序

你的要求也太高了吧,還是請一個軟體工程師給你做啦。我們在網上回答也沒有報酬,現在設計個軟體也是要很多錢的。
我有個萬能跑馬燈程序,有10種閃燈樣式,其實你只用把燈的擺放順序打亂也可獲得想要的發光樣式。
#include <REG52.H>

unsigned char RunMode;
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}

unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0~7
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};

void Display(unsigned char Value)
{
P3 = LEDDisplayCode[Value];
}

void LEDFlash(unsigned char Count)
{
unsigned char i;
bit Flag;
for(i = 0; i<Count;i++)
{
Flag = !Flag;
if(Flag)
Display(RunMode);
else
Display(0x10);
Delay1ms(100);
}
Display(RunMode);
}

unsigned char GetKey(void)
{
unsigned char KeyTemp,CheckValue,Key = 0x00;
CheckValue = P2&0x32;
if(CheckValue==0x32)
return 0x00;

Delay1ms(10);
KeyTemp = P2&0x32;
if(KeyTemp==CheckValue)
return 0x00;

if(!(CheckValue&0x02))
Key|=0x01;
if(!(CheckValue&0x10))
Key|=0x02;
if(!(CheckValue&0x20))
Key|=0x04;
return Key;
}

unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;
void InitialTimer2(void)
{
T2CON = 0x00; //16 Bit Auto-Reload Mode
TH2 = RCAP2H = 0xFC; //重裝值,初始值 TL2 = RCAP2L = 0x18;
ET2=1; //定時器 2 中斷允許
TR2 = 1; //定時器 2 啟動
EA=1;
}

unsigned int code SpeedCode[]={ 1, 2, 3, 5, 8, 10, 14, 17, 20, 30,
40, 50, 60, 70, 80, 90, 100, 120, 140, 160,
180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30
void SetSpeed(unsigned char Speed)
{
SystemSpeed =SpeedCode[Speed];
}

void LEDShow(unsigned int LEDStatus)
{
P1 = ~(LEDStatus&0x00FF);
P0 = ~((LEDStatus>>8)&0x00FF);
}

void InitialCPU(void)
{
RunMode = 0x00;
TimerCount = 0;
SystemSpeedIndex = 10;

P1 = 0x00;
P0 = 0x00;
P2 = 0xFF;
P3 = 0x00;
Delay1ms(500);
P1 = 0xFF;
P0 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
SetSpeed(SystemSpeedIndex);
Display(RunMode);
}

//Mode 0
unsigned int LEDIndex = 0;
bit LEDDirection = 1,LEDFlag = 1;
void Mode_0(void)
{
LEDShow(0x0001<<LEDIndex);
LEDIndex = (LEDIndex+1)%16;
}
//Mode 1
void Mode_1(void)
{
LEDShow(0x8000>>LEDIndex);
LEDIndex = (LEDIndex+1)%16;
}
//Mode 2
void Mode_2(void)
{
if(LEDDirection)
LEDShow(0x0001<<LEDIndex);
else
LEDShow(0x8000>>LEDIndex);
if(LEDIndex==15)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%16;
}
//Mode 3
void Mode_3(void)
{
if(LEDDirection)
LEDShow(~(0x0001<<LEDIndex));
else
LEDShow(~(0x8000>>LEDIndex));
if(LEDIndex==15)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%16;
}

//Mode 4
void Mode_4(void)
{
if(LEDDirection)
{
if(LEDFlag)
LEDShow(0xFFFE<<LEDIndex);
else
LEDShow(~(0x7FFF>>LEDIndex));
}
else
{
if(LEDFlag)
LEDShow(0x7FFF>>LEDIndex);
else
LEDShow(~(0xFFFE<<LEDIndex));
}
if(LEDIndex==15)
{
LEDDirection = !LEDDirection;
if(LEDDirection) LEDFlag = !LEDFlag;
}
LEDIndex = (LEDIndex+1)%16;
}

//Mode 5
void Mode_5(void)
{
if(LEDDirection)
LEDShow(0x000F<<LEDIndex);
else
LEDShow(0xF000>>LEDIndex);
if(LEDIndex==15)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%16;
}

//Mode 6
void Mode_6(void)
{
if(LEDDirection)
LEDShow(~(0x000F<<LEDIndex));
else
LEDShow(~(0xF000>>LEDIndex));
if(LEDIndex==15)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%16;
}

//Mode 7
void Mode_7(void)
{
if(LEDDirection)
LEDShow(0x003F<<LEDIndex);
else
LEDShow(0xFC00>>LEDIndex);
if(LEDIndex==9)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%10;
}

//Mode 8
void Mode_8(void)
{
LEDShow(++LEDIndex);
}

void TimerEventRun(void)
{
if(RunMode==0x00)
{
Mode_0();
}
else if(RunMode ==0x01)
{
Mode_1();
}
else if(RunMode ==0x02)
{
Mode_2();
}
else if(RunMode ==0x03)
{
Mode_3();
}
else if(RunMode ==0x04)
{
Mode_4();
}
else if(RunMode ==0x05)
{
Mode_5();
}
else if(RunMode ==0x06)
{
Mode_6();
}
else if(RunMode ==0x07)
{
Mode_7();
}
else if(RunMode ==0x08)
{
Mode_8();
}
}

void Timer2(void) interrupt 5 using 3
{
TF2 = 0; //中斷標志清除( Timer2 必須軟體清標志!)
if(++TimerCount>=SystemSpeed)
{
TimerCount = 0;
TimerEventRun();
}
}
unsigned char MusicIndex = 0;
void KeyDispose(unsigned char Key)
{
if(Key&0x01)
{
LEDDirection = 1;
LEDIndex = 0;
LEDFlag = 1;
RunMode = (RunMode+1)%9;
Display(RunMode);
}
if(Key&0x02)
{
if(SystemSpeedIndex>0)
{
--SystemSpeedIndex;
SetSpeed(SystemSpeedIndex);
}
else
{
LEDFlash(6);
}
}
if(Key&0x04)
{
if(SystemSpeedIndex<28)
{
++SystemSpeedIndex;
SetSpeed(SystemSpeedIndex);
}
else
{
LEDFlash(6);
}
}
}
main()
{
unsigned char Key;
InitialCPU();
InitialTimer2();

while(1)
{
Key = GetKey();
if(Key!=0x00)
{
KeyDispose(Key);
}
}
}

❼ 單片機閃爍小燈程序怎麼寫

#include<reg52.h>
#defineuintunsignedint
sbitD0=P0^0;
main()
{
while(1)
{
inti,j;
D0=0;
for(i=0;i<100;i++)
for(j=0;j<670;j++);
D0=1;
for(i=0;i<100;i++)
for(j=0;j<670;j++);
}

}

上面是基於51系列單片機寫的,D0是小燈的IO 口,在While循環中控制高低電平(寫0或1)就能實現小燈閃爍。

❽ 單片機控制led彩燈,想要設計一個按下按鈕,彩燈暫停的程序,應該如何設計,匯編語言,請哪位大俠幫幫我

可以用外部中斷來控制;如果單片機中斷是低有效,將按鈕設置成按下時為低電平,觸發中斷,在中斷中設置一個標志位,然後退出中斷;主程序來判斷這個標志位,如果為1,則退出led跑燈程序; 如果為0,則繼續跑燈。如果單片機中斷是高有效,將按鈕設置成按下時為高電平,同理。 設置一個全局變數a,並且賦值a=0,一旦有按鈕按下,則進入中斷,並且a賦值為1,即a=1;在主程序中判斷a的值,如果為0,則執行跑燈;若為1,則停止。

❾ 一個花樣流水燈單片機程序(要求1,3,5,7燈亮,2,4,6,8燈亮然後全滅)

先把P1口全部接低電平。

ORG 0000H。
AJMP START。
ORG 0040H。
AA:MOV P1,#55H。


ACALL DELAY。
MOV P1,#0AAH。
ACALL DELAY。
MOV P1,#00H。


ACALL DELAY。
AJMP AA。

DELAY:MOV R5,#256。
LOOP2:MOV R4,#256。
LOOP1:NOP。
NOP。


DJNZ R4,LOOP1。
DJNZ R5,LOOP2。
RET。

單片機(Single-Chip Microcomputer)是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統。

在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。

單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。相當於一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。概括的講:一塊晶元就成了一台計算機。

它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。

單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統、家用電器等。

❿ 51單片機流水燈程序

程序如下:

#include <reg52.h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3;

sbit led5 = P2^4;

sbit led6 = P2^5;

sbit led7 = P2^6;

sbit led8 = P2^7;


void main()

{

int i,j;

//點亮第一個燈

led1 = 1;

led2 = 0;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//延時1秒

for(i = 0;i < 110; ++i)

{

for(j = 0; j < 1000; ++j)

{

;//什麼也不做

}

}

//點亮第二個燈

led1 = 0;

led2 = 1;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//點亮剩餘的燈

//省略……

while(1);

}

(10)舞燈單片機程序擴展閱讀:

流水燈幾點說明:

void:因為該延時函數不需要返回值,所以寫為void

delay1s:該函數的函數名,命名需要符合C語言的標識符命名規則。

(): 不需要傳入參數,所以括弧中為空

至此我們可以把流水燈程序寫為以下形式:

閱讀全文

與舞燈單片機程序相關的資料

熱點內容
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:446
程序員出軌電視劇 瀏覽:88
伺服器系統地址怎麼查 瀏覽:54
解壓游戲發行官 瀏覽:601
國外小伙解壓實驗 瀏覽:336
頂級大學開設加密貨幣 瀏覽:437
java重載與多態 瀏覽:528
騰訊應屆程序員 瀏覽:942
一鍵編譯程序 瀏覽:129
語音加密包哪個好 瀏覽:339
有什麼學習高中語文的app 瀏覽:282
安卓手機的表格里怎麼打勾 瀏覽:409
阿里雲伺服器有網路安全服務嗎 瀏覽:968
超解壓兔子視頻 瀏覽:24
單片機怎麼測負脈沖 瀏覽:174
魅族備份的app在哪裡 瀏覽:740
java倒三角列印 瀏覽:115
通達信回封板主圖源碼 瀏覽:46
戰地什麼伺服器 瀏覽:301
安卓為什麼老是閃退怎麼辦 瀏覽:805