0.ASM0_LED_Flash:LED閃爍,3種方式
- /**
- ******************************************************************************
- * @file asm.asm
- * @author Alex——小白
- * @version V1.0
- * @date 2019.9.1
- * @brief 3種方法LED Flash 共陽極
- ******************************************************************************
- * @attention All Rights Reserved
- **/
- ORG 0000H ;程序執行的起始地址
- LJMP Main ;跳轉到main函數
-
- ORG 0100H ;程序跳轉到0100H開始執行
- ;方法1:
- Main: ;最簡單的LED閃爍
- MOV P1,#0FEH ;11111110
- LCALL Delay ;調用延時函數
- MOV P1,#0FDH ;11111101
- LCALL Delay ;調用延時函數
-
- MOV P1,#0FBH ;11111011
- LCALL Delay ;調用延時函數
- MOV P1,#0F7H ;11110111
- LCALL Delay ;調用延時函數
-
- MOV P1,#0EFH ;11101111
- LCALL Delay ;調用延時函數
- MOV P1,#0DFH ;11011111
- LCALL Delay ;調用延時函數
-
- MOV P1,#0BFH ;10111111
- LCALL Delay ;調用延時函數
- MOV P1,#07FH ;01111111
- LCALL Delay ;調用延時函數
-
- SJMP Main ;跳轉到main,死循環
- ;方法2:
- ; Main: ;通過數組的遍歷取值來流水
- ; MOV DPTR,#LED_table ;數組
- ; MOV R4,#00H ;R4寄存器存儲遍歷的變量,類似于c語言中的變量i
- ; While:
- ; MOV A,R4 ;將R4賦值給A
- ; CJNE A,#08H,Next ;判斷A是否為8,若是,繼續執行,否則跳轉Next
- ; MOV R4,#00H ;若A是8,R4賦值0
- ; SJMP While ;跳轉到While循環
- ; Next:
- ; MOVC A,@A+DPTR ;通過A的值來選擇數組中的值,如A=3,則@A+DPTR=0F7H,然后賦值給A
- ; MOV P1,A ;P1=A=0F7
- ; LCALL Delay ;調用延時函數
- ; INC R4 ;R4自加
- ; SJMP While ;跳轉到While循環
- ;方法3:
- ; Main: ;通過左移流水燈,RR是右移
- ; MOV A,#0FEH ;11111110
- ; While:
- ; MOV P1,A ;P1 = A = 11111110
- ; LCALL Delay ;調用延時函數
- ; RL A ;A左移,11111110左移后=11111101,
- ; SJMP While
- Delay: ;t=t1*8=1s,修改R5的值即可更改時間(不精準)
- MOV R5, #08H ;單周期,8次
- D1: ;t1=t2*250=500*250=125000
- MOV R6, #0FAH
- D2:
- MOV R7, #0FAH ;t2=250*2=500
- D3:
- DJNZ R7, D3 ;R7=250自減,直到為0跳出循環,雙周期
- DJNZ R6, D2 ;R6=250自減,直到為0跳出循環,雙周期
- DJNZ R5, D1 ;R5=100自減,直到為0跳出循環,雙周期
- RET
- LED_table:
- DB 0FEH, 0FDH, 0FBH, 0F7H, 0EFH, 0DFH, 0BFH, 07FH
- END
復制代碼
工程文件:
ASM0_LED_Flash.zip
(64.98 KB, 下載次數: 11)
2019-12-12 22:25 上傳
點擊文件名下載附件
|