嵌入式第四次课
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式第四次课相关的知识,希望对你有一定的参考价值。
嵌入式软件设计第4次实验报告
学号:140201225 姓名:刘曦洋
组别:第1组 实验地点:D19
一、实验目的:
1、了解LCD显示原理。
2、掌握LCD控制器NT35510的驱动方法。
二、实验内容:
1.编写程序在LCD上画点。
2.编写程序在LCD上画直线。
3.编写程序在LCD上画圆。
4.编写程序在LCD上画奥运五环。
5.编写程序在LCD上画一条直线,并且让直线绕中心进行360度旋转。
三、实验过程描述及结果展示:
实验原理
管脚对应关系:
LCD_ BL( 背光控制 )对应 PB0;
LCD_CS 对应 PG12 即 FSMC_NE4 ;
LCD_RS 对应 PF12 即 FSMC_A6;
LCD_WR 对应 PD5 即 FSMC_NWE;
LCD_RD 对应 PD4 即 FSMC_NOE E;
LCD_D[ 15:0 ]则直接连在 FSMC_D15~D0;
LCD驱动流程
LCD接口设置方法
1)设置STM32F4 与TFTLCD 模块相连接的IO。
2)初始化TFTLCD 模块。
3)通过函数将字符和数字显示到TFTLCD 模块上。
前四题代码:
int i,x,y;
float ALF=3.14/180;
delay_init(168); //初始化时钟
uart_init(115200); //初始化串口,波特率设置为115200
LCD_Init(); //初始化LCD的FSMC接口
//画一个点
LCD_Clear(WHITE); //里面设置底色
POINT_COLOR = BLACK;
LCD_DrawPoint(240,400); //横坐标不超过299,479
for(i=100;i<=350;i++)
LCD_DrawPoint(i,400);
for(i=100;i<=400;i++)
LCD_DrawPoint(100,i);
for(i=100;i<=350;i++)
LCD_DrawPoint(i,100);
for(i=100;i<=400;i++)
LCD_DrawPoint(350,i);
LCD_Draw_Circle(240,400,100);//参数依次为(x,y) R
LCD_Clear(WHITE);
//参数为X1,Y1,X2,Y2
LCD_DrawLine(0,0,479,799);
LCD_DrawLine(479,0,0,799);
sinf(3.14/4);
LCD_Clear(WHITE);
POINT_COLOR = BLUE;
for(i=90;i<=100;i++)
LCD_Draw_Circle(150,310,i);
POINT_COLOR = BLACK;
for(i=90;i<=100;i++)
LCD_Draw_Circle(150,530,i);
POINT_COLOR = RED;
for(i=90;i<=100;i++)
LCD_Draw_Circle(240,210,i);
POINT_COLOR = YELLOW;
for(i=90;i<=100;i++)
LCD_Draw_Circle(240,430,i);
POINT_COLOR = GREEN;
for(i=90;i<=100;i++)
LCD_Draw_Circle(240,650,i);
LCD_Clear(WHITE);
第五题画直线束代码:
int x=0;
int y=0;
int x1=0;
int y1=0;
int a=0;
int b=200;
float A;
u8 lcd_id[12]; //存放LCD ID字符串
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LCD_Init(); //初始化LCD FSMC接口
LCD_Display_Dir(1);
LCD_Clear(WHITE);
POINT_COLOR=RED;
LCD_Display_Dir(0);
a=45;
while (1){
A=(a*3.1415926)/180;
x1=467*cosf(A)+240;
y1=400-467*sinf(A);
if(x1>479){ //如果X跨过了右屏幕
x=479;
y=y1+((x1-479)*sinf(A))/cosf(A);
}
if(x1<0){ //如果X跨过了左屏幕
x=0;
y=y1+(x1*sinf(A))/cosf(A);
}
if(y1>799){ //如果Y跨过了下屏幕
y=799;
x=x1+((y1-799)*cosf(A))/sinf(A);
}
if(y1<0){ //如果Y跨过了上屏幕
y=0;
x=x1+((y1)*cosf(A))/sinf(A);
}
POINT_COLOR=RED;
LCD_DrawLine(240,400,x,y);
{a+=20; 改变间距
b--;}
if(a>405){a=b;} //回溯
}
四、总结及实验心得:
此次试验了解了如何在LCD上画点和画圆。在点和圆的基础上利用循环画出直线和同心圆。
其中第五题有些麻烦。具体代码是很简单的。但是难度在于如何计算出超出边界点对应的坐标。一共分四种情况,分别是上溢出,下溢出,左溢出,右溢出。对于右溢出,X设为边界值,再利用几何关系求出Y坐标。对于上溢出,Y设为边界值,再利用几何关系求出X坐标。对于左溢出,X设为边界值,再利用几何关系求出Y坐标。对于右溢出,Y设为边界值,再利用几何关系求出X坐标。在画完一根直线后,要调整它与下条直线的间距,如果只是保持同距,那么不能出现炫目的效果。
以上是关于嵌入式第四次课的主要内容,如果未能解决你的问题,请参考以下文章