⑴ 大佬們,單片機匯編語言編寫流水燈,全部八次閃爍,怎麼編啊
51單片機通過匯編語言編寫流水燈程序,即控制多個LED,使其在特定時間間隔內,只有一個LED發光,其他熄滅,通過這種方式順序移動點亮LED的位置,形成流水燈效果。程序如下:
;
假設晶振12MHZ,P1控制8個LED低電平亮
啟動入口========================
ORG 0000H
AJMP START
;
定義變數========================
YSJS EQU 30H;延時計數器
LED EQU 31H;LED控制緩沖器
;
主程序==========================
START: MOV LED,#0FEH ;初始化數據
MOV YSJS,#0 ;
MOV TMOD,#10H ;定時器1工作於方式1,16位定時器
MOV TL1,#0B0H ;設置定時初值
MOV TH1,#3CH ;定時時間=50mS
SETB ET1 ;使能定時器1中斷
SETB TR1 ;啟動定時器1
SETB EA ;開總中斷
MOV P1,LED ;初始化流水燈
LOOP: JMP LOOP ;循環等待中斷
;
T1INT: PUSH PSW ;定時器1中斷程序
PUSH ACC ;保護現場
MOV TH1,#3CH ;定時時間=50mS
MOV TL1,#0B0H ;
INC YSJS ;
PUSH ACC ;保護ACC
MOV A,YSJI ;
CJNE A,#2,QT1 ;50mS*2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循環左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢復現場
POP PSW ;返回主程序
RETI ;
END ;匯編程序結束
該程序通過定時器1控制LED的閃爍頻率,並利用循環移位的方式,實現LED在P1口上的順序點亮效果。通過修改定時初值和循環移位次數,可以控制流水燈的閃爍速度和LED數量。
在主程序中,首先初始化LED的狀態和延時計數器,然後設置定時器1的工作方式和初值,開啟定時器1中斷和總中斷。在T1INT中斷服務程序中,通過定時器1的溢出次數,控制LED的閃爍頻率和順序。每次中斷時,累加器A的值左移一位,實現LED順序點亮的效果。
通過上述程序,可以實現單片機控制流水燈的功能,通過調整程序中的參數,可以實現不同的流水燈效果。這不僅能夠鍛煉編程能力,還能深入了解單片機的工作原理和定時器的應用。
在實際應用中,還可以結合其他外設和功能模塊,進一步拓展流水燈的應用場景,如通過按鍵控制流水燈的閃爍速度,或者通過串口接收指令控制流水燈的顯示效果等。
需要注意的是,在編寫和調試程序時,要仔細檢查每一行代碼,確保定時初值和循環移位次數的准確性,以實現預期的流水燈效果。同時,還需注意程序的運行效率和資源佔用情況,以滿足實際應用的需求。
⑵ 單片機 8個LED燈隨機閃爍怎麼做
1、首先在電腦中新建項目:Keil uVision4 51單片機LED閃爍編程,如下圖所示。
⑶ 單片機考試,亮燈:8個燈依次按學號後八位閃爍,每位數字是什麼就閃爍多少次,如為0則不亮。循環。
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
uchart;
ucharcodenum[]={9,1,2,0,2,1,2,1};
ucharcodeledp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//預定的寫入P0的值
uchara=0,b=0;
voiddelay(uintz)
{
uintx,y;
for(x=0;x<z;x++)
for(y=0;y<255;y++);
}
voidmain(void)
{
ucharj=0,k;
while(1)
{
for(k=0;k<num[j];k++)//取數組num[]的數字,也就是燈閃幾下的數字
{
P0=ledp[j]; //向p0口送值,也就是那個燈亮
delay(200);
P0=0xff; //將燈全滅
delay(200);
}
j++;//j加一,也就是在while循環中,for語句中j改變,
if(j==8)
{j=0;}
}
}
⑷ 8個LED指示燈循環閃爍的程序(單片機)
1:設置一個變數i,它可以從0循環到3
2:檢測一個已取消緩沖的鍵。按「+1」
3:當I值為每個值時,執行相應的模式。
水量燈參考程序
#include
#include
#定義uchar無符號字元
Ucharj,溫度;
無效延遲(無符號整型ms)
{
Uchart;
(女士)
對於(t = 0;T < 123;T + +);
}
Voidmain()
{
P1=0XFF;
延遲(500);
Temp=0xfe;//奇怪,led連接在P2.3~P2.6
對於(j = 0;J < 4;J + +)
{
P1=temp;
延遲(500);
Temp=_crol_(Temp,1);
}
P1=0XFF;
(1);
}
(4)單片機八燈閃爍擴展閱讀:
注意事項:
#include「reg52。這個文件為單片機定義了一些特殊的功能寄存器
Typedef無符號int在16以下;//以聲明的方式定義數據類型
無符號charu8;
//LED燈
Sbitleda=P0;
Sbitled1=P0^0;
Sbitled2=P0^1;
Sbitled3=P0^2;
Sbitled4=P0^3;
Sbitled5=P0^4;
Sbitled6=P0^5;
Sbitled7=P0^6;
Sbitled8=P0^7;
無效延遲(16歲以下)
{
,(我);
}
Voidmain()
{
而(1)
{
勒達=1;//所有的燈都亮著
//從左到右熄滅
Led1=0;
延遲(50000);//延遲時間約為450毫秒
Led2=0;
延遲(50000);//延遲時間約為450毫秒
Led3=0;
延遲(50000);//延遲時間約為450毫秒
Led4=0;
延遲(50000);//延遲時間約為450毫秒
Led5=0;
延遲(50000);//延遲時間約為450毫秒
Led6=0;
延遲(50000);//延遲時間約為450毫秒
Led7=0;
延遲(50000);//延遲時間約為450毫秒
Led8=0;
延遲(100000);//延遲大約900毫秒
//從右到左照明
Led8=1;
延遲(50000);//延遲時間約為450毫秒
Led7=1;
延遲(50000);//延遲時間約為450毫秒
Led6=1;
延遲(50000);//延遲時間約為450毫秒
Led5=1;
延遲(50000);//延遲時間約為450毫秒
Led4=1;
延遲(50000);//延遲時間約為450毫秒
Led3=1;
延遲(50000);//延遲時間約為450毫秒
Led2=1;
延遲(50000);//延遲時間約為450毫秒
Led1=1;
延遲(50000);//延遲時間約為450毫秒
勒達=1;//所有的燈都亮著
}
}