我的实验

嵌入式实验报告

嵌入式软件设计第5次实验报告

 

学号:120201109             姓名:陈瑶

组别:第4组                实验地点:D19

 

一、实验目的:

1、了解触摸屏原理。

2、掌握触摸屏控制器GT9147的驱动方法

二、实验内容:

1.编写程序利用触摸屏在LCD上画线。

2.编写程序点击LCD上显示的按钮,以触发LED灯和蜂鸣器事件。

三、实验过程描述及结果展示:

  LCD接口设置方法

1)设置STM32F4 与触摸屏驱动模块GT9147相连接的IO

2初始化GT9147模块。

3)通过查询方式读取GT9147的寄存器(0X814E)判断是否有有效触点。

触摸屏硬件连接图

 

 

管脚对应关系:

T_PEN(CT_INT):中断输出信号;

T_CS(CT_RST):复位信号;

T_CLK(CT_SCL):IIC接口的SCL信号;

T_MOSI(CT_SDA):IIC接口的SDA信号;

1)实验一:利用触摸屏在LCD上画线

#include "sys.h"

#include "delay.h"  

#include "usart.h"   

#include "led.h"

#include "lcd.h"

#include "key.h"  

#include "touch.h"

#include "text.h"

#include "w25qxx.h"

#include "malloc.h"

#include "ff.h"

#include "exfuns.h"  

const u16 POINT_COLOR_TBL[OTT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};  

int main(void)

{

delay_init(168);//初始化处理器时钟

uart_init(115200);//初始化串行接口 波特率设置为115200

LCD_Init();//初始化夜晶屏

tp_dev.init();//触摸屏初始化

POINT_COLOR=RED;//设置画笔,字体颜色为红色

{

u8 t=0;

u16 lastpos[5][2];//定义二维数组 存放触摸屏数据

while(1)

{

tp_dev.scan(0);//执行触摸屏 初始化

 

for (t=0;t<5;t++)

{

if((tp_dev.sta)&(1<<t))//判断有无触摸按键按下

{

if(tp_dev.x[t]<lcddev.width && tp_dev.y[t]<lcddev.height)

{

  if(lastpos[t][0] == 0xFFFF)

{

 lastpos[t][0] = tp_dev.x[t];//赋值新的触摸坐标点

 lastpos[t][1] = tp_dev.y[t];

}

LCD_DrawLine(lastpos[t][0],lastpos[t][1],tp_dev.x[t],tp_dev.y[t]);

lastpos[t][0]=tp_dev.x[t];//更新坐标点

lastpos[t][1]=tp_dev.y[t];

}

}else lastpos[t][0] = 0xFFFF;

}

delay_ms(5);//延时,控制每轮扫描时间间隔

}

}

}

(2)实验二:利用触摸屏点击LCD上显示的按钮,以触发LED灯和蜂鸣器事件

#include "sys.h"

#include "delay.h"  

#include "usart.h"   

#include "led.h"

#include "lcd.h"

#include "key.h"  

#include "touch.h"

#include "text.h"

#include "w25qxx.h"

#include "malloc.h"

#include "ff.h"

#include "exfuns.h"  

const u16 POINT_COLOR_TBL[OTT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};  

void BEEP_Init(void)

{   

  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟

  //初始化蜂鸣器对应引脚GPIOF8

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉

  GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO

  GPIO_ResetBits(GPIOF,GPIO_Pin_8);  //蜂鸣器对应引脚GPIOF8拉低,

}

void LED_Init(void)

{      

  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

  GPIO_Init(GPIOF, &GPIO_InitStructure);

 

GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);

 

}

u8 ledopen=1,lednow=0;

u8 beepopen=0,beepnow=0;

void ledflash(){

if (!lednow){

GPIO_SetBits(GPIOF,GPIO_Pin_9);

POINT_COLOR=GRED;

LCD_Draw_Circle(120,300,50);

lednow=1;

}else{

GPIO_ResetBits(GPIOF,GPIO_Pin_9);

POINT_COLOR=RED;

LCD_Draw_Circle(120,300,50);

lednow=0;

}

}

void beepflash(){

if (!beepnow){

GPIO_ResetBits(GPIOF,GPIO_Pin_8);

POINT_COLOR=GRED;

LCD_Draw_Circle(360,300,50);

beepnow=1;

}else{

GPIO_SetBits(GPIOF,GPIO_Pin_8);

POINT_COLOR=RED;

LCD_Draw_Circle(360,300,50);

beepnow=0;

}

}

int main(void)

{

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

delay_init(168);  //初始化延时函数

uart_init(115200); //初始化串口波特率为115200

LED_Init();

LCD_Init();

BEEP_Init();

tp_dev.init();

POINT_COLOR=RED;//设置字体为红色  

LCD_ShowString(30,50,200,16,16,"Miao~");

{

u8 t =0;

//u8 i =0;

u16 lastpos[5][2];

//LCD_Draw_Circle(120,400,100);

LCD_Fill(56,348,184,452,BLUE);

Show_Str(96,388,48,24,"灯光",24,1);

//LCD_Draw_Circle(360,400,100);

LCD_Fill(296,348,424,452,BLUE);

Show_Str(336,388,48,24,"喇叭",24,1);

while(1){

if(ledopen){

ledflash();

}

if(beepopen){

beepflash();

}

tp_dev.scan(0);

printf("%d\n",tp_dev.x[0]);

if(tp_dev.x[0]>56&&tp_dev.x[0]<184&&tp_dev.y[0]>=348&&tp_dev.y[0]<452){

ledopen=!ledopen;

lednow=0;

ledflash();

while(tp_dev.x[0]!=65535){tp_dev.scan(0);}

}

if(tp_dev.x[0]>296&&tp_dev.x[0]<424&&tp_dev.y[0]>=348&&tp_dev.y[0]<452){

beepopen=!beepopen;

beepnow=0;

beepflash();

while(tp_dev.x[0]!=65535){tp_dev.scan(0);}

}

delay_ms(50);

}

while(1){

tp_dev.scan(0);

for(t=0;t<5;t++){

if((tp_dev.sta)&(1<<t))

{

if(tp_dev.x[t]<lcddev.width && tp_dev.y[t]<lcddev.height)

{

if(lastpos[t][0] == 0xFFFF)

{lastpos[t][0] = tp_dev.x[t];

 lastpos[t][1] = tp_dev.y[t];}

LCD_DrawLine(lastpos[t][0],lastpos[t][1],tp_dev.x[t],tp_dev.y[t]);

 lastpos[t][0] = tp_dev.x[t];

 lastpos[t][1] = tp_dev.y[t];

}

}else lastpos[t][0]=0xFFFF;//放

delay_ms(5);

}

}}}

 

四、总结及实验心得:

   在这次实验中,我学到很多东西,加强了我能力,并且培养了我的独立思考能力。特别是在做实验报告时,因为在做数据处理时出现很多问题,如果不解决的话,将会很难的继续下去实验过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的工程素质和科学道德通过这次触摸屏控制器的实验使我学到了不少实用的知识更重要的是做实验的过程思考问题的方法这与做其他的实验是通用的真正使我们受益匪浅

 

 

 

 

   

 

posted on 2017-03-10 08:50  陈小瑶  阅读(511)  评论(0)    收藏  举报