电子系统设计与实践报告.docx

上传人:b****6 文档编号:7413732 上传时间:2023-01-23 格式:DOCX 页数:22 大小:246.38KB
下载 相关 举报
电子系统设计与实践报告.docx_第1页
第1页 / 共22页
电子系统设计与实践报告.docx_第2页
第2页 / 共22页
电子系统设计与实践报告.docx_第3页
第3页 / 共22页
电子系统设计与实践报告.docx_第4页
第4页 / 共22页
电子系统设计与实践报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

电子系统设计与实践报告.docx

《电子系统设计与实践报告.docx》由会员分享,可在线阅读,更多相关《电子系统设计与实践报告.docx(22页珍藏版)》请在冰豆网上搜索。

电子系统设计与实践报告.docx

电子系统设计与实践报告

《电子系统设计与实践报告》

 

院系电气与信息工程学院

专业班级电气151班

学生学号

学生

指导教师叔元

完成日期2018年06月28日

 

第一章设计目的与任务

1.1设计目的

1掌握Linux系统的常规使用。

2掌握主控板的常规使用。

3掌握使用linnux系统编程代码控制主控板显示屏。

4对所学知识进行项目的验收检测。

1.2设计项目要求

智能家居系统通过家庭网络,让系统中的各类设备之间相互联动,为我们营造智能化、舒适化、便利化的生活环境。

智能家居可以让我们解放双手,提高生活水平。

本次实训的要设计缩小版的智能家居,其特点在于操作简单、易于上手、稳定性强,实现实时监控、视频的播放、音乐的播放、图片的显示以及对控制led灯的开关。

所以本周要学习关于嵌入式的基本入门知识,以及相关软件的使用。

第1章知识点总结

2.1搭建开发环境

步骤:

一:

安装虚拟机,直接双击安装程序,不断下一步,最后要求你输入密钥,安装包里面有破解程序

二:

解压ubuntu就可以直接使用

虚拟机:

用软件来模拟真实的电脑,我们的linux操作系统必须在虚拟机上运行

ubuntu(乌邦图):

linux操作系统一个发行版本的名字

使用linux操作系统

登陆的时候千万不要用guest身份登陆,要使用yueqian登陆,密码是123456

linux跟windows的使用习惯有些不同,作为开发人员我们使用命令来控制linux系统

打开命令终端:

ctrl+alt+t

gecubuntu:

~$

gec---〉当前用户的名字

ubuntu---〉操作系统的名字

~---〉当前用户的家目录

$---〉当前用户是个普通用户

linux中的这些命令统称shell命令,做系统运维的人就是编写程序用这些命令来自动管理服务器

2.2linux操作系统的常规使用

2.2.1启动Linux系统

启动VMware--》选中Ubuntu12.04---》继续运行虚拟机--》进入桌面系统--》启动命令行

--》双击terminal(ctrl+alt+t)

2.2.2linux常规命令的使用

A.查看某个位置下有什么东西ls[选项][路径]

ls查看当前的位置下有什么东西(刷新)

ls-l查看当前位置下文件的详细信息

drwxrwxr-x文件操作权限(chmod)

ls-a查看当前位置下所有的文件(包含隐藏文件)

ls-la两个功能结合在一起

B.修改工作路径(更改当前所处的文件夹的位置)cd(路径)

cd/回到根目录(起点)

cd/&&cdhome&&cdgec

===》cd/home/gec

cd..返回上一级

cd~返回家目录(常规操作位置:

家目录/共享目录)==>/home/gec

C.得到当前的工作路径

pwd得到当前的位置

D.创建&&删除(文件/目录)

touch文件名1文件名2//创建空白文件

rm文件名1文件名2//删除文件

mkdir目录名1目录名2//创建目录

rm-rf目录名1目录名2//删除目录

E.编辑&&编译&&执行

geditfilename.c//怎么编写源文件(c代码)

gcc/arm-linux-gccfilename.c-ofilename//生成可执行文件(编译)

./filename//运行可执行程序

F.修改文件的为可执行权限

chmod777filename

(3)补充:

路径的组成(文件存储结构:

树状结构)

相对路径:

当前位置下/一级目录/二级目录

绝对路径:

/一级目录/二级目录

2.3windows与Linux的文件共享

虚拟机--》设置--》选项--》共享文件夹--》启用--》添加--》下一步--》配置如下

主机路径(windows):

笔记

名称(LInux):

share(必须进入/mnt/hgfs)

test1.c:

编写九九乘法表,编译,运行起来

#include

voidmain()

{

chari,j,k;

for(i=1;i<=9;i++)

{for(j=1;j<=i;j++)

{

k=i*j;

printf("%d*%d=%d\t",i,j,k);

}

printf("\n");

}

return0;

}

2.4硬件控制

(1)双要素

驱动程序+应用程序(配套出现)

(2)驱动如何使用?

A.得到驱动程序文件led_drv.ko/gec210_beep.ko

B.加载驱动-->产生设备文件--->文件IO才能生效

insmodxxx.ko

==>insmod:

can'tinsert'led_drv.ko':

Fileexists表示驱动已经存在

C.查看系统下已有的驱动

lsmod

==>

led_drv12030-Live0xbf028000//LED驱动

buzzer_drv14880-Live0xbf022000//蜂鸣器

gec210_beep12980-Live0xbf0e6000//蜂鸣器

rtnet3070ap241240-Live0xbf0d3000

rt3070ap4882611rtnet3070ap,Live0xbf044000(P)

rtutil3070ap220272rtnet3070ap,rt3070ap,Live0xbf037000

ov965088510-Live0xbf02e000

snd_soc_gec210_wm896030840-Live0xbf01c000

snd_soc_wm8960197921snd_soc_gec210_wm8960,Live0xbf011000

D.卸载原有的驱动

rmmodled_drv/buzzer_drv/gec210_beep

(3)应用程序的使用

./led_test

报错:

./led_test

Usage:

./led_test

led_no=0,1,2,3

test1.c:

把LED和蜂鸣器的驱动加载,使用自带的应用程序进行控制

2.5写代码控制驱动对应的硬件

(1)LED灯

A.打开对应的设备文件:

/dev/leds

B.控制灯的状态

ioctl(led_fd,1,led_namb);

参数2:

灯的状态1亮0灭

参数3:

灯的序号0/1/2/3

C.关闭对应的文件描述符

test2-1:

完成的流水灯的设计。

(10次)

sleep

(1);==》1s

usleep(1000*1000);==》1us(1s)

(2)蜂鸣器

A.打开对应的设备文件:

/dev/beep_drv

B.控制灯的状态

ioctl(fd,GEC210_BEEP_ON);

参数2:

灯的状态1亮0灭

C.关闭对应的文件描述符

test2-1:

完成的流水灯的设计。

sleep

(1);==》1s

usleep(1000*1000);==》1us(1s)

test2-2:

倒车雷达的实现

5s处于安全距离,5s后,进行一级报警(500ms)

再过5s,进入2级报警状态(200ms)

再过5s,进入3级报警状态(50ms)

2.6人机交互

所有的功能的启动、结束:

都是由用户来进行控制。

(人机交互)

2.6.1触摸屏的开发

linux对于常用输入设备,其开发方式都是一样的===>输入子系统(鼠标、键盘、触摸屏...)

2.6.2输入子系统的原理

cat/dev/event0

2.6.3程序设计

输入子系统的设备文件:

/dev/event0

开发说明书(头文件):

input.h

(1)打开硬件对应的设备文件

(2)根据说明书提供的原始数据格式,进行读取操作

structinput_event{

__u16type;

__u16code;

__s32value;

};

(3)根据说明书提供的数据分类,进行拆包处理

原始数据

按住时

type=0x3code=0x0value=653

type=0x3code=0x1value=103

type=0x3code=0x18value=255

type=0x0code=0x0value=0

松开

type=0x3code=0x18value=0

type=0x0code=0x0value=0

A.解决设备类型type

/*

*Eventtypes输入设备当成是event,type的取值围

*/

#defineEV_SYN0x00

#defineEV_KEY0x01//键盘

#defineEV_REL0x02//鼠标

#defineEV_ABS0x03//触摸屏

B.解决某一个设备下的动作types_code

#defineSYN_REPORT0

#defineSYN_CONFIG1

#defineSYN_MT_REPORT2

#defineSYN_DROPPED3

#defineREL_X0x00

#defineREL_Y0x01

#defineREL_Z0x02

#defineABS_X0x00X坐标

value<==>x的坐标值

#defineABS_Y0x01Y坐标

value<==>y的坐标值

#defineABS_PRESSURE0x18压力值

value:

>0:

正在按压中

=0:

手已经松开了

ts.c:

实现手指按下时,坐标的捕捉及输出

打印的条件:

当压力值为0,手指弹开

test2.c:

利用触摸屏结合硬件驱动,进行点灯控制

2.7音视频的播放

(命令行./main./testmadplay)

(1)音视频播放的原理

数据输入:

音频文件/视频文件

黑匣子(播放器):

madplay/mplayer

数据输出:

LCD,耳机接口

(2)播放音乐

madplay1.mp3

mplayermv.mp4

(3)替换MP4播放器

[rootGEC210xzx]whichmplayer

/bin/mplayer

rm/bin/mplayer

test1:

完成命令行播放音乐和视频

2.8音视频的播放

命令行:

只能同时运行一个可执行文件/一条命令

代码嵌调用命令行:

#include

intsystem(constchar*command);

command:

命令行的写法

video.c

test2.c:

在代码实现音视频的播放

test3.c:

利用触摸屏+音视频播放,实现小型播放器。

(播放音乐、上一首、下一首、暂停播放、继续播放、前进、后退)

2.9U盘下载

(1)数据放入U盘

(2)插入开发板的USB接口

----udevinsertorremove---sda1---add

(3)U盘数据的所在地?

/mnt/udisk

cp1.mp3/

第3章智能家居的具体实现

3.1智能家居整体设计图

智能家居整体功能如图1所示

3.2智能家居C语言程序

#include

#include

#include//openwritereadlseekclose

#include

#include

#include

#include"lcd.h"

#include"api_v4l2.h"

//B.设定人生目标

void*child_fun(void*arg)

{

//定义出存放画面的变量

FreamBufferfreambuf;

unsignedchardata[640*480*3]={0};

while

(1)

{

//3.从缓冲区中去提取数据

linux_v4l2_get_fream(&freambuf);

//4.将YUYV进行转换为RGB:

LCD.C

yuyv_to_rgb24(freambuf.buf,data,640,480);

//5.将RGB数据显示到LCD之上

lcd_draw_bmp_for_buf(0,0,data,640,480);

}

}

voidshow_camera()

{

intx,y;

//1.子功能UI的显示

lcd_draw_bmp(0,0,"/yinshipin/camera.bmp");//800*480

pthread_tchild_name;

pthread_create(&child_name,NULL,child_fun,NULL);

while

(1)

{ts_get_xy(&x,&y);

if(x>599&&x<800&&y>0&&y<160)//继续

{

pthread_create(&child_name,NULL,child_fun,NULL);

}

elseif(x>599&&x<800&&y>159&&y<320)//暂停

{

pthread_cancel(child_name);

}

elseif(x>599&&x<800&&y>319&&y<480)//返回

{

pthread_cancel(child_name);

linux_v4l2_stop_capturing();

break;

}

lcd_draw_bmp(0,0,"/yinshipin/camera.bmp");

}

lcd_draw_bmp(0,0,"/yinshipin/menu.bmp");

}

voidshow_music()

{

char*music_buf[30]={

"/yinshipin/yinyue/1.mp3",

"/yinshipin/yinyue/2.mp3",

"/yinshipin/yinyue/3.mp3",

"/yinshipin/yinyue/4.mp3",

};

lcd_draw_bmp(0,0,"/yinshipin/music.bmp");//800*480

intx,y,count=0;

//1.子功能UI的显示

music_play(music_buf[count]);

while

(1)

{

//2.获取落点坐标

ts_get_xy(&x,&y);

if(x>399&&x<500&&y>299&&y<400)//上一首

{

count--;

if(count<0)count=0;

music_stop(music_buf[count+1]);

music_play(music_buf[count]);

}

elseif(x>599&&x<700&&y>299&&y<400)//下一首

{

count++;

if(count>3)count=3;

music_stop(music_buf[count-1]);

music_play(music_buf[count]);

}

elseif(x>0&&x<100&&y>299&&y<400)//暂停

{

music_pause(music_buf[count]);

}

elseif(x>199&&x<300&&y>299&&y<400)//继续

{

music_continue(music_buf[count]);

}

elseif(x>300&&x<400&&y>400&&y<480)//返回

{

music_stop(music_buf[count]);

lcd_draw_bmp(0,0,"/yinshipin/music.bmp");

break;

}

}

//刷新上一级的UI

lcd_draw_bmp(0,0,"/yinshipin/menu.bmp");

}

voidshow_video()

{

char*video_buf[30]={

"/yinshipin/shipin/1.mp4",

"/yinshipin/shipin/2.mp4",

"/yinshipin/shipin/3.mp4",

};

lcd_draw_bmp(0,0,"/yinshipin/video.bmp");//800*480

intx,y,count=0;

//1.子功能UI的显示

video_play(*video_buf);

while

(1)

{

//2.获取落点坐标

ts_get_xy(&x,&y);

if(x>0&&x<400&&y>239&&y<480)//上一个

{

count--;

if(count<0)count=0;

video_stop(video_buf[count+1]);

video_play(video_buf[count]);

}

elseif(x>399&&x<800&&y>239&&y<480)//下一个

{

count++;

if(count>2)count=2;

video_stop(video_buf[count-1]);

video_play(video_buf[count]);

}

elseif(x>0&&x<250&&y>0&&y<240)//暂停

{

video_pause(video_buf[count]);

}

elseif(x>549&&x<800&&y>0&&y<240)//继续

{

video_continue(video_buf[count]);

}

elseif(x>249&&x<550&&y>0&&y<480)//返回

{

video_stop(video_buf[count]);

lcd_draw_bmp(0,0,"/yinshipin/video.bmp");

break;

}

}

//刷新上一级的UI

lcd_draw_bmp(0,0,"/yinshipin/menu.bmp");

}

 

voidshow_photo()

{

char*photo_buf[10]={

"/yinshipin/tupian/1.bmp",

"/yinshipin/tupian/2.bmp",

"/yinshipin/tupian/3.bmp",

"/yinshipin/tupian/4.bmp",

"/yinshipin/tupian/5.bmp",

"/yinshipin/tupian/6.bmp",

"/yinshipin/tupian/7.bmp",

"/yinshipin/tupian/8.bmp",

"/yinshipin/tupian/9.bmp",

"/yinshipin/tupian/10.bmp"

};

intx,y,count=0;

//1.子功能UI的显示

lcd_draw_bmp(0,0,"/yinshipin/photo.bmp");//800*480

while

(1)

{

//2.获取落点坐标

ts_get_xy(&x,&y);

if(x>0&&x<100&&y>0&&y<480)//上一

{

count--;

lcd_draw_bmp(0,0,photo_buf[count]);

if(count<0)count=0;

}

elseif(x>699&&x<800&&y>0&&y<480)//下一

{

count++;

lcd_draw_bmp(0,0,photo_buf[count]);

if(count>9)count=9;

}

elseif(x>100&&x<700&&y>0&&y<480)//返回

{

break;

}

}

//刷新上一级的UI

lcd_draw_bmp(0,0,"/yinshipin/menu.bmp");

}

voidshow_home()

{

intx,y,d1=0,d2=0,d3=0,d4=0;

//1.子功能UI的显示

lcd_draw_bmp(0,0,"/yinshipin/home.bmp");//800*480

while

(1)

{

//2.获取落点坐标

ts_get_xy(&x,&y);

if(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1