电子系统设计与实践报告.docx
- 文档编号:7413732
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:22
- 大小:246.38KB
电子系统设计与实践报告.docx
《电子系统设计与实践报告.docx》由会员分享,可在线阅读,更多相关《电子系统设计与实践报告.docx(22页珍藏版)》请在冰豆网上搜索。
电子系统设计与实践报告
《电子系统设计与实践报告》
院系电气与信息工程学院
专业班级电气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
#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(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 系统 设计 实践 报告