導航:首頁 > 操作系統 > 51單片機32個燈編程匯編語言

51單片機32個燈編程匯編語言

發布時間:2022-08-15 18:39:42

㈠ 51單片機32個流水燈編程如何實現指定其中某一個燈亮,如何實現多種花樣亮燈

要51單片機控制32個流水燈,關鍵是要解決電路設計,只要能設計出電路來,編程實現控制指定其中某一個燈亮,並實現多種花樣亮燈,就容易了。如果只做32個流水燈,就用單片機的四個並行口,共32個IO引腳全部用上,正好控制32個流水燈。如果引腳還有其他應用,可用四片鎖存器,也可以控制32個流水燈了。

㈡ 51單片機和STM32有什麼區別編程語言也可以用匯編語言嗎

1.數據匯流排寬度不一樣,數據匯流排寬度越寬,處理速度越快。2.匯編指令集不同,51是mcs51指令集,stm32是arm指令集。指令集內容相似,但是形式上還是有較大差距。3.51更便宜,性價比更高,懂得人也更多。4.模擬環境不一樣,模擬器也不一樣。5.51沒有知識產權問題,專利已經過期了。6.發展節奏不一樣,51現在是跟跑,STM32是領跑。相似點:都可以用匯編和C語言。建議從單片基本功能開始學起,首先從點亮一顆LED開始,然後是流水燈、中斷等單片各種外設。先把基本功練好,後面才能爬得更高,張飛實戰電子的單

㈢ 求大神解答,用51單片機匯編語言實現一個紅綠燈的程序,不是一個路口的,大概注釋下就好

;------------------------------------

;程序實現功能

;西南北路口直行與轉彎交替通行,數碼管顯示直行通行倒計時,紅綠黃燈顯示包括人行道在內的道路交通狀態。

;某一方向道路擁擠時,可以人工控制調節東西南北方向通行時間。

;緊急情況時,各路口交通燈顯示紅燈,數碼管保持數據不變。

;工作寄存器及存儲單元分配

;1.工作寄存器

;R2設置為定時器定時中斷次數,R6、R7用於延時程序中的寄存器

;2.片內存儲單元

;30H、31H作為兩組數碼管顯示數據存儲單元;32H、33H作為交通燈初始狀態存儲單元;40H、41H作為交通燈顯示數據存儲單元

;3.標志位

;00H:南北通行標志位 ; 01H:東西通行標志位;02H:緊急事件標志位

;-----------------------------------

SNF EQU 00H ;;;南北通行標志位

EWF EQU 01H ;;;東西通行標志位

URF EQU 02H ;;;緊急事件標志位

ORG 0000H

LJMP MAIN ;;;上電轉主程序

ORG 000BH ;;;定時中斷入口

LJMP DSZD

ORG 0003H ;;;緊急中斷入口

LJMP URZD

ORG 0030H

MAIN: LCALL INIT ;;;調用初始化子程序

LOOP: LCALL DIS ;;;循環執行顯示子程序

AJMP LOOP

;///////////初始化程序

INIT: SETB SNF

SETB EWF

SETB URF

MOV R2,#20 ;;;定時器中斷20次為1s

MOV TMOD,#01H ;;;初始化定時器

MOV TL0,#0B0H

MOV TH0,#3CH

SETB EA ;;;開定時中斷與緊急中斷

SETB ET0

SETB TR0

SETB EX0

SETB IT0 ;;;設置中斷程式控制方式

MOV DPTR,#TAB ;;;數值首地址放入DPTR中

MOV 40H,#40 ;;;東南西北通行時間設置

MOV 41H,#40

MOV 30H,#40 ;;;通行時間初始化

MOV 31H,#60

MOV P0,#4CH ;;;初始化時南北通行並把交通燈狀態分別放在32H和33H中

MOV 32H,#4CH

MOV P2,#15H

MOV 33H,#15H

RET

;////////////顯示子程序

DIS: MOV P3,#0DFH ;;;選中南北方向的十位數碼管

MOV A,30H ;;;把顯示數據送人數碼管顯示

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A ;;;

LCALL D1MS

MOV P3,#0EFH ;;;選中南北方向的個位數碼管

MOV A,B ;;;送入數碼管顯示

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

MOV P3,#7FH ;;;選中第東西方向的十位數碼管

MOV A,31H ;;;送入數碼管顯示

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

MOV P3,#0BFH ;;;選中第東西方向的個位數碼管

MOV A,B

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

SETB P3.0

SETB P3.1

JNB P3.0,DIS_S ;;;查詢是否第一個按鍵按下

JNB P3.1,DIS_E ;;;查詢是否第二個按鍵按下

AJMP DIS_R ;;;沒有鍵按下則返回

DIS_S:LCALL D5MS ;;;按鍵去抖

JNB P3.0,DIS_SN

AJMP DIS_R

DIS_SN:MOV 40H,#50 ;;;對通行時間從新分配,南北通行時間加長

MOV 41H,#30

AJMP DIS_R

DIS_E:LCALL D5MS ;;;按鍵去抖

JNB P3.1,DIS_EW

AJMP DIS_R

DIS_EW:MOV 40H,#30 ;;;東西通行時間加長

MOV 41H,#50

DIS_R:RET

;///////定時中斷處理程序

DS_C: LJMP DS_R ;;;接力跳轉

DSZD: PUSH ACC ;;;保護現場

PUSH PSW

CLR TR0 ;;;關定時器及中斷標志位並重新賦值

CLR TF0

MOV TL0,#0B0H

MOV TH0,#3CH

DJNZ R2,DS_C ;;;判斷1m時間是否到達

MOV R2,#20 ;;;到達重新賦值

DEC 30H ;;;南北方向通行時間減一

MOV A,30H ;;;把減一後的時間送入顯示存儲單元

;;;;;;;南北通行到達最後4秒時黃燈閃爍

DS_10:CJNE A,#4,DS_11 ;;;如果通行時間剩餘4秒

JNB SNF,DS_11 ;;;判斷是否是南北通行

MOV P0,#8AH

MOV 32H, #8AH ;;;把交通燈狀態存入存儲單元(後面類似)

DS_11:CJNE A,#3,DS_12 ;;;不是剩餘3秒,返回

JNB SNF,DS_12 ;;;不是南北通行時間,返回

MOV P0,#88H

MOV 32H, #88H

DS_12:CJNE A,#2,DS_13

JNB SNF,DS_13

MOV P0,#8AH

MOV 32H, #8AH

DS_13:CJNE A,#1,DS_14

JNB SNF,DS_14

MOV P0,#88H

MOV 32H, #88H

;------------------------

DS_14:JNZ DS_NE ;;;通行時間沒有結束轉向改變東西方向的數碼管

CPL SNF ;;;如果通行時間結束則對標志位取反

JNB SNF,DS_1 ;;;判斷是否南北通行

MOV 30H,40H ;;;是,點亮相應的交通燈

MOV P0,#4CH

MOV 32H,#4CH ;;;存儲交通燈狀態

MOV P2,#15H

MOV 33H, #15H ;;;存儲交通燈狀態

DS_NE:DEC 31H ;;;東西方向通行時間減一

MOV A,31H ;;;把通行剩餘時間送入顯示存儲單元

;;;;;;;;東西方向通行時間剩餘4秒鍾黃燈閃爍(程序注釋與南北方向類似 略)

DS_20:CJNE A,#4,DS_21

JB EWF,DS_21

MOV P0,#51H

MOV 32H, #51H

DS_21:CJNE A,#3,DS_22

JB EWF,DS_22

MOV P0,#41H

MOV 32H, #41H

DS_22:CJNE A,#2,DS_23

JB EWF,DS_23

MOV P0,#51H

MOV 32H, #51H

DS_23:CJNE A,#1,DS_24

JB EWF,DS_24

MOV P0,#41H

MOV 32H, #41H

;-----------------------------

DS_24:JNZ DS_R ;;;東西方向時間沒有結束,返回

CPL EWF ;;;對通行狀態取反

JNB EWF,DS_2 ;;;東西方向通行時間到來,跳轉

MOV 31H,#80 ;;;東西方向通行結束,重新顯示時間

MOV P0,#89H ;;;點亮相應的交通燈

MOV 32H, #89H

MOV P2,#29H

MOV 33H, #29H

AJMP DS_R

DS_1: MOV 30H,#80 ;;;南北通行時間結束,重新對顯示存儲單元賦值

MOV P0,#89H ;;;執行轉彎狀態1

MOV 32H, #89H

MOV P2,#26H

MOV 33H, #26H

AJMP DS_NE

DS_2: MOV 31H,41H ;;;東西方向開始通行,賦值予顯示存儲單元

MOV P0,#61H ;;;點亮相應的交通燈

MOV 32H, #61H

MOV P2,#15H

MOV 33H, #15H

DS_R: SETB TR0

POP PSW ;;;恢復現場

POP ACC

RETI

;/////////////緊急中斷處理程序

URZD: PUSH ACC ;;;保護現場

PUSH PSW

CLR IE0 ;;;清除中斷標志位

CLR TR0 ;;;關定時器

CPL URF ;;;緊急事件標志位

JB URF,UR_CON ;;;緊急結束;跳轉

MOV P0,#49H ;;;各路口燈全顯示紅燈亮

MOV P2,#15H

AJMP UR_R

UR_CON:SETB TR0 ;;;恢復正常交通

MOV A,32H

MOV P0,A

MOV A,33H

MOV P2,A

UR_R: POP PSW ;;;恢復現場

POP ACC

RETI

;////////////查表指令0,1,2,3,4,5,6,7,8,9

TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH

DB 7DH, 07H, 7FH, 6FH

;//////////延時5ms與1ms

D5MS: MOV R7,#5

D1MS: MOV R7,#10

MOV R6,#50

L1: DJNZ R6,$

DJNZ R7,L1

RET

㈣ 求89C51單片機32個LED循環亮的匯編程序

ORG0000H

AJMPMAIN

ORG0030H

MAIN:MOVR0,#8

MOVA,#0FEH

P_0:MOVP0,A

ACALLDLY200

RLA

DJNZR0,P_0

MOVP0,#0FFH

MOVR0,#8

MOVA,#0FEH

P_1:MOVP1,A

ACALLDLY200

RLA

DJNZR0,P_1

MOVP1,#0FFH

MOVR0,#8

MOVA,#0FEH

P_2:MOVP2,A

ACALLDLY200

RLA

DJNZR0,P_2

MOVP2,#0FFH

MOVR0,#8

MOVA,#0FEH

P_3:MOVP3,A

ACALLDLY200

RLA

DJNZR0,P_3

MOVP3,#0FFH

MOVR0,#8

AJMPMAIN

DLY200:;延時200us,誤差0us

MOVR7,#04H

DL1:

MOVR6,#74H

DL0:

MOVR5,#0D6H

DJNZR5,$

DJNZR6,DL0

DJNZR7,DL1

NOP

RET

㈤ 51單片機p0口接32個流水燈,一個個的亮。求c語言程序和電路圖。

用一個P0口,接32個燈,要麼用4片並行晶元擴展,如4片74HC573,這樣,需要12個I/O腳來擴展。
要麼用4片74HC595,只需要3個I/O腳就夠了。

㈥ c51單片機控制交通燈要求用匯編語言

// 51單片機控制交通燈要求用匯編語言,模擬實例,可以參考一下

SNF EQU 00H ; 南北通行標志位

EWF EQU 01H ; 東西通行標志位

URF EQU 02H ; 緊急事件標志位

ORG 0000H

LJMP MAIN ; 上電轉主程序

ORG 000BH ; 定時中斷入口

LJMP DSZD

ORG 0003H ; 緊急中斷入口

LJMP URZD

ORG 0030H

MAIN: LCALL INIT ; 調用初始化子程序

LOOP: LCALL DIS ; 循環執行顯示子程序

AJMP LOOP

; *** *** *** 初始化程序

INIT: SETB SNF

SETB EWF

SETB URF

MOV R2,#20 ; 定時器中斷20次為1s

MOV TMOD,#01H ; 初始化定時器

MOV TL0,#0B0H

MOV TH0,#3CH

SETB EA ; 開定時中斷與緊急中斷

SETB ET0

SETB TR0

SETB EX0

SETB IT0 ; 設置中斷程式控制方式

MOV DPTR,#TAB ; 數值首地址放入DPTR中

MOV 40H,#40 ; 東南西北通行時間設置

MOV 41H,#40

MOV 30H,#40 ; 通行時間初始化

MOV 31H,#60

MOV P0,#4CH ; 初始化時南北通行並把交通燈狀態分別放在32H和33H中

MOV 32H,#4CH

MOV P2,#15H

MOV 33H,#15H

RET

; *** *** *** 顯示子程序

DIS: MOV P3,#0DFH ; 選中南北方向的十位數碼管

MOV A,30H ; 把顯示數據送人數碼管顯示

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A ;

LCALL D1MS

MOV P3,#0EFH ; 選中南北方向的個位數碼管

MOV A,B ; 送入數碼管顯示

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

MOV P3,#7FH ; 選中第東西方向的十位數碼管

MOV A,31H ; 送入數碼管顯示

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

MOV P3,#0BFH ; 選中第東西方向的個位數碼管

MOV A,B

MOVC A,@A+DPTR

MOV P1,A

LCALL D1MS

SETB P3.0

SETB P3.1

JNB P3.0,DIS_S ; 查詢是否第一個按鍵按下

JNB P3.1,DIS_E ; 查詢是否第二個按鍵按下

AJMP DIS_R ; 沒有鍵按下則返回

DIS_S:LCALL D5MS ; 按鍵去抖

JNB P3.0,DIS_SN

AJMP DIS_R

DIS_SN:MOV 40H,#50 ; 對通行時間從新分配,南北通行時間加長

MOV 41H,#30

AJMP DIS_R

DIS_E:LCALL D5MS ; 按鍵去抖

JNB P3.1,DIS_EW

AJMP DIS_R

DIS_EW:MOV 40H,#30 ; 東西通行時間加長

MOV 41H,#50

DIS_R:RET

; *** *** *** 定時中斷處理程序

DS_C: LJMP DS_R ; 接力跳轉

DSZD: PUSH ACC ; 保護現場

PUSH PSW

CLR TR0 ; 關定時器及中斷標志位並重新賦值

CLR TF0

MOV TL0,#0B0H

MOV TH0,#3CH

DJNZ R2,DS_C ; 判斷1m時間是否到達

MOV R2,#20 ; 到達重新賦值

DEC 30H ; 南北方向通行時間減一

MOV A,30H ; 把減一後的時間送入顯示存儲單元

; *** *** *** 南北通行到達最後4秒時黃燈閃爍

DS_10:CJNE A,#4,DS_11 ; 如果通行時間剩餘4秒

JNB SNF,DS_11 ; 判斷是否是南北通行

MOV P0,#8AH

MOV 32H, #8AH ; 把交通燈狀態存入存儲單元(後面類似)

DS_11:CJNE A,#3,DS_12 ; 不是剩餘3秒,返回

JNB SNF,DS_12 ; 不是南北通行時間,返回

MOV P0,#88H

MOV 32H, #88H

DS_12:CJNE A,#2,DS_13

JNB SNF,DS_13

MOV P0,#8AH

MOV 32H, #8AH

DS_13:CJNE A,#1,DS_14

JNB SNF,DS_14

MOV P0,#88H

MOV 32H, #88H

; *** *** ***

DS_14:JNZ DS_NE ; 通行時間沒有結束轉向改變東西方向的數碼管

CPL SNF ; 如果通行時間結束則對標志位取反

JNB SNF,DS_1 ; 判斷是否南北通行

MOV 30H,40H ; 是,點亮相應的交通燈

MOV P0,#4CH

MOV 32H,#4CH ; 存儲交通燈狀態

MOV P2,#15H

MOV 33H, #15H ; 存儲交通燈狀態

DS_NE:DEC 31H ; 東西方向通行時間減一

MOV A,31H ; 把通行剩餘時間送入顯示存儲單元

; *** *** *** 東西方向通行時間剩餘4秒鍾黃燈閃爍(程序注釋與南北方向類似 略)

DS_20:CJNE A,#4,DS_21

JB EWF,DS_21

MOV P0,#51H

MOV 32H, #51H

DS_21:CJNE A,#3,DS_22

JB EWF,DS_22

MOV P0,#41H

MOV 32H, #41H

DS_22:CJNE A,#2,DS_23

JB EWF,DS_23

MOV P0,#51H

MOV 32H, #51H

DS_23:CJNE A,#1,DS_24

JB EWF,DS_24

MOV P0,#41H

MOV 32H, #41H

; *** *** ***

DS_24:JNZ DS_R ; 東西方向時間沒有結束,返回

CPL EWF ; 對通行狀態取反

JNB EWF,DS_2 ; 東西方向通行時間到來,跳轉

MOV 31H,#80 ; 東西方向通行結束,重新顯示時間

MOV P0,#89H ; 點亮相應的交通燈

MOV 32H, #89H

MOV P2,#29H

MOV 33H, #29H

AJMP DS_R

DS_1: MOV 30H,#80 ; 南北通行時間結束,重新對顯示存儲單元賦值

MOV P0,#89H ; 執行轉彎狀態1

MOV 32H, #89H

MOV P2,#26H

MOV 33H, #26H

AJMP DS_NE

DS_2: MOV 31H,41H ; 東西方向開始通行,賦值予顯示存儲單元

MOV P0,#61H ; 點亮相應的交通燈

MOV 32H, #61H

MOV P2,#15H

MOV 33H, #15H

DS_R: SETB TR0

POP PSW ; 恢復現場

POP ACC

RETI

; *** *** *** 緊急中斷處理程序

URZD: PUSH ACC ; 保護現場

PUSH PSW

CLR IE0 ; 清除中斷標志位

CLR TR0 ; 關定時器

CPL URF ; 緊急事件標志位

JB URF,UR_CON ; 緊急結束;跳轉

MOV P0,#49H ; 各路口燈全顯示紅燈亮

MOV P2,#15H

AJMP UR_R

UR_CON:SETB TR0 ; 恢復正常交通

MOV A,32H

MOV P0,A

MOV A,33H

MOV P2,A

UR_R: POP PSW ; 恢復現場

POP ACC

RETI

; *** *** *** 查表指令0,1,2,3,4,5,6,7,8,9

TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH

DB 7DH, 07H, 7FH, 6FH

; *** *** *** 延時5ms與1ms

D5MS: MOV R7,#5

D1MS: MOV R7,#10

MOV R6,#50

L1: DJNZ R6,$

DJNZ R7,L1

RET

㈦ 51單片機:利用開發板p0~p3的32個燈做一個程序,實現的功能可以自定義。

#include<reg51.h>
#defineucharunsignedchar
uchartime,num;
ucharled1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ucharled2[]={0xe7,0xdb,0xbd,0x7e,0x7e,0xbd,0xdb,0xe7};
ucharled3[]={0x55,0xaa,0xfc,0xf3,0xcf,0x3f,0xaa,0x55};
ucharled4[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
voiddelay(uchara)
{
while(a--)for(i=0;i<120;i++);
}
main()
{
uchari;
while(1)
{
switch(time)
{
case0:P0=led1[i];P1=led2[i];P2=led3[i];P3=led4[i];i++;delay(200);break;
case1:P0=led2[i];P1=led3[i];P2=led4[i];P3=led1[i];i++;delay(200);break;
case2:P0=led3[i];P1=led4[i];P2=led1[i];P3=led2[i];i++;delay(200);break;
case3:P0=led4[i];P1=led1[i];P2=led2[i];P3=led3[i];i++;delay(200);break;
default:break;
}
i%=8;
if(i==0)time++;
time%=4;
}
}

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

(8)51單片機32個燈編程匯編語言擴展閱讀:

實現流水燈的三個方法:

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

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

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

㈨ 51單片機定時器的匯編語言程序編程,

LED BIT P1.0 ;定義LED的引腳
ORG 0000H

LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H ;定時器0工作模式1
MOV TH0,#HIGH(65536-50000) ;初值,50毫秒中斷一次
MOV TL0,#LOW(65536-50000)
SETB TR0 ;啟動定時器
SETB ET0 ;啟動定時器中斷
SETB EA ;開總中斷
MOV R2,#40 ;中斷計數初始值
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E ;R2減到0重新賦值,否則退出
MOV R2,#40
CPL LED ;LED亮滅轉換
T0E:
RETI
END

閱讀全文

與51單片機32個燈編程匯編語言相關的資料

熱點內容
dns伺服器在電腦上有什麼用 瀏覽:915
杭州大媽喜歡程序員 瀏覽:686
python評論樹講解 瀏覽:679
juniper防火牆常用命令 瀏覽:426
vapp怎麼下載地址 瀏覽:11
pdf裡面內容怎麼修改 瀏覽:807
收藏網址加密的瀏覽器 瀏覽:1000
phpurl問號 瀏覽:898
什麼筆記本電腦可以用python 瀏覽:135
加密相冊如何翻找 瀏覽:992
泰州地區DNS伺服器地址 瀏覽:849
一種app可以買菜用英語怎麼說 瀏覽:196
中國聯通app裡面通話詳單怎麼刪除 瀏覽:505
計算機網路編譯軟體 瀏覽:100
程序員說不能說的秘密 瀏覽:700
在線shell編譯器 瀏覽:103
為什麼王者榮耀安卓轉蘋果成功登不上去 瀏覽:710
文件加密演算法可行性報告 瀏覽:60
a3雙面列印pdf 瀏覽:270
被命令文言文 瀏覽:717