① 大佬們,單片機匯編語言編寫流水燈,全部八次閃爍,怎麼編啊
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順序點亮的效果。
通過上述程序,可以實現單片機控制流水燈的功能,通過調整程序中的參數,可以實現不同的流水燈效果。這不僅能夠鍛煉編程能力,還能深入了解單片機的工作原理和定時器的應用。
在實際應用中,還可以結合其他外設和功能模塊,進一步拓展流水燈的應用場景,如通過按鍵控制流水燈的閃爍速度,或者通過串口接收指令控制流水燈的顯示效果等。
需要注意的是,在編寫和調試程序時,要仔細檢查每一行代碼,確保定時初值和循環移位次數的准確性,以實現預期的流水燈效果。同時,還需注意程序的運行效率和資源佔用情況,以滿足實際應用的需求。
② 單片機原理流水燈實驗報告
單片機原理流水燈實驗報告:
本實驗的目的是通過使用單片機,來實現流水燈的功能。實驗中,使用了AT89C51單片機,通過設置定時器,實現了不同的流水燈燈序,並使用外部中斷按鍵,來控制流水燈的開關。實驗的結果表明,單片機通過定時器和外部中斷按鍵,可以實現流水燈的功能。
拓展:本實驗的
拓展可以包括,使用其他單片機,如STC89C52、STM8S103等,來實現流水燈的功能;另外,可以在實驗中增加按鍵,實現不同的燈序變化;可以添加LCD顯示屏,顯示當前燈序;還可以通過設置定時器,實現時間控制,實現定時開啟和關閉流水燈。
③ 關於單片機流水燈的問題
12MHz為時鍾周期,如果不分頻,定時器周期也為12MHz,51單片機為12分頻。
以下計算均為不分頻。
Fc = 12MHz, Time = 1s ,計數次數為12_000_000,如果有16bit定時器,計數上限65535,不可以滿足,因此要配合軟體計數。12000000 = 60_000 X 200.
硬體連接為:
發光二極體的壓降為1~3V,
額定電流:20mA
如果用單片機IO口直接驅動,假設輸出電壓為5V,壓降1.2V,那麼分壓電阻R = (5-1.2)/0.02 =240(ohm),當然了一般可以用1K的電阻。有時候單片機驅動能力不足,要上拉電阻,這個阻值要根據單片機倒灌電流的閾值計算,一般阻值1~10K
④ 單片機c語言編了個流水燈,用按鍵怎麼實現它暫停。
實現流水燈的方式有很多種(中斷,定時器,延時等等),看用哪種方式,最簡單的是延時做流水燈,那麼在死循環裡面增加按鍵檢測,判斷出有按鍵按下來時,再進入死循環,程序不往下走就可以暫停,再按跌出死循團拍世環。
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
uint Flag1=0; 按鍵標志位
uint Flag2=0;
while(1)
{
Flag1 = keyscan();
if(Flag1==1)(Flag2=~Flag2); //如果一旦檢測到一次按鍵掃描就把標志位2 打開;再次就關閉;
if(Flag2==1)// 如果標志位打開就開始流水燈
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
}
(4)單片機定時流水中斷系統流水燈擴展閱讀:
單片機編程就是硬體賀瞎是單片機,基於單片機進行的程序開發,在有周圍外設支持的情況下,用軟體來控制的部分通過單片機編程來實現。單片機能識別的語言是硬體語言即匯編,因此編程就是圍繞匯編來實現,有直接用匯編程序來編寫的,但是較難調試的編寫,特別是一上規模就更不易實現,因此常用塌肢高級語言來寫然後通過編譯器轉化成匯編。