Lab 8:网络LED矩阵显示器
来源:互联网 发布:淘宝元素周期表验证码 编辑:程序博客网 时间:2024/05/19 09:04
一、连接和器材
器材列表:
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(errno: %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[n]='\0';
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矩阵显示器
- 嵌入式LAB 8:网络LED矩阵显示器
- 网络LED矩阵显示器
- 嵌入式实验8——网络LED矩阵显示器
- LED显示器
- LED显示器接口原理
- 用LED矩阵屏 显示网络摄像头图像
- Proteus添加 8x1 LED矩阵
- 7段LED显示器字符段码表
- bjfuOJ 1230LED显示器1(模拟)
- EXC2618N LED矩阵驱动程序
- 【Arduino】开发入门【七】7段LED显示器
- LED显示器大约有三方面的优点
- 【Arduino】开发入门【七】7段LED显示器
- Lab
- LAB
- 显示器
- 显示器
- AngularJs指令
- 理解LSTM网络
- c中##和#的意义和用处
- Java RandomAccessFile与MappedByteBuffer
- GA遗传算法Matlab版本实例注释
- Lab 8:网络LED矩阵显示器
- Apache搭建代理服务器
- [BZOJ3172] [TJOI2013] 单词 - AC自动机
- 配置内外网通信(虚拟机内网)
- 三线SWD模式Jlink
- Ugui美术字的使用
- WPF Step By Step 完整布局介绍
- 这20个正则表达式,让你少写1,000行代码
- Safari 和 IE浏览器 中使用iframe加载第三方网站的cookies、session