我的实验
嵌入式实验报告
嵌入式软件设计第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);
}
}}}
四、总结及实验心得:
在这次实验中,我学到很多东西,加强了我的能力,并且培养了我的独立思考能力。特别是在做实验报告时,因为在做数据处理时出现很多问题,如果不解决的话,将会很难的继续下去。实验过程中培养了我在实践中研究问题,分析问题和解决问题的能力以及培养了良好的工程素质和科学道德,通过这次触摸屏控制器的实验,使我学到了不少实用的知识。更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅。
浙公网安备 33010602011771号