導航:首頁 > 操作系統 > 單片機流水燈匯編語言

單片機流水燈匯編語言

發布時間:2022-09-03 11:18:58

單片機流水燈的解釋(匯編語言)

程序很簡單的,只不過程序編的確實不那麼規范,還有些啰嗦,有中斷那個程序更是有很多畫蛇添足的意思,既然用來中斷,按鍵來控制流水,還加什麼延時,多此一舉。給你梳理一下:

ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVA,#01H
LOOP:
MOVP2,A
LCALLDELAY
RLA
SJMPLOOP
DELAY:
MOVR2,#250
DLY:
MOVR3,#250
DJNZR3,$
DJNZR2,DLY
RET
END

㈡ 匯編語言 51單片機,外部中斷控制流水燈

ORG 0000H ; 試試這個 流水燈的編碼隨便改

LJMP MAIN

ORG 0003H

LJMP LINT0

ORG 000BH

LJMP LT0ZD

ORG 0030H

MAIN: MOV SP, #60H

MOV TMOD, #00H

MOV IE, #81H

MOV TL0, #(8192-2500)MOD 32

MOV TH0, #(8192-2500)/32

SETB TR0

MOV R5, #20

LOOP: MOV R3, #48

CJNE R3, #0, $

LJMP LOOP


LINT0: CPL ET0

RETI


LT0ZD: PUSH PSW ; T0 中斷

PUSH ACC

MOV TL0, #(8192-2500)MOD 32

MOV TH0, #(8192-2500)/32

DJNZ R5, LT0Z2

MOV R5, #30 ; 可以調整速度

MOV A, R3

LCALL LSDIN

MOV P1, A

DEC R3

LT0Z2: POP ACC

POP PSW

RETI


LSDIN: MOVC A,@A+PC

RET


LSDBM: DB 11111110B,11111101B,11111011B,11110111B ; 流水燈的編碼1

DB 11101111B,11011111B,10111111B,01111111B

DB 01111111B,10111111B,11011111B,11101111B

DB 11110111B,11111011B,11111101B,11111110B

DB 11111100B,11111001B,11110011B,11100111B ; 流水燈的編碼2

DB 11001111B,10011111B,00111111B,01111110B

DB 01111110B,00111111B,10011111B,11001111B

DB 11100111B,11110011B,11111001B,11111100B

DB 11111000B,11110001B,11100011B,11000111B ; 流水燈的編碼3

DB 10001111B,00011111B,00111110B,01111100B

DB 01111100B,00111110B,00011111B,10001111B

DB 11000111B,11100011B,11110001B,11111000B

END

㈢ 單片機流水燈用匯編語言寫怎麼從兩邊向中間亮再從中間

編程序如下:
; 花樣流水燈(8個發光二極體以各種形式循環點亮)
; 功能:流水燈(8個發光二極體循環以1S間隔以各種形式循環點亮)
ORG 0000H ;偽指令,指定程序從0000H開始存放
LJMP MAIN ;跳轉指令,程序跳轉至MAIN處執行
ORG 0030H ;偽指令,指定程序從0030H開始存放
MAIN: MOV SP, #60H ;給堆棧指針賦初值
MOV P1,#0FFH ;給P1口賦值
MOV DPTR,#TABLE;查表
LIGHT: MOV R4,#42 ;設置循環次數
LOOP: MOV A,#42 ;給A賦初值
SUBB A,R4 ;將A的值與R4的值相減,結果存在A中
MOVC A,@A+DPTR ;將A+DPTR的值所對應的TABLE中的值賦給A
MOV P1,A ;將A的值賦給P1口
LCALL DEL1S ;調用1S延時子程序
DJNZ R4,LOOP ;判斷R4是否為0,不為0跳轉,為0順序執行
LJMP LIGHT ;跳轉指令,跳轉至LIGHT處繼續執行
;1S延時子程序(11.0592MHz晶振,誤差0微秒)
DEL1S: MOV R5, #089H
DL1S0: MOV R6, #0A4H
DL1S1: MOV R7, #013H
DJNZ R7, $
DJNZ R6, DL1S1
DJNZ R5, DL1S0
RET
TABLE: ;定義表格數據
DB 0FFH ;全滅
DB 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 07FH ;依次逐個點亮
DB 0FEH 0FCH 0F8H 0F0H 0E0H 0C0H 080H 000H ;依次逐個疊加
DB 080H 0C0H 0E0H 0F0H 0F8H 0FCH 0FEH 0FFH ;依次逐個遞減
DB 07EH 0BDH 0DBH 0E7H 0E7H 0DBH 0BDH 07EH ;兩邊靠攏後分開
DB 07EH 03CH 018H 000H 000H 018H 03CH 07EH ;兩邊疊加後遞減
DB 000H ;全亮
END ;程序結束指令
C語言程序如下:
/* 該實驗是花樣流水燈(8個發光二極體以各種方式循環點亮),功能是花樣流水燈(8個發光二極體以1S間隔以各種方式循環點亮) */
#include//包含reg.52文件
#define uint unsigned int//宏定義
#define uchar unsigned char//宏定義
void delay(uint z);//聲明延時函數
uint a;//定義循環用變數
uchar code table[]={
0xff,//全滅
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐個點亮
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐個疊加
0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐個遞減
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//兩邊靠攏後分開
0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//兩邊疊加後遞減
0x00,//全亮
};//定義循環用數據表格
/*亮的現象:先是全滅,然後依次逐個點亮,然後依次逐個疊加,
然後依次逐個遞減,然後兩邊靠攏後分開,然後兩邊疊加後遞減,
最後全亮。循環!*/
void main()//main函數
{
a=0;//給a賦初值
while(1)//while循環
{
P1=table[a];//將a所在的table中的值賦給P1口
delay(1000);//1S延時子程序
a++;//a的值加一
if(a==42)//測試a是否等於42
a=0;//給a賦值
}
}
void delay(uint z)//1ms延時子程序,通過z值改變延時時間
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

㈣ 用匯編語言給51單片機編程四種流水燈

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV 30H,#0FEH
MOV 31H,01H
MOV 32H,#55H
LOOP:
MOV A,P1
ANL A,#03H
JNZ LOOP1
MOV A,30H
MOV P0,A
RL A
MOV 30H,A
LCALL DELAY
SJMP LOOP
LOOP1:
DEC A
JNZ LOOP2
MOV A,30H
MOV P0,A
RR A
MOV 30H,A
LCALL DELAY
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3
MOV A,31H
MOV P0,A
CJNE A,#0FFH,LOOP21
MOV A,#01H
SJMP LOOP22
LOOP21:
SETB C
RLC A
LOOP22:
MOV 31H,A
LCALL DELAY
SJMP LOOP
LOOP3:
MOV A,32H
MOV P0,A
CPL A
MOV 32H,A
LCALL DELAY
LJMP LOOP
END

㈤ 單片機流水燈由兩邊向中間流再由中間向兩邊流的匯編語言怎麼寫

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar TS_Count,TM_Count,TH_Count,count_N;
sbit LED_H=P3^0;
sbit LED_M=P3^1;
sbit LED_S=P3^2;

void DelayMS(uint x) //延時函數
{
uchar t;
while(x--)
{
for(t=120;t>0;t--);
}
}

void dis_time(uchar H_t,uchar M_t,uchar S_t)
{ uchar i;
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,
}; //定義數碼管顯示0~9的控制碼
uchar code PS_CODE[]={0x01,0x02,0x04,0x08,0x010,0x20,0x40,0x80}; //這是數碼管第n位的控制碼

//以下幾行是給每一個要顯示的數碼管賦值
uchar dis_bit[8];
dis_bit[0]=H_t/10%10; //千位
dis_bit[1]=H_t%10; //百位
dis_bit[2]=10; //十位
dis_bit[3]=M_t/10%10;
dis_bit[4]=M_t%10; //千位
dis_bit[5]=10; //百位
dis_bit[6]=S_t/10%10; //十位
dis_bit[7]=S_t%10;
for(i=0;i<8;i++)
{
P2=PS_CODE[i]; //第i個數碼管的位控制字
P0=DSY_CODE[dis_bit[i]]; //第i個數碼管的段碼控制字
DelayMS(5); //延時5毫秒。
}

}
void disp_mode(uchar mode_1) //這個函數控制三個LED燈
{
switch(mode_1)
{ case 0: //模式0,全滅
LED_H=1;
LED_M=1;
LED_S=1;
TR0 = 1;
break;
case 1: //模式1,LED_S亮
LED_H=1;
LED_M=1;
LED_S=0;
TR0 = 0;
break;
case 2: //模式2,LED_M亮
LED_H=1;
LED_M=0;
LED_S=1;
TR0 = 0;
break;
case 3: //模式3,LED_H亮
LED_H=0;
LED_M=1;
LED_S=1;
TR0 = 0;
break;
}
}
uchar Key_code() //這個函數檢測按鍵
{
uchar Key_NO;
if(P1==0xfe) //P1.0按鍵返回鍵值0
{Key_NO=0;}
if(P1==0xfd) //P1.1按鍵返回鍵值1
{Key_NO=1;}
if(P1==0xfb) //P1.2按鍵返回鍵值2
{Key_NO=2;}
while(P1!=0xff); //等待按鍵釋放,源程序有點錯誤需要加分號;
return Key_NO;
}
void main()
{uchar y=-1;
uchar mode_N=0;
TMOD=0X00; //定義定時器工作在模式0,13位定時器模式
TH0=(8192-5000)/32; //賦初值
TL0=(8192-5000)%32;
IE=0X82; //開啟定時器中斷和總中斷
TR0=1; //啟動定時器
while(1)
{
if(P1!=0xff) //等待按鍵,如果有按鍵按下,獲取鍵值
y=Key_code(); //獲取鍵值
switch(y)
{
case 0: //第一個按鍵按下
mode_N++; //模式控制變數加1
if( mode_N>3) mode_N=0;
break;
case 1: //第二個按鍵按下控制數據加
switch( mode_N)
{
case 1:if(TS_Count<59) TS_Count++;
break;
case 2:if(TM_Count<59) TM_Count++;
break;
case 3:if(TH_Count<23) TH_Count++;
break;
}
break;
case 2: //第三個按鍵按下,控制數據減
switch( mode_N)
{
case 1:if(TS_Count>0) TS_Count--;
break;
case 2:if(TM_Count>0) TM_Count--;
break;
case 3:if(TH_Count>0) TH_Count--;
break;
}
break;
}
y=-1;
disp_mode(mode_N);
dis_time(TS_Count,TM_Count,TH_Count);
//dis_time(25,26,27);
}
}
void LED_Flash()interrupt 1 //中斷服務程序,定時用。
{
TH0=(8192-5000)/32;
TL0=(8192-5000)%32;
if(++count_N>5)
{if(++TS_Count==60)
{
TS_Count = 0;
if(++TM_Count==60)
{
TM_Count = 0;
if(++TH_Count==24) TH_Count = 0;
}
}
count_N=0;
}
}

㈥ 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 ;匯編程序結束

(6)單片機流水燈匯編語言擴展閱讀:

實現流水燈的三個方法:

第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。

第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。

第三種,庫函數實現流水燈。利用左移函數進行。

㈦ 急!急!急!單片機流水燈匯編語言程序

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

隨便改了一個

㈧ 單片機匯編語言流水燈,定時器中斷控制,(500ms)延時

單片機匯編語言流水燈,用定時器中斷控制,可以初始化設置定時器時間(如50mS註定時器最大定時時間到不了500mS,需要加計數存儲,中斷10就是500mS),有多種方式實現如作一個流水狀態表,定時讀取寫入IO埠 表加一,,或者用左移太移等方式都可以實現在,網上有很多這種實例。

㈨ 匯編語言單片機流水燈

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P1,#0FFH
CPL P1.0
LCALL DELAY
CPL P1.1
LCALL DELAY
CPL P1.2
LCALL DELAY
CPL P1.3
LCALL DELAY
CPL P1.4
LCALL DELAY
CPL P1.5
LCALL DELAY
CPL P1.6
LCALL DELAY
CPL P1.7
MOV R6,#2
LOOP:
MOV R7,#10
MOV P1,#00H
DLY:
LCALL DELAY
DJNZ R7,DLY
MOV P1,#0FFH
MOV R7,#10
DLY1:
LCALL DELAY
DJNZ R7,DLY1
DJNZ R6,LOOP
LJMP MAIN
END

㈩ 單片機流水燈匯編程序

KEYFX EQU P1.0 ;方向控制鍵
KEYKM EQU P1.1 ;速度控制鍵
FX BIT 00H ;方向標志
SPEED BIT 01H ;速度標志
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000) ;50毫秒中斷一次
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV R2,#2
MOV A,#0FEH ;燈初始化
CLR FX
CLR SPEED
MOV SPEED,#2
LOOP:
JB KEYFX,LOOP1 ;方向鍵按下否
JNB KEYFX,$
CPL FX
SJMP LOOP
LOOP1:
JB KEYKM,LOOP ;速度鍵按下否
JNB KEYKM,$
CPL SPEED
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
JB FX,T001
RL A ;左循環
SJMP T002
T001:
RR A ;右循環
T002:
DJNZ R2,T0E
JB SPEED,T003
MOV R2,#2 ;快速
SJMP T0E
T003:
MOV R2,#10 ;慢速
T0E:
RETI
END

閱讀全文

與單片機流水燈匯編語言相關的資料

熱點內容
程序員在廣州上班 瀏覽:780
androidlinuxadt 瀏覽:510
廣聯達軟體加密鎖原裝晶元 瀏覽:338
如何打開資料庫伺服器 瀏覽:310
kppm是什麼app 瀏覽:538
python多個數組命名 瀏覽:191
a演算法csdn 瀏覽:23
r720伺服器什麼年代 瀏覽:975
本地電腦怎麼設置傳奇伺服器 瀏覽:1002
安卓10框架怎麼製作 瀏覽:959
程序員退休工資待遇 瀏覽:609
湛江中文編程數控系統代理 瀏覽:419
openglandroid書 瀏覽:170
奇妙組件安卓版叫什麼 瀏覽:729
微信授權什麼app權重最高 瀏覽:11
php循環數組foreach 瀏覽:78
zip和app有什麼區別 瀏覽:633
乖法快速演算法 瀏覽:872
日本程序員一年工資 瀏覽:199
出國做程序員怎麼樣 瀏覽:736