一步步點亮LED6 流水燈效果

2021-10-02 17:09:56 字數 3407 閱讀 5761

1、流水燈原理分析

流水燈又叫跑馬燈,實現的效果就是:挨著的led依次點亮熄滅(同時只有1顆led亮的)

2、流水燈編寫(使用迴圈)

led1亮延時 + led2亮延時 + led3亮延時 + 迴圈

4、總結:跟著朱老師一步步做實驗根本不難。

程式設計操控硬體的步驟:1、分析硬體工作原理、2、分析原理圖、3、分析資料手冊、4、找到相關的sfr、5、寫**設定暫存器得到想要的效果。每個硬體都是這樣操控的。

示例**1:

#define gpj0con 0xe0200240

#define gpj0dat 0xe0200244

.global _start

_start:

flah:

//第一步:設定gpj0con控制暫存器,設定方法是直接把所有引腳設定為輸出模式

ldr r0, =0x11111111

ldr r1, =gpj0con

str r0, [r1]

//第二步:點亮led1,其它的滅

ldr r0, =(0<<3)|(1<<4)|(1<<5)

ldr r1, =gpj0dat

str r0, [r1]

//延時

bl delay

//第三步:點亮led2,其它的滅

ldr r0, =(1<<3)|(0<<4)|(1<<5)

ldr r1, =gpj0dat

str r0, [r1]

//延時

bl delay

//第四步:點亮led3,其它的滅

ldr r0, =(1<<3)|(1<<4)|(0<<5)

ldr r1, =gpj0dat

str r0, [r1]

//延時

bl delay

bl flah

//延時函式

delay:

ldr r2, =9000000

ldr r3, =0x00

delay_oop:

sub r2, r2, #1

cmp r2, r3

bne delay_oop

mov pc, lr

示例**2—位運算小技巧

#define gpj0con 0xe0200240

#define gpj0dat 0xe0200244

.global _start

_start:

flah:

//第一步:設定gpj0con控制暫存器,設定方法是直接把所有引腳設定為輸出模式

ldr r0, =0x11111111

ldr r1, =gpj0con

str r0, [r1]

//第二步:點亮led1,其它的滅

ldr r0, = ~(1<<3)

ldr r1, =gpj0dat

str r0, [r1]

//延時

bl delay

//第三步:點亮led2,其它的滅

ldr r0, = ~(1<<4)

ldr r1, =gpj0dat

str r0, [r1]

//延時

bl delay

//第四步:點亮led3,其它的滅

ldr r0, = ~(1<<5)

ldr r1, =gpj0dat

str r0, [r1]

//延時

bl delay

bl flah

delay:

ldr r2, =9000000

ldr r3, =0x00

delay_oop:

sub r2, r2, #1

cmp r2, r3

bne delay_oop

mov pc, lr

示例**3—加入led4實現流水燈

#define gpj0con 0xe0200240

#define gpj0dat 0xe0200244

#define gpd0con 0xe02000a0

#define gpd0dat 0xe02000a4

.global _start

_start:

flah:

//第一步:設定gpj0con和gpd0con控制暫存器,設定方法是直接把所有引腳設定為輸出模式

ldr r0, =0x11111111

ldr r1, =gpj0con

str r0, [r1]

ldr r2, =0x11111111

ldr r3, =gpd0con

str r2, [r3]

//第二步:點亮led1,其它的滅

ldr r0, = (0<<3)|(1<<4)|(1<<5)

ldr r1, =gpj0dat

str r0, [r1]

//gpd0dat控制led4

ldr r2, = 0b1111

ldr r3, =gpd0dat

str r2, [r3]

//延時

bl delay

//第三步:點亮led2,其它的滅

ldr r0, = (1<<3)|(0<<4)|(1<<5)

ldr r1, =gpj0dat

str r0, [r1]

//gpd0dat控制led4

ldr r2, = 0b1111

ldr r3, =gpd0dat

str r2, [r3]

//延時

bl delay

//第四步:點亮led3,其它的滅

ldr r0, = (1<<3)|(1<<4)|(0<<5)

ldr r1, =gpj0dat

str r0, [r1]

//gpd0dat控制led4

ldr r2, = 0b1111

ldr r3, =gpd0dat

str r2, [r3]

//延時

bl delay

//第五步:點亮led4,其它的滅

ldr r0, = (1<<3)|(1<<4)|(1<<5)

ldr r1, =gpj0dat

str r0, [r1]

//gpd0dat控制led4

ldr r2, = 0b1101

ldr r3, =gpd0dat

str r2, [r3]

//延時

bl delay

bl flah

delay:

ldr r2, =9000000

ldr r3, =0x00

delay_oop:

sub r2, r2, #1

cmp r2, r3

bne delay_oop

mov pc, lr

一步步點亮LED之彙編點亮LED

gpj0con埠一共有8個埠,分別記住 gpj0 0 gpj0 7 相關暫存器為gpj0con gpj0dat gpj0con暫存器中設定8個引腳的工作模式 32 8 4,每個引腳分到4位,譬如gpj0 0位bit0 bit3,我們就給 它寫入0001得到輸出模式 1 需要控制的引腳 gpj0 3 ...

一步步點亮led之軟硬體分析

剩下的4顆led燈 正極接 3.3v,負極接soc的乙個引腳 d22 gpj0 3 d23 gpj0 4 d24 gpj0 5 d25 pwmtout1 gpd0 1 因此,為了點亮led,我們可以讓那些對應的引腳為低電平。下面開始分析軟體方面的問題。如何操控這些引腳為低電平?gpio是晶元的引腳,...

一步步學ROS

最近因為看svo的 裡面用到catkin決定要好好看ros,年前學會基本操作。啟動節點 rosrun package name executable name 檢視節點 rosnode list 注 rosout 節點是乙個特殊的節點,通過 roscore 自動啟動 檢視特定節點的資訊 rosnod...