Lab 8:网络LED矩阵显示器
一、连接和器材
器材列表:
RaspberryPi(树莓派)一块、USB-TTL串口线一根(PL2303芯片)、以太网线一根、8G容量SD卡一张、带windows7操作系统的PC一台、MAX7219驱动的8x8 LED矩阵一个。
MAX7219的VCC, GND, DIN, CS, CLK分别与树莓派左边一列的第1,第5,第4,第3,第2个引脚相连。(1,3,5,7,9)
使用Fritzing画出的外部连接示意图:
实物连接图:
二、实验步骤
a.编写Linux应用程序,能通过第七次实验的设备驱动程序控制LED矩阵显示字符串,每个字符停留500ms;
写好如下的lab8.c程序,它会调用mymatrix的write接口,每隔500ms循环显示1~9的数字以及A~Z的字母:
#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <linux/rtc.h> #include <linux/ioctl.h> #include <stdio.h> #include <stdlib.h>
int main(){ int fd; int write_try; fd=open("/dev/mymatrix",O_RDWR); if(fd == 1){ printf("Open failed.\n"); exit(-1); } int index=0; char dis_number[36]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; while(1){ write_try=write(fd,&dis_number[index],1); if(write_try == -1){ printf("write failed.\n"); exit(-1); } index=(index+1)%36; usleep(500000); } return 0;
} |
然后先装载上次的driver.ko模块:
编译lab8.c运行:
随后看到8*8的点阵上不断循环显示0~9,A~Z。
b.编写Linux应用程序,能通过TCP接受一个连接,将发来的文字在LED矩阵上流动显示出来;
服务器开始运行后,首先初始化socket,并且将本地地址绑定到所创建的监听套接字上,随后调用listen函数开始监听。一旦有用户连接上来就进入一个while循环,每次就是等待用户发送一个字符串,并且把这个字符串的每一个字符以500ms为间隔调用驱动显示到8*8矩阵上。
编写的server.c文件内容如下:
/* File Name: server.c */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<sys/ipc.h> #include<sys/shm.h> #include<netinet/in.h> #include<fcntl.h> #include<unistd.h> #include<error.h> #include<errno.h>
#define DEFAULT_PORT 8000 #define MAX_LINE 4096 #define SIZE 640
//display a string whose length is n void display(char * dis_number, int n){ int fd; int write_try; int i; fd=open("/dev/mymatrix",O_RDWR); if(fd == 1){ printf("Open failed.\n"); exit(-1); } for(i=0;i<n;i++){ write_try=write(fd,&dis_number[i],1); if(write_try == -1){ printf("write failed.\n"); exit(-1); } usleep(500000); } }
int main(int argc, char** argv) { int socket_fd, connect_fd; struct sockaddr_in servaddr; char buff[4096]; int n; //initial socket if((socket_fd = socket(AF_INET, SOCK_STREAM, 0))==-1){ printf("create socket error: %s(er 3ff7 rno: %d)\n",strerror(errno),errno); exit(0); }
memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//set IP servaddr.sin_port = htons(DEFAULT_PORT);//set port
//bind the address of localhost to socket if(bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } //listen for connect if(listen(socket_fd, 10) == -1){ printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); }
printf("======The server has been started successfully.======\n");
//wait for a clienter to connect if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){ printf("accept socket error: %s(errno: %d)",strerror(errno),errno); exit(0); }
if(send(connect_fd, "Connected successfully!\n", 24,0) == -1) perror("send error"); while(1){ n = recv(connect_fd, buff, MAX_LINE, 0); if(n<=0) continue; else{ buff printf("Received string: %s\n",buff); display(buff,n); //display this string } }
close(socket_fd); printf("======The server has been shutdown successfully.======\n"); }
|
编译运行服务器:
Ubuntu上使用telnet命令连接服务器:
在ubuntu上输入一些字符串,比如ABCD12345:
在树莓派服务器端我们看到成功接收到这个字符串:
同时可以看到矩阵上依次显示ABCD12345字符。
比如显示B时:
全部显示完毕后,矩阵恢复到初始图案,随后客户端继续发送字符串,客户端就会继续开始显示新的字符串。
至此,lab8任务结束。
- 嵌入式LAB 8:网络LED矩阵显示器
- 嵌入式实验8——网络LED矩阵显示器
- 网络LED矩阵显示器
- 网络LED矩阵显示器
- 模拟一个实验室的机器网络(M行N列的矩阵)被病毒感染的过程(熊猫烧香)
- [置顶] ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示
- 两款通过网络扩展显示器的软件
- Sparse Filtering 学习笔记(一)网络结构与特征矩阵
- caffe系列:deeplab中的插值网络层前传和反传的实现分析
- HDU 5015 矩阵优化 (2014西安网络赛)
- utilities(matlab)—— 前馈网络权值矩阵初始化方式
- 神经网络中的矩阵求导及反向传播推导
- cgi控制led,通过网络www实现
- 2017ICPC南宁赛区网络赛 Overlapping Rectangles(重叠矩阵面积和=离散化模板)
- 2014 一网络公司 在线 面试题目 打印矩阵
- 《神经网络和深度学习》系列文章十:[热身]一个基于矩阵的快速计算神经网络输出的方法
- 树莓派2代B model 上手初体验,不用显示器,Python GPIO 点亮一颗LED
- 计算机网络基础Lab期末考试题目
- BP(Back Propagation)神经网络及Matlab矩阵实现
- 热身:一个基于矩阵的快速计算神经网络输出的方法