導航:首頁 > 操作系統 > 單片機循環彩燈

單片機循環彩燈

發布時間:2022-03-12 08:21:26

1. 用AT89C51單片機做循環彩燈實驗

我用的是每50msT1溢出中斷一次#include<reg52.h>#include<intrins.h>#define LedPort P1#define uchar unsigned char#define uint unsigned intsbit led=P1^0;uchar temp1=0xfe,temp2=0xbf;uchar flag,timeNum;void Init(){ TMOD=0x01; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET1=1; TR1=1;}void main(){ Init(); while(1) { }}void timer1() interrupt 3{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; timeNum++; if(timeNum==10) { timeNum=0; if(flag<8) { LedPort=temp1; temp1=_crol_(temp1,1); } else if(flag>=8&&flag<15) { LedPort=temp2; temp2=_cror_(temp2,1); } else if(flag==15) { LedPort=0; } else if(flag==16) { LedPort=0xff; } flag++; if(flag==17) flag=0; }}

2. 這是個單片機控制循環彩燈程序,哪位高手具體解釋下這個程序,實現的彩燈花樣有哪幾種

DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH DB 0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH DB 0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H 這個是彩燈循環花樣 其中把十六進制數換成二進制的 是一的位彩燈就亮。比如第一個01H換成二進制就是00000001,所以是第一個燈亮,依此可推出彩燈循環花樣

3. 51單片機循環彩燈12個彩燈依次亮

跑馬燈IC 或直接成品的單片。

4. 基於51單片機的循環彩燈控制設計

老兄,東西不復雜的,自己思考,別碰到1+1的問題也要來問。要給你畫流程,沒人有那麼多時間的,

硬體:51用p1口接電阻驅動三級管,用三極體驅動二極體動作。
軟體:網上很多現成的資料,自己去整理。
;************;
;小燈控製程序;
;************;
;
;************;
;中斷入口程序;
;************;
;
ORG 0000H ;程序執行開始地址
LJMP START ;跳至START執行
ORG 0003H ;外中斷0中斷入口地址
RETI ;中斷返回(不開中斷)
ORG 000BH ;定時器T0中斷入口地址
RETI ;中斷返回(不開中斷)
ORG 0013H ;外中斷1中斷入口地址
RETI ;中斷返回(不開中斷)
ORG 001BH ;定時器T1中斷入口地址
RETI ;中斷返回(不開中斷)
ORG 0023H ;串列口中斷入口地址
RETI ;中斷返回(不開中斷)
;
;************;
; 初始化程序 ;
;************;
;
CLEAR: MOV 20H,#00H ;20H單元內存清0(閃爍標志清0)
SETB 00H ;20H.0位置1(上電時自動執行閃爍功能1)
RET ;子程序返回
;
;************;
; 主 程 序 ;
;************;
;
START:ACALL CLEAR ;調用初始化子程序
MAIN: LCALL KEYWORK ;調用鍵掃描子程序
JB 00H,FUN0 ;20H.0位為1時執行FUN0
JB 01H,FUN1 ;20H.1位為1時執行FUN1
JB 02H,FUN2 ;20H.2位為1時執行FUN2
JB 03H,MAIN ;備用
AJMP MAIN ;返回主程序MAIN
;
;************;
; 功能程序 ;
;************;
;第1種閃爍功能程序
FUN0: MOV A,#0FEH ;累加器賦初值
FUN00:MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延時
JNB ACC.7,MAIN ;累加器最高位為0時轉MAIN
RL A ;累加器A中數據循環左移1位
AJMP FUN00 ;轉FUN00循環
;
;第2種閃爍功能程序
FUN1:MOV A,#0FEH ;累加器賦初值
FUN11:MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延時
JZ MAIN ;A為0轉MAIN
RL A ;累加器A中數據循環左移1位
ANL A,P1 ;A同P1口值相與
AJMP FUN11 ;轉FUN11循環
;
; 第3種閃爍功能程序
FUN2:MOV A,#0AAH ;累加器賦初值
MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延時
CPL A ;A中各位取反
MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延時
AJMP MAIN ;轉MAIN
;************;
; 掃鍵程序 ;
;************;
;
KEYWORK:MOV P3,#0FFH ;置P3口為輸入狀態
JNB P3.0,KEY0 ;讀P3.0口,若為0轉KEY0
JNB P3.1,KEY1 ;讀P3.1口,若為0轉KEY1
JNB P3.2,KEY2 ;讀P3.2口,若為0轉KEY2
JNB P3.3,KEY3 ;讀P3.3口,若為0轉KEY3
RET ;子程序返回
;
;閃爍功能0鍵處理程序
KEY0:LCALL DL10MS ;延時10毫秒消抖
JB P3.0,OUT0 ;P3.0為1,子程序返回(干擾)
SETB 00H ;20H.0位置1(執行閃爍功能1標志)
CLR 01H ;20H.1位清0
CLR 02H ;20H.2位清0
CLR 03H ;20H.3位清0
OUT0:RET ;子程序返回
;
; 閃爍功能1鍵處理程序
KEY1:LCALL DL10MS
JB P3.1,OUT1
SETB 01H ;20H.1位置1(執行閃爍功能2標志)
CLR 00H
CLR 02H
CLR 03H
OUT1:RET
;
;閃爍功能2鍵處理程序
KEY2:LCALL DL10MS
JB P3.2,OUT2
SETB 02H ;20H.2位置1(執行閃爍功能3標志)
CLR 01H
CLR 00H
CLR 03H
OUT2:RET
;
;閃爍功能(備用)鍵處理程序
KEY3:LCALL DL10MS
JB P3.3,OUT3
SETB 03H ;20H.3位置1(執行備用閃爍功能標志)
CLR 01H
CLR 02H
CLR 00H
OUT3:RET
;
;************;
; 延時程序 ;
;************;
;0.5毫秒延時子程序,執行一次時間為513微秒
DL512:MOV R2,#0FFH
LOOP1: DJNZ R2,LOOP1
RET
;
;10毫秒延時子程序(調用20次0.5毫秒延時子程序)
DL10MS:MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
;
;延時子程序,改變R4寄存器初值可改變閃爍的快慢(時間為15×25毫秒)
DL05S:MOV R4,#0FH
LOOP3: LCALL DL25MS
DJNZ R4,LOOP3
RET
;
;25毫秒延時子程序,用調用掃鍵子程序延時,可快速讀出功能按鍵值
DL25MS:MOV R5,#0FFH
LOOP4:LCALL KEYWORK
DJNZ R5,LOOP4
RET
END ;程序結束

5. 單片機彩燈循環控製程序(匯編程序)

既然有人答過C語言的,我就寫個匯編的吧。
有點長,放在我的網路空間了:
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/5adeb99112822680a877a415.html

6. 單片機彩燈循環控製程序

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

7. 8051單片機,用P0口控制8個LED實現循環彩燈。

跑馬燈。網上一大把。
我就解釋下間隔一秒的那個,時間常數。
看你用的定時器方式。一般用方式1。若頻率是24mhz,機器周期為0.5us。所以計數次數為1s/0.5us=200000次超過了范圍。所以用循環。可以50000循環4次或其他次數。算出技術初值。

8. 單片機程序設計 循環彩燈

我用的是每50msT1溢出中斷一次
#include<reg52.h>
#include<intrins.h>
#define LedPort P1
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
uchar temp1=0xfe,temp2=0xbf;
uchar flag,timeNum;
void Init()
{
TMOD=0x01;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
}
void main()
{
Init();
while(1)
{
}
}
void timer1() interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
timeNum++;
if(timeNum==10)
{
timeNum=0;
if(flag<8)
{
LedPort=temp1;
temp1=_crol_(temp1,1);
}
else if(flag>=8&&flag<15)
{
LedPort=temp2;
temp2=_cror_(temp2,1);
}
else if(flag==15)
{
LedPort=0;
}
else if(flag==16)
{
LedPort=0xff;
}
flag++;
if(flag==17)
flag=0;
}
}也可以用編碼表的方式,把燈亮滅的情況放在數組里,中斷里再用

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

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

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

10. 求用單片機製作的循環彩燈原理圖及程序

不用154這么麻煩吧,直接把16個燈分別串1K電阻 從P1+P2口就接到行了
#include"reg52.h"

void delay(unsigned int m)
{
unsigned int j=0;
while(m--)for(j=0;j<125;j++){;}
}

void mian(void)
{
while(1)
{
P1=0x01;delay(500);
P1=0x02; delay(500);
P1=0x04; delay(500);
P1=0x08; delay(500);
P1=0x10; delay(500);
P1=0x20; delay(500);
P1=0x40; delay(500);
P1=0x80; delay(500);

P1=0x00;

P2=0x01;delay(500);
P2=0x02; delay(500);
P2=0x04; delay(500);
P2=0x08; delay(500);
P2=0x10; delay(500);
P2=0x20; delay(500);
P2=0x40; delay(500);
P2=0x80; delay(500);

P2=0x00;

}
}

閱讀全文

與單片機循環彩燈相關的資料

熱點內容
centos解壓縮zip 瀏覽:387
我的世界怎麼用命令風塊取消指令 瀏覽:1000
安卓軟體請求超時怎麼辦 瀏覽:476
androidapp調用另一個app 瀏覽:621
數控銑床法蘭克子程序編程 瀏覽:173
linux打包命令targz 瀏覽:996
抖音app是哪個 瀏覽:407
蘋果app怎麼上架 瀏覽:255
NA伺服器地址 瀏覽:427
我的世界如何初始化伺服器 瀏覽:97
哪個手機app天氣預報最准 瀏覽:752
怎樣把視頻壓縮至25m 瀏覽:570
vivox27文件夾怎麼改變 瀏覽:727
新手玩狼人殺用什麼app 瀏覽:615
pdf在線查看 瀏覽:954
安卓tv90如何關閉後台 瀏覽:683
php讀取word亂碼 瀏覽:755
minicom源碼 瀏覽:1001
海爾冷櫃壓縮機 瀏覽:417
聯通伺服器如何調試信號 瀏覽:136