java流水灯,iMX287A多种方法实现流水灯效果

本文介绍了在ARM Linux系统上,特别是iMX287处理器平台上,如何通过控制GPIO来实现LED流水灯效果。首先分析了硬件电路,确定了LED与GPIO的对应关系,然后详细阐述了通过shell脚本控制GPIO输出,实现流水灯的步骤。此外,还提供了一个简单的shell脚本示例,展示了如何编写脚本来便捷地控制LED的亮灭,形成流水灯的动态效果。
摘要由CSDN通过智能技术生成

@[toc]

1.流水灯在电子电路中的地位

记得第一次接触单片机时,还是用的AT89S52单片机,第1个程序就是点亮一个LED,然后再实现LED流水灯的效果。在这个过程中,可以了解整个程序的结构,GPIO的使用,延时的使用等。可以说单片机学习中的点灯,就相当于C语言中的"Hello World"!好的,我们来看一下在ARM Linux下如何控制GPIO。

2.硬件电路分析

点灯的根本是控制LED对应GPIO输出高低电平,那要控制哪个GPIO呢?这就需要查看原理图,看LED是连接到了哪个GPIO管脚。

iMX287的扩展板AP-283Demo原理图中,LED的驱动电路:

5243f6d5691cd23ad255d2cf469afd7e.png

与连接器的连接关系:

e594a192703ba16c7a9dab489ae60de6.png

这里我们把:4个LED的管脚和J8C的4个管脚使用跳线帽短接起来,即

J8A_1=LED1 -> J8C_1=IO3.26

J8A_2=LED2 -> J8C_2=IO3.22

J8A_3=LED3 -> J8C_3=IO3.20

J8A_4=LED4 -> J8C_4=IO2.7

即:

GPIO3_26 = LED1

GPIO3_22 = LED2

GPIO3_20 = LED3

GPIO2_7 = LED4

所以,我们只需要控制这几个GPIO的高低电平,可以控制LED了。

连接方式:

b23b80c746f6465c20c31e19febc3034.png

3.先点个灯吧

iMX28 系列处理器的 IO 端口分为 7 个 BANK,其中 BANK0~4 具有 GPIO 功能,每个BANK 具有 32 个 I/O。iMX283 部分 BANK 的引脚不支持 GPIO 功能,具体需要参考《IMX28CEC_Datasheet.pdf》手册。在导出 GPIO 功能引脚时,需要先计算 GPIO 引脚的排列序号,其序号计算公式:

GPIO序号 = Bank * 32 + N

#LED对应的序号

LED1 -> GPIO3_26 = 3 * 32 + 26 = 122

LED2 -> GPIO3_22 = 3 * 32 + 22 = 118

LED3 -> GPIO3_20 = 3 * 32 + 20 = 116

LED4 -> GPIO2_7 = 2 * 32 + 7 = 71

串口或SSH登录开发板之后,通过如下过程可导出对应GPIO的功能,以LED1对应的122为例:

#进入到gpio驱动所在的文件夹

cd /sys/class/gpio

#生成LED1操作的相关文件

echo 122 > export

#进入到LED1控制文件夹

cd gpio122

#设置GPIO为输出方向

echo out > direction

#查看当前GPIO的输入输出方向

cat direction

#设置GPIO输出0点亮LED

echo 0 > value

#查看当前GPIO的输出状态

cat value

#设置GPIO输出1熄灭LED

echo 1 > value

#查看当前GPIO的输出状态

在这里,就体现了Linux系统下一切皆文件的含义。

b324d41ac19f281483f4e62b9d59a203.png

这样,就实现了某个GPIO输出高低电平的目的,其他LED的控制,只需要修改对应的序号即可。

如果想取消LED1的GPIO功能,可以通过如下命令实现:

echo 122 > unexport

60c015661f55f2935ec59ade7ac55aee.png

当然,如果是读取输入,如按键等,就设置方向为in输入,通过cat value来读取输入的状态。

4.shell脚本实现流水灯

好了,知道了如何实现GPIO的控制,那么如何方便、快捷的执行以上步骤呢?我们这里先介绍一种通过shell脚本的方式控制LED实现流水灯的效果:

#在home目录新建led_blink.sh脚本文件

touch led_blink.sh

#输入控制LED实现流水灯效果的代码

vi led_blink.sh

led_blink.sh的文件内容:

#!/bin/bash

#LED对应的GPIO

led1_pin=122

led2_pin=118

led3_pin=116

led4_pin=71

#echo $led1_pin $led2_pin $led3_pin $led4_pin

#GPIO操作文件如果不存在则创建,否则不创建

for pin in $led1_pin $led2_pin $led3_pin $led4_pin

do

#如果文件夹存在

if [ ! -d "/sys/class/gpio/gpio$pin/" ];

then

echo $pin > /sys/class/gpio/export

else

echo "$pin dir exist!"

fi

done

#GPIO方向设置为输出

for pin in $led1_pin $led2_pin $led3_pin $led4_pin

do

echo out > /sys/class/gpio/gpio$pin/direction

done

#死循环

while true

do

#GPIO输出0/1

for pin in $led1_pin $led2_pin $led3_pin $led4_pin

do

echo "点亮$pin"

echo 0 > /sys/class/gpio/gpio$pin/value

sleep 1

echo "熄灭$pin"

echo 1 > /sys/class/gpio/gpio$pin/value

done

done

保存退出之后,通过如下命令执行这个脚本:

#添加可执行权限

chmod +x led_blink.sh

#执行脚本文件

./led_blink.sh

然后就可以看到流水灯效果了:

379d03984dd5859c4f4b9c1a4067c804.png

这种方式,没什么高深的技术,就是把之前通过一行一行的命令,转换成了自动化的脚本文件。为了写这种shell脚本,需要学习一些基本的shell语法。下面我们来介绍两种比较通用的方法,通过C语言文件读写的方式来实现流水灯效果。

5.ANSI C文件操作实现流水灯

只使用标准ANSI C文件操作来实现流水灯效果。标准C语言操作,常用的函数有

fopen/fclose/fwrite/fread/fseek等。无论是Linux还是Windows都是通用的。

/* ANSI C文件操作实现流水灯 By whik */

//包含printf和sleep等

#include

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[iMX287A多种方法实现流水灯效果]http://www.zyiz.net/tech/detail-114042.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值