当前位置:文档之家› 嵌入式系统实验实验报告

嵌入式系统实验实验报告

嵌入式系统实验实验报告一、实验目的1.基本实验.Word 资料搭建PXA270嵌入式LINUX开发软硬件环境;安装LINUX操作系统;安装与配置建立宿主机端交叉编译调试开发环境;配置宿主机 PC 机端的minicom(或超级终端)、TFTP服务、NFS服务,使宿主PC机与PXA270开发板可以通过串口通讯,并开通TFTP 和NFS服务。

2.人机接口键盘驱动;LCD控制;触摸屏数据采集与控制实验;3.应用实验完成VGA显示;Web服务器实验;网络文件传输实验;多线程应用实验。

4.扩展应用实验完成USB摄像头驱动与视频采集;GPS实验;GSM/GPRS通讯;视频播放移植;USB蓝牙设备无线通讯;NFS文件服务器;蓝牙视频文件服务器。

5.QT实验完成基本嵌入式图形开发环境搭建;“Hello world!”QT初探;创建一个窗口并添加按钮;对象通信:Signal和Slot;菜单和快捷键;工具条和状态栏;鼠标和键盘事件;对话框;QT的绘图;俄罗斯方块;基于QT的GSM手机在嵌入式LINUX下的设计与实现。

二、实验内容1.人机接口实验实验十九键盘驱动实验▪实验目的:矩阵键盘驱动的编写▪实验内容:矩阵键盘驱动的编写▪作业要求:完成键盘加减乘除运算▪实验作业源码及注释:#INCLUDE<STDIO.H>#INCLUDE<STRING.H>#INCLUDE<STDLIB.H>#INCLUDE<FCNTL.H>#INCLUDE<UNISTD.H>#INCLUDE<MATH.H>#DEFINE DEVICE_NAME “/DEV/KEYBOARD”INT MAIN(VOID){INT FD;INT RET;UNSIGNED CHAR BUF[1];INT I,F,J;DOUBLE X;INT A[2]={0};CHAR PRE_SCANCODE=0XFF;FD=OPEN(DEVICE_NAME,O_RDWR);IF(FD==-1)PRINTF(“OPEN DEVICE %S ERROR\N”,DEVICE_NAME);ELSE{BUF[0]=0XFF;I=0;F=0;WHILE(1){READ(FD,BUF,1);.Word 资料IF(BUF[0]!=PRE_SCANCODE) //判断是否放开按键IF(BUF[0]!=0XFF){ //判断是否键入PRE_SCANCODE=BUF[0];USLEEP(50000);SWITCH(BUF[0]){CASE 0X12:{ //按下ENTERSWITCH(F){ //判断运算符CASE1:{J=I;I=(I+1)%2;X=A[I]+A[J];PRINTF(“%D+%D=%D”, A[I],A[J],X);BREAK;}//加法CASE 2:{J=I;I=(I+1)%2;X=A[I]-A[J];PRINTF(“%D-%D=%D”,A[I],A[J],X);BREAK;}//减法CASE3:{J=I;I=(I+1)%2;X=A[I]*A[J];PRINTF(“%D*%D=%D”,A [I],A[J],X);BREAK;}//乘法CASE4:{J=I;I=(I+1)%2;X=A[I]/A[J];PRINTF(“%D/%D=%D”,A [I],A[J],X);BREAK;}//除法DEFAUIT:}F=0;BREAK;}CASE 0X13:{F=1;I=(I+1)%2;BREAK;} //键入运算符CASE 0X14:{F=2;I=(I+1)%2;BREAK;}CASE 0X15:{F=3;I=(I+1)%2;BREAK;}CASE 0X16:{F=4;I=(I+1)%2;BREAK;}DEFAULT:A[I]=BUF[0]; //存入数据}}}RET=CLOSE(FD);}RETURN 0;}▪实验结果:实验效果图实验二十LCD控制实验▪实验目的:了解LCD的基本原理▪实验内容:使用总线方式驱动LCD模块,体会与QT下LCD显示的差别.Word 资料▪作业要求:在目标板的LCD上显示彩色竖条纹或彩色圆环。

▪实验作业源码及注释:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <fcntl.h> // open() close()#include <unistd.h> // read() write()#define DEVICE_NAME "/dev/fb"#define VERSION "PXA2700EP-LCD-V1.00-060530" void showversion(void){printf("*********************************************\n"); printf("\t %s \t\n", VERSION);printf("*********************************************\n\n"); }int main(void){int fd;int ret;int i,j,r,R;unsigned short buf[640*480];showversion();printf("\nstart test_lcd test\n\n");fd = open(DEVICE_NAME, O_RDWR);printf("fd = %d\n",fd);if (fd == -1){printf("open device %serror\n",DEVICE_NAME);}else{for(i=0;i<640*480;i++){buf[i]=0x0001;}ret=write(fd,buf,sizeof(buf));usleep(500000);close(fd);fd = open(DEVICE_NAME, O_RDWR);//竖条纹算法:通过横坐标分布进行填色for(r=0;r<640*480;r++){i=r%640;if(i>=0&&i<60)buf[r]=0x0001;if(i>=60&&i<120)buf[r]=0xf800;if(i>=120&&i<180)buf[r]=0x07ef;if(i>=180&&i<240)buf[r]=0x001f;if(i>=240&&i<300)buf[r]=0xffe0;if(i>=300&&i<360)buf[r]=0x07ff;if(i>=360&&i<420)buf[r]=0xf81f;if(i>=420&&i<=480)buf[r]=0xffff;}/*.Word 资料//圆环算法:通过离圆心半径分布进行填色for(r=0;r<640*480;r++){i=r%640;j=r/640;R=(i-320)*(i-320)+(j-480)*(j-480);if(R>=0&&R<2500)buf[r]=0x0001;if(R>=2500&&R<10000)buf[r]=0xf800;if(R>=10000&&R<22500)buf[r]=0x07ef;if(R>=22500&&R<40000)buf[r]=0x001f;if(R>=40000&&R<62500)buf[r]=0xffe0;if(R>=62500&&R<90000)buf[r]=0x07ff;if(R>=90000&&R<122500)buf[r]=0xf81f;if(R>=122500&&R<=160000)buf[r]=0xffff;}*/ret=write(fd,buf,sizeof(buf));getchar();}return 0;}▪实验结果:实验效果图实验二十一触摸屏数据采集与控制▪实验目的:通过实验掌握触摸屏的设计与控制方法▪实验内容:编程实现触摸屏到LCD坐标的校准以及坐标采集和计算随着使用电脑作为信息来源的与日俱增,触摸屏以其易于使用、坚固耐用、反应速度快、节省空间等优点,使得系统设计师们越来越多的感到使用触摸屏的确具有相当大的优越性。

通过此试验,我们学习了触摸屏原理,并通过编写测试程序验证了触摸屏的工作过程。

学习它,掌握它是非常必要的。

2.应用程序实验实验二十二VGA显示实验▪实验目的:了解VGA接口的标准和特点▪实验内容:编程实现图像通过VGA接口在显示器上输出通过本实验的操作,VGA设备成功启动,在液晶屏和显示器上可以看到完全同步的画面。

由于两者格式和刷新频率的差别,实验中做了折中处理,可能显示效果没有达到最优。

实验二十三Web服务器实验▪实验目的:学习在PXA270开发板上的SOCKET网络编程▪实验内容:SOCKET进行通讯编程学习使用socket 进行通讯编程的过程,了解一个实际的网络通讯应用程序整体设计,阅读HTTP协议的相关内容,学习几个重要的网络函数的使用方法。

读懂HTTPD.C源代码。

在此基础上增加一些其他功能。

在宿主PC机上使用浏览器测试嵌入式WEB 服务器的功能。

通过此实验,我们实现了嵌入式Web服务器的基本功能。

.实验二十五多线程应用实验▪实验目的:学习PTHREAD 库函数的使用▪实验内容:熟悉PTREAD库函数的使用,掌握共享锁和信号量的使用方法。

▪作业要求:利用多线程技术实现键盘控制在LCD液晶屏上显示的可移动的图形。

▪实验作业源码及注释:#include <stdio.h>#include <stdlib.h>#include <time.h>#include "pthread.h"#include <fcntl.h> // open() close()#include <unistd.h> // read() write()#include <math.h>#define DEVICE_NAME "/dev/fb"#define BUFFER_SIZE 16struct prodcons {int buffer[BUFFER_SIZE]; /* the actual data */pthread_mutex_t lock; /* mutex ensuringexclusive access to buffer */int readpos, writepos; /* positions for readingand writing */pthread_cond_t notempty; /* signaled whenbuffer is not empty */pthread_cond_t notfull; /* signaled when bufferis not full */};void init(struct prodcons * b)Word 资料{pthread_mutex_init(&b->lock, NULL);pthread_cond_init(&b->notempty, NULL);pthread_cond_init(&b->notfull, NULL);b->readpos = 0;b->writepos = 0;}void put(struct prodcons * b, int data){pthread_mutex_lock(&b->lock);while ((b->writepos + 1) % BUFFER_SIZE == b->readpos) {printf("wait for not full\n");pthread_cond_wait(&b->notfull, &b->lock);}b->buffer[b->writepos] = data;b->writepos++;if (b->writepos >= BUFFER_SIZE) b->writepos = 0;pthread_cond_signal(&b->notempty);pthread_mutex_unlock(&b->lock);}int get(struct prodcons * b){int data;pthread_mutex_lock(&b->lock);while (b->writepos == b->readpos) {printf("wait for not empty\n");.Word 资料pthread_cond_wait(&b->notempty, &b->lock);}data = b->buffer[b->readpos];b->readpos++;if (b->readpos >= BUFFER_SIZE) b->readpos = 0;pthread_cond_signal(&b->notfull);pthread_mutex_unlock(&b->lock);return data;}struct prodcons buffer;//键盘输入线程void * producer(void * data){int fd;int ret;unsigned char buf[2] ;// int i;// double x;char pre_scancode = 0x44;fd = open("/dev/keypad", O_RDWR);// printf("fd = %d\n",fd);if (fd == -1) {printf("open device %serror\n",DEVICE_NAME);}else {buf[0]=0x22;while (1) {read (fd,buf,1);if(buf[0]!= pre_scancode){if(buf[0]!=0x44){printf("key=%x\n",buf[0]);put(&buffer, buf[0]);}}pre_scancode = buf[0];// sleep(1);usleep(50000);}// closeret = close(fd);// printf ("ret=%d\n",ret);// printf ("close keypad_driver test\n");}}//LCD显示线程void * consumer(void * data){int d;int ret;int fd;int i;int j;unsigned short buf[640*480];fd = open("/dev/fb", O_RDWR);.Word 资料 if (fd == -1){printf("open device %serror\n",DEVICE_NAME);}else{while(1){d = get(&buffer);printf("get num is %d\n", d);for(i=0;i<d;i++)for(j=640*480*i/d;j<640*480*(i+1)/d;j++)buf[j]=0x0001+i*1000;ret=write(fd,buf,sizeof(buf));ret = close(fd);ret = open("/dev/fb", O_RDWR);}}}int main(void){pthread_t th_a, th_b;void * retval;init(&buffer);pthread_create(&th_a, NULL, producer, 0);pthread_create(&th_b, NULL, consumer, 0);/* Wait until producer and consumer finish. */ pthread_join(th_a, &retval);pthread_join(th_b, &retval);return 0;}▪实验结果:实验效果图.实验效果图3.扩展应用实验实验二十六扩展应用实验▪实验目的:了解摄像头驱动程序,学习视频采集▪实验内容:进行视频采集▪实验结果:Word 资料实验效果图实验二十七GPS实验▪实验目的:在LINUX下接收GPS模块信息▪实验内容:接受GPS原始信息▪实验结果:实验效果图实验二十八GSM/GPRS通讯实验.Word 资料▪实验目的:掌握GSM/GPRS基本概念▪实验内容:测试GSM/GPRS膜酷似是否工作;读取SIM 卡的ID,拨打电话测试,接受电话测试,发送接受短信息。

相关主题