1. c51單片機中如何用匯編語言編寫流水燈
51單片機用匯編語言編寫流水燈程序,就是控制多個LED
,使其在特定時間間隔內,只有一個LED
發光,其他熄滅,用這種方式順序移動點亮LED的位置,就形成了流水燈的效果。以下是程序:
;假設晶振12MHZ,P1控制8個LED低電平亮
;啟動入口========================
ORG
0000H
;復位啟動
AJMP
START
;
ORG
001BH
;T1中斷
AJMP
T1INT
;
;定義變數========================
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
;匯編程序結束
2. 單片機流水燈程序
程序如下:
#include <reg52.h>
sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3。
讓電子信息技術與單片機技術相融合,有效提高了單片機應用效果。作為計算機技術中的一個分支,單片機技術在電子產品領域的應用,豐富了電子產品的功能,也為智能化電子設備的開發和應用提供了新的出路,實現了智能化電子設備的創新與發展。
從二十世紀九十年代開始,單片機技術就已經發展起來,隨著時代的進步與科技的發展,目前該技術的實踐應用日漸成熟,單片機被廣泛應用於各個領域。現如今,人們越來越重視單片機在智能電子技術方面的開發和應用,單片機的發展進入到新的時期。
無論是自動測量還是智能儀表的實踐,都能看到單片機技術的身影。當前工業發展進程中,電子行業屬於新興產業,工業生產中人們將電子信息技術成功運用。
3. 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)
單片機流水燈C語言程序的源代碼如下:
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8個流水燈反向逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8個流水燈依次全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8個流水燈依次反向全部點亮
{
P1=temp;
delay(100); //調用延時函數
temp>>=1;
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(3)單片機流水燈程序匯編程序擴展閱讀
51單片機流水燈的源代碼如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
4. 8路流水燈匯編語言程序的寫法
匯編語言程序如下:
;假設1:D1~D8八個彩燈接在P1口,輸出低電平發光
;假設2:系統晶振為12MHz
;假設3:N = 5
;程序如下:
ORG 0000H
MOV R3, #5 ;N=5
LOOP0:
MOV A, #0FFH
MOV P1, #0FFH ;開始時全滅
;-------------------------------逐個點亮
MOV R2, #8
LOOP1: CLR C
RLC A
MOV P1, A
CALL DL500MS
DJNZ R2, LOOP1
;-------------------------------逐個熄滅
MOV R2, #8
LOOP2: SETB C
RLC A
MOV P1, A
CALL DL500MS
DJNZ R2, LOOP2
;-------------------------------全亮、全滅交替
MOV R2, #4
LOOP3: MOV P1, #0 ;全亮
CALL DL500MS
CALL DL500MS ;共1s
MOV P1, #255 ;全滅
CALL DL500MS ;0.5s
DJNZ R2, LOOP3
;-------------------------------
DJNZ R3, LOOP0
MOV P1, #01001001B ;5、顯示為0100 1001
CALL DL500MS
CALL DL500MS ;共1s
SJMP 0000H ;重新開始N遍
;-------------------------------延時子程序
DL500MS:
MOV R5, #9 ;1T
DL1: MOV R6, #128 ;1T
DL2: MOV R7, #215 ;1T
NOP ;1T
DL3: DJNZ R7, DL3 ;2T 2 * 215 = 430 T
DJNZ R6, DL2 ;2T [1+1+430+2] * 128 = 55552 T
DJNZ R5, DL1 ;2T [1+55552+2] * 9 = 499995 T
RET ;2T 1 + 499995 + 2 = 499998 T
;-------------------------------------
流水燈模塊接在單片機的P1口,由原理圖可以知道,在P1口給一個低電平即可點亮LED燈。相反,如果要LED燈熄滅,就要把P1口的電平變為高電平即可。
要實現流水燈功能,只要將LED1~LED8依次點亮、熄滅,依始類推,8隻LED變會一亮一暗的做流水燈了。
實現8個LED流水燈程序用中文表示為:
P1.0低、延時、P1.0高、P1.1低、延時、P1.1高、P1.2低、延時、P1.2高、P1.3低、延時、P1.3高。
P1.4低、延時、P1.4高、P1.5低、延時、P1.5高、P1.6低、延時、P1.6高、P1.7低、延時、P1.7高、返回到開始、程序結束。
5. 51單片機中如何用匯編語言編寫流水燈
流水燈就是51單片機控制led燈依次點亮的控制方式。具體程序如下:
ORG 0000H ;復位啟動
AJMP START ;
ORG 001BH ;T1中斷
AJMP T1INT ;
;定義變數========================
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 ;匯編程序結束
(5)單片機流水燈程序匯編程序擴展閱讀:
實現流水燈的三個方法:
第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。
第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。
第三種,庫函數實現流水燈。利用左移函數進行。
6. 單片機流水燈匯編程序是怎樣的
ORG 000H
LJMP MAIN
ORG 000BH;定時器0中斷入口
LJMP LOOP1
ORG 0100H
MAIN:
MOV TMOD,#01H;設置定時器工作模式
MOV TL0,#0EFH;設置定時器初值
MOV TH0,#0D8H
SETB EA;打開總中斷
SETB ET0;打開定時器0中斷
SETB TR0;啟動定時器0
MOV P0,#0FFH
MOV R0,#200;延時參數
LOOP:
CJNE R0,#0,LOOP;延時
MOV A,#0EFH
NEXT:
MOV P0,A ;送值
MOV R0,#50 ;延時參數
EXIT:
CJNE R0,#00H,EXIT ;延時一會兒
RL A ;A循環左移【根據程序分許,該程序完成流水燈功能】
LJMP NEXT
LOOP1:;定時器0中斷函數
MOV TL0,#0EFH;定時器初值
MOV TH0,#0D8H ;定時器初值
DEC R0 ;
RETI ;中斷返回
END
有疑問可以追問。
7. 求一個51單片機的流水燈(從1-8的...)的匯編程序
哈哈,很簡單,
ORG 00H
MAIN:MOV P3,#00H
SETB P3.2
CALL DELY
CLR P3.2
SETB P3.3
CALL DELY
CLR P3.3
SETB P3.4
CALL DELY
.........按照上面省略,你自己補全。
AJMP MAIN
DELY:延時省略。
END
這種方法比較麻煩。但容易理解,你可以用循環左移,或者查表比較簡潔
8. 急!急!急!單片機流水燈匯編語言程序
5隻LED為共陽極連接,即單片機輸出端為低電平時即可點亮LED。
;用最直接的方式實現流水燈
ORG 0000H
START:MOV P1,#01111111B ;最下面的LED點亮
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
MOV P1,#10111111B ;最下面第二個的LED點亮
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
MOV P1,#11011111B ;最下面第三個的LED點亮 (以下省略)
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11101111B
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11110111B
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11111011B
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;完成第一次循環點亮,延時約0.25秒
AJMP START ;反復循環
;延時子程序,12M晶振延時約250毫秒
DELAY: ;大約值:2us*256*256*2=260ms,也可以認為為250ms
PUSH PSW ;現場保護指令(有時可以不加)
MOV R4,#240
L3: MOV R2 ,#00H
L1: MOV R3 ,#00H
L2: DJNZ R3 ,L2 ;最內層循環:(256次)2個周期指令(R3減一,如果比1大,則轉向L2)
DJNZ R2 ,L1 ; 中層循環:256次
DJNZ R4 ,L3 ;外層循環:240次
POP PSW
RET
END
隨便改了一個
9. 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);
}
流水燈幾點說明:
void:因為該延時函數不需要返回值,所以寫為void
delay1s:該函數的函數名,命名需要符合C語言的標識符命名規則。
(): 不需要傳入參數,所以括弧中為空
至此我們可以把流水燈程序寫為以下形式: