从51单片机到Linux Linux操控流水灯(教程5)_基于51单片机的花样流水灯
目录:
1.51单片机实现流水灯程序
2.51单片机流水灯程序编写
3.51单片机流水灯三种编程方式
4.51单片机流水灯
5.51单片机8个流水灯编程按键控制
6.51单片机led流水灯程序汇编
7.51单片机流水灯汇编程序
8.基于51单片机的花样流水灯设计
9.51单片机流水灯设计思路
10.51单片机如何实现流水灯
1.51单片机实现流水灯程序
大家好,我是兔子是一个嵌入式软硬件工程师正在从单片机开发转岗Linux开发这次,有前几节的教程的基础我们终于可以通过开发板,使用Linux跑流水灯了终于有种开始能写程序的赶脚1.操作大纲 1)我们在i.MX280开发板上(i.MX283及i.MX287也一样,驱动配置稍微调整),使用写好的驱动进行驱动编译。
2.51单片机流水灯程序编写
然后加载驱动 2)看原理图,知道了解如何将流水灯接到ARM的IO管脚上知道操控的灯属于哪些引脚 3)写流水灯程序 4)开发板运行流水灯,观看效果2.调整驱动及驱动编译将GPIO驱动工程(开发板配套资料获得,或者51转Linux学习群*获得)拷贝到虚拟机里。
3.51单片机流水灯三种编程方式
可以看到,这个文件夹名叫2、gpio_driver。我拷贝到虚拟机的路径为~/XW_Linux/ZLG下。

4.51单片机流水灯
打开驱动源文件gpio_driver.c

5.51单片机8个流水灯编程按键控制
可以看到,该驱动是根据不同板卡进行配置的配置变量为zlg_board_type如果是i.MX283的板卡,则配0如果是i.MX287的板卡,则配1兔子我的板卡,是使用的i.MX280所以我配置为2调整完成后,将驱动文件保存。
6.51单片机led流水灯程序汇编
在驱动的Makefile里,强制指定内核的目录。(编译驱动需要使用到编译好的内核路径)

7.51单片机流水灯汇编程序
由于兔子我做好的虚拟机开发环境,内核目录是放置在了/home/book下。故Makefile指定的内核路径为/home/book/linux-2.6.35.3

8.基于51单片机的花样流水灯设计
调整好Makefile文件,并保存后。使用终端,进入驱动目录,make一下驱动。

9.51单片机流水灯设计思路
可以看到,make后,生成了驱动文件,gpio_driver.ko则驱动编译成功。3.看原理图接线首先先看我们的开发板,是又一个主控板以及一个扩展板组成。4个流水灯位于数码管的下方的红框处。

10.51单片机如何实现流水灯
两块板卡,通过排针排座相互连接。

故我们需要通过原理图,了解到4个流水灯是接到ARM的哪些管脚上首先先打开扩展板的原理图,找到4个LED灯分析电路可知,这4个LED灯,是ARM给低电平点亮高电平熄灭同时他们的电气网络名,分别为IO_LED1, IO_LED4,IO_LED3,IO_LED2。

我们再在扩展板上,看这4个LED对应的电气网络名,还接到了哪里。找到了,发现这4个灯的电气网络名,还接到了一个器件J8A上。

通过观察板卡,兔子我了解这是一个排针。

正好是在J8B和J8C两排排针的中间通过扩展板的原理图,我知道了J8B和J8C两个排针是最终和下面的主控板相接的于是我通过跳线帽,将4个LED灯都接到了J8B上(接到J8C上也可以,到时候点灯控制J8C对应的IO口)。

跳线过后,实际在原理图上,是这样连接的。

LED1接到了280_IO3.28电气网络上。LED2接到了280_IO3.26电气网络上。LED3接到了280_IO3.25电气网络上。LED4接到了280_IO3.24电气网络上。再继续寻找

可以看到,这4个脚,分别是接到和主控板相接的2个大排座上。及排座的IDC-B上的3,6,13,14。4个针脚上。

我们再打开主控板的原理图,找到这2个大排座。

这下可以知道了LED1接到ARM的PWM3管脚上LED2接到ARM的PWM7管脚上LED3接到ARM的SDA0管脚上LED4接到ARM的SCL0管脚上这下原理图确认完毕,灯的线路和ARM控制引脚已经对应上。
4.写流水灯程序#include#include#include#include#include
#include#include#include#include#include#include
#include#include"gpio.h"staticvoidshow_help(void){printf("example:\n");printf("./gpio_led1 &
\n");//printf(" gpio_test /dev/gpio-xxx H #set gpio output higth \n"); //printf(" gpio_test /dev/gpio-xxx L #set gpio output low \n");
//printf(" gpio_test /dev/gpio-xxx R #read gpio input status(H/L) \n"); }intmain(intargc,char*argv[])
{intfd1,fd2,fd3,fd4;intdata;if(argc!=1){show_help();return-1;}fd1=open("/dev/gpio-PWM3",O_RDWR);if(fd1
<0){printf("faile to open LED1,file :/dev/gpio-PWM3 \n");return-1;}fd2=open("/dev/gpio-PWM7",O_RDWR);
if(fd2<0){printf("faile to open LED2,file :/dev/gpio-PWM7 \n");return-1;}fd3=open("/dev/gpio-SDA0",O_RDWR
);if(fd3<0){printf("faile to open LED3,file :/dev/gpio-SDA0 \n");return-1;}fd4=open("/dev/gpio-SCL0",
O_RDWR);if(fd4<0){printf("faile to open LED4,file :/dev/gpio-SCL0 \n");return-1;}while(1){ioctl(fd1,SET_GPIO_LOW
);//点亮LED1 ioctl(fd2,SET_GPIO_HIGHT);//关闭LED2 ioctl(fd3,SET_GPIO_HIGHT);//关闭LED3 ioctl(fd4,SET_GPIO_HIGHT
);//关闭LED4 usleep(500*1000);//延时500ms ioctl(fd1,SET_GPIO_HIGHT);//关闭LED1 ioctl(fd2,SET_GPIO_LOW);//点亮LED2
ioctl(fd3,SET_GPIO_HIGHT);//关闭LED3 ioctl(fd4,SET_GPIO_HIGHT);//关闭LED4 sleep(1);//延时1s ioctl(fd1,SET_GPIO_HIGHT
);//关闭LED1 ioctl(fd2,SET_GPIO_HIGHT);//关闭LED2 ioctl(fd3,SET_GPIO_LOW);//点亮LED3 ioctl(fd4,SET_GPIO_HIGHT
);//关闭LED4 sleep(1);//延时1s ioctl(fd1,SET_GPIO_HIGHT);//关闭LED1 ioctl(fd2,SET_GPIO_HIGHT);//关闭LED2 ioctl
(fd3,SET_GPIO_HIGHT);//关闭LED3 ioctl(fd4,SET_GPIO_LOW);//点亮LED4 sleep(1);//延时1s }return0;}程序说明:1)open("/dev/gpio-PWM3", O_RDWR);表示打开开发板的/dev目录下的gpio-PWM3文件。
O_RDWR表示对这个文件是可读可写操作开发板的/dev/gpio-PWM3文件是操作ARM的IO管脚的文件(只有加载驱动才会在开发板生成这个文件,故运行点灯程序之前,需要首先加载第2步的驱动,后续会说明如何加载)。
Linux操作,都是对文件的操作所以在进行相关操作之前,都是需要open对应的文件2)ioctl(fd1,SET_GPIO_LOW); //点亮LED1Ioctl表示直接操作文件,具体操作需要和驱动对应。
这里简单器件直接写明SET_GPIO_LOW表示对应的IO输出低电平SET_GPIO_HIGHT表示对应的IO输出高电平注意:目前电路的接法是低电平点亮LEDSET_GPIO_LOW和SET_GPIO_HIGHT是头文件gpio.h里的宏定义。
3)sleep(1);表示延时1秒(在当前内核2.26.35.3里表示1秒,其他版本内核可能表示为毫秒)如果想延时小于1秒,可以使用微秒延时函数usleep(500*1000);表示延时500毫秒sleep();以及usleep();延时函数推荐使用。
因为这不是软件延时,不会占用CPU的资源将点灯程序命名为gpio_led1.c存到路径~/XW_Linux/ZLG/2、gpio_driver/test目录下同时修改该目录下的点灯应用程序的Makefile。
调整如下图所示
然后使用终端,make一下,进行点灯应用程序的编译。
可以看到,无报错生成的点灯文件在bin文件夹里将生成的点灯程序和驱动拷贝到NFS共享目录里(如何使用NFS共享目录,请移步至教程3)至此,点灯程序编译完成5.运行程序1)开发板上电,并挂载NFS共享目录。
(具体操作可移步教程3)2)进入开发板的NFS挂载点/mnt文件夹下。通过ls命令能查看到我们编译好的点灯程序和驱动。
3)首先,先加载驱动。使用insmod gpio_driver.ko指令。
可以看到,打印了很多生成的文件。表示驱动加载成功。4)运行点灯程序使用./gpio_led1 & 表示在后台运行点灯程序。
可以看到,返回了一个进程编号1256。表示程序运行成功。(进程编号每次运行不固定,是由Linux系统分配,可以暂时不用管)5)视频效果Linux流水的效果
以上就是关于《从51单片机到Linux Linux操控流水灯(教程5)_基于51单片机的花样流水灯》的全部内容,本文网址:https://www.7ca.cn/baike/11698.shtml,如对您有帮助可以分享给好友,谢谢。