嵌入式第四次课

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();        //初始化LCDFSMC接口

 

//画一个点

LCD_Clear(WHITE);  //里面设置底色

 

POINT_COLOR = BLACK;

LCD_DrawPoint(240,400);   //横坐标不超过299479

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,yR

 

LCD_Clear(WHITE);

 

//参数为X1Y1X2Y2

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坐标。在画完一根直线后,要调整它与下条直线的间距,如果只是保持同距,那么不能出现炫目的效果。

 

 

 

以上是关于嵌入式第四次课的主要内容,如果未能解决你的问题,请参考以下文章

第四次课:参数的传递

五周第四次课(3月8日)

九周第四次课(2月26日)

一周第四次课(12月14日)

五周第四次课(1月11日)?

三周第四次课(2月8日)