嵌入式第五次课

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

学号:140201225             姓名:刘曦洋

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

一、实验目的:

1、了解触摸屏原理。

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

二、实验内容:

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

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

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

实验原理:

触摸屏硬件连接图:

管脚对应关系:

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

T_CS(CT_RST):复位信号;

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

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

触摸屏驱动流程:

LCD接口设置方法:

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

2)初始化GT9147模块。

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

tp_dev数据结构:

实验一代码:

int k=0;

delay_init(168);  //初始化时钟

uart_init(115200);  //初始化串口

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

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

LCD_Clear(WHITE);

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

{

u8 t=0;

u8 i=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]; //将X的坐标放进去

lastpos[t][1] = tp_dev.y[t]; //将Y的坐标放进去

}

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

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

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

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

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

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

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

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

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

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

}

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

}

delay_ms(5);

}

实验二代码:

int k=0;

int main(void)

{

//int k=0;

delay_init(168);  //?????

uart_init(115200);  //?????

LCD_Init();     //??????

tp_dev.init();  //??????

{

GPIO_InitTypeDef GPIO_InitStructure1;

GPIO_InitTypeDef GPIO_InitStructure2;

GPIO_InitTypeDef GPIO_InitStructure3;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStructure1.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_DOWN;

GPIO_Init(GPIOF,&GPIO_InitStructure1);

GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_9;//???GPIOF8??

GPIO_InitStructure3.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_OUT;//????

GPIO_InitStructure2.GPIO_OType = GPIO_OType_PP;//????

GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_100MHz;//GPIO????

GPIO_InitStructure2.GPIO_PuPd = GPIO_PuPd_UP;//???????

GPIO_InitStructure3.GPIO_Mode = GPIO_Mode_OUT;//????

GPIO_InitStructure3.GPIO_OType = GPIO_OType_PP;//????

GPIO_InitStructure3.GPIO_Speed = GPIO_Speed_100MHz;//GPIO????

GPIO_InitStructure3.GPIO_PuPd = GPIO_PuPd_UP;//???????

GPIO_Init(GPIOF,&GPIO_InitStructure2);

GPIO_Init(GPIOF,&GPIO_InitStructure3);

}

LCD_Clear(WHITE);

POINT_COLOR = RED; //?????????

{

u8 t=0;

u8 i=0;

POINT_COLOR = BLACK;

for(i=90;i<=100;i++)

LCD_Draw_Circle(239,50,25);

LCD_DrawLine(39,99,439,99);

LCD_DrawLine(39,99,39,299);

LCD_DrawLine(439,99,439,299);

LCD_DrawLine(39,299,439,299);

for(i=90;i<=100;i++)

LCD_Draw_Circle(239,449,25);

LCD_DrawLine(39,499,439,499);

LCD_DrawLine(39,499,39,699);

LCD_DrawLine(439,499,439,699);

LCD_DrawLine(39,699,439,699);

POINT_COLOR = BLACK;

LCD_ShowString(215,179,200,48,24,"light");

LCD_ShowString(215,579,200,48,24,"sound");

while(1)

{

tp_dev.scan(0);

if(tp_dev.x[t]<439&&tp_dev.x[t]>39&&tp_dev.y[t]>499&&tp_dev.y[t]<699)

{

k=2;

}

if(tp_dev.x[t]<439&&tp_dev.x[t]>39&&tp_dev.y[t]>99&&tp_dev.y[t]<299)

{

k=1;

}

switch(k)

{

case 1:

{

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

{

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

{

while(1){

GPIO_SetBits(GPIOF,GPIO_Pin_9);

delay_ms(100);

GPIO_ResetBits(GPIOF,GPIO_Pin_9);

GPIO_SetBits(GPIOF,GPIO_Pin_10);

delay_ms(100);

GPIO_ResetBits(GPIOF,GPIO_Pin_10);

tp_dev.scan(0);

if(tp_dev.x[t]>439||tp_dev.x[t]<39||tp_dev.y[t]<99||tp_dev.y[t]>299)

{

if(tp_dev.x[t]<439&&tp_dev.x[t]>39&&tp_dev.y[t]>499&&tp_dev.y[t]<699)

{

k=2;

break;

}

if(tp_dev.x[t]<439&&tp_dev.x[t]>39&&tp_dev.y[t]>99&&tp_dev.y[t]<299)

{

k=1;

}

}

}

}

}

}

break;

case 2:

{

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

{

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

{

while(1){

GPIO_SetBits(GPIOF,GPIO_Pin_8);

delay_ms(600);

GPIO_ResetBits(GPIOF,GPIO_Pin_8);

delay_ms(200);

tp_dev.scan(0);

if(tp_dev.x[t]>439||tp_dev.x[t]<39||tp_dev.y[t]<499||tp_dev.y[t]>699)

{

if(tp_dev.x[t]<439&&tp_dev.x[t]>39&&tp_dev.y[t]>499&&tp_dev.y[t]<699)

{

k=2;

}

if(tp_dev.x[t]<439&&tp_dev.x[t]>39&&tp_dev.y[t]>99&&tp_dev.y[t]<299)

{

k=1;

break;

}

}

}

}

}

}

break;

}

}

}

}

四、总结及实验心得:

此次试验一共要完成两个试验。第一个是在屏幕上画线。第二个是做两个按钮,一个是驱动LED,另一个驱动蜂鸣器。

第一个实验是老师带着做的,利用已经打包好的LCD驱动程序,直接初始化LCD。

第二个实验是自己做的。第一次课没有完全做出来,第二次课才完全做出来的。其实第一次课快结束的时候已经快差不多了,只是有两处地方没有修改好。一个是用来切换效果的K。另一个是点亮LED后,判断触屏时间的条件没写对。第一个问题,后再将K设为全局变量才对,这个问题是LED退出判断条件修改完后才发现的。

时间: 2024-10-04 16:58:05

嵌入式第五次课的相关文章

七月算法--12月机器学习在线班-第五次课笔记—回归

七月算法--12月机器学习在线班-第五次课笔记—回归 七月算法(julyedu.com)12月机器学习在线班学习笔记 http://www.julyedu.com

centos lamp/lnmp阶段复习 第二十五节课

centos  lamp/lnmp阶段复习   第二十五节课 上半节课 下半节课 f

centos mysql 优化 第五节课

centos mysql  优化  第五节课 f

centos mysql 优化 第十五节课

centos mysql  优化  第十五节课 f

七月算法-12月机器学习在线班--第十五次课笔记—主题模型

七月算法-12月机器学习--第十五次课笔记—主题模型 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 复习的知识: 1.,Γ函数 是阶乘在实数上的推广,即实数的阶乘 2,Beta分布 Beta分布的概率密度: 其中系数B为: 两者的关系 1,朴素贝叶斯分析 朴素贝叶斯没有分析语意,无法解决语料中一词多义和多词一义的问题,更像是词法的分析,可以 一, 1个词可能被映射到多个主题中——一词多义 二,多个词可能被映射到某个主题的概率很高——多

centos NFS/FTP服务配置 第二十五节课

centos  NFS/FTP服务配置   第二十五节课 上半节课 下半节课 f

一周第五次课(12月15日)

一周第五次课(12月15日)2.1/2.2 系统目录结构2.3 ls命令2.4 文件类型2.5 alias命令 系统目录结构: [[email protected] ~]# lsanaconda-ks.cfg[[email protected] ~]# ls /bin dev home lib64 mnt proc run srv tmp varboot etc lib media opt root sbin sys usr[[email protected] ~]# ls /root//.ss

二周第五次课(12月22日)

二周第五次课(12月22日)2.23/find命令2.24/find命令2.25/ find命令2.26 文件名后缀 其他搜索文件命令: · which搜索文件是从环境变量PATH里找的 · whereis在事先准备好的库里搜索 ·  locate需要安装mlocate包,之后使用updatedb命令生成一下文件列表路径数据库,然后才能搜索. 快捷键: ctrl + l清屏 crtl + d 退出终端 ctrl + c 终止运行或暂停 crtl +u 删除光标前面所有的 crtl + e光标挪到

三周第五次课(12月29日) 4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间

三周第五次课(12月29日)4.5/4.6 磁盘格式化4.7/4.8 磁盘挂载4.9 手动增加swap空间 [[email protected] ~]# [[email protected] ~]# mke2fs命令文件系统管理mke2fs命令被用于创建磁盘分区上的"etc2/etc3"文件系统. 语法:mke2fs(选项)(参数) 选项:-b<区块大小>:指定区块大小,单位为字节:-c:检查是否有损坏的区块:-f<不连续区段大小>:指定不连续区段的大小,单位为