} */ }
return 0; }
? 实验结果:
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();
实验效果图
实验二十一
触摸屏数据采集与控制
? 实验目的:通过实验掌握触摸屏的设计与控制方法
? 实验内容:编程实现触摸屏到LCD坐标的校准以及坐标采集和计算
随着使用电脑作为信息来源的与日俱增,触摸屏以其易于使用、坚固耐用、反应速度快、节省空间等优点,使得系统设计师们越来越多的感到使用触摸屏的确具有相当大的优越性。通过此试验,我们学习了触摸屏原理,并通过编写测试程序验证了触摸屏的工作过程。学习它,掌握它是非常必要的。
2.应用程序实验
实验二十二
VGA显示实验
? 实验目的:了解VGA接口的标准和特点
? 实验内容:编程实现图像通过VGA接口在显示器上输出
通过本实验的操作,VGA设备成功启动,在液晶屏和显示器上可以看到完全同步的画面。由于两者格式和刷新频率的差别,实验中做了折中处理,可能显示效果没有达到最优。 实验二十三
Web服务器实验
? 实验目的:学习在PXA270开发板上的SOCKET网络编程 ? 实验内容:SOCKET进行通讯编程
学习使用socket 进行通讯编程的过程,了解一个实际的网络通讯应用程序整体设计,阅读HTTP协议的相关内容,学习几个重要的网络函数的使用方法。读懂HTTPD.C源代码。在此基础上增加一些其他功能。在宿主PC机上使用浏览器测试嵌入式WEB服务器的功能。
通过此实验,我们实现了嵌入式Web服务器的基本功能。 实验二十五
多线程应用实验
? 实验目的:学习PTHREAD 库函数的使用
? 实验内容:熟悉PTREAD库函数的使用,掌握共享锁和信号量的使用方法。 ? 作业要求:利用多线程技术实现键盘控制在LCD液晶屏上显示的可移动的图形。 ? 实验作业源码及注释:
#include
#include
#define DEVICE_NAME \#define BUFFER_SIZE 16 struct prodcons {
int buffer[BUFFER_SIZE]; /* the actual data */
pthread_mutex_t lock; /* mutex ensuring exclusive access to buffer */
int readpos, writepos; /* positions for reading and writing */ pthread_cond_t notempty; /* signaled when buffer is not empty */ pthread_cond_t notfull; /* signaled when buffer is not full */ };
void init(struct prodcons * b) {
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(\
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(\ 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(\ // printf(\ if (fd == -1) { printf(\ }
else { buf[0]=0x22; while (1) { read (fd,buf,1); if(buf[0]!= pre_scancode)
{ if(buf[0]!=0x44) { printf(\ put(&buffer, buf[0]); } } pre_scancode = buf[0]; // sleep(1); usleep(50000); } // close ret = close(fd); // printf (\ // printf (\ } }
//LCD显示线程
void * consumer(void * data) {
int d; int ret; int fd; int i; int j; unsigned short buf[640*480];
fd = open(\ if (fd == -1) {
printf(\ } else { while(1) { d = get(&buffer); printf(\ for(i=0;i } } 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; } ? 实验结果: 实验效果图