TFTLCD2.8寸液晶屏实验LCD_Fill();的使用

2019-10-15 03:10发布

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"        
int main(void)
{         
        
         double x=0,y=0,j,i;
        u8 lcd_id[12];                        
        delay_init();                              
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        
        uart_init(115200);                 
         LED_Init();                             
        LCD_Init();
        POINT_COLOR=RED;
        sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);        
        LCD_Clear(WHITE);         
          while(1)
        {                 
                u16 color[5]={BLUE,BLACK,RED,MAGENTA,WHITE};
                POINT_COLOR=BRED;
                LCD_ShowString(30,40,210,24,24,"WarShip STM32 ^_^");
                LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
                LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
                 LCD_ShowString(30,110,200,16,16,lcd_id);               
                LCD_ShowString(30,130,200,12,12,"2014/5/4");
    LCD_ShowNum(30,150,x,3,24);        
                POINT_COLOR=RED;
    LCD_Draw_Circle(60,160,20);
   // LCD_Fill(0,0,240,320,color[3]);                
               
                if(x==0)
                {
                        for(i=0;i<240;i++)
                        {
                   delay_ms(100);
                   LCD_Clear(WHITE);
                               x++;
                                y=(4/3)*x ;
                   LCD_Fill(0,0,x,y,color[3]);         
                        }
                }
                if(x==240)
                {
                for(i=x;i>0;i--)
                {
                delay_ms(100);
                LCD_Clear(WHITE);
                        x--;
                        y=(4/3)*x;

                LCD_Fill(0,0,x,y,color[3]);         
                }
         }
               

                LED0=!LED0;                                                   
                delay_ms(100);        

        }
}

1. 想用这个函数从左上角坐标(0,0)开始逐渐铺满整个2.8寸液晶屏(也就是对角线坐标(sx,sy)==(0,0)——>(ex,ey) ==(240,320))。
2. 因为2.8寸液晶屏分辨率为320 x 240,则 240/320=x/y 推出 y=(4/3)*x。也就是说x=x+1  y=(4/3)*(x+1),最后 x 加到240,那么 y=(4/3)*240=320。这个过程就是随着 x 增加填充的颜 {MOD}块就逐渐铺开直到铺满全屏。
3. 问题:最后的实验结果是 屏幕 x轴方向 铺满,但 y轴方向 只铺到240的位置。请问原子哥这是为什么????


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
闪电之舞
1楼-- · 2019-10-15 05:28
我感觉可能是数据类型的问题吧     4*x/3你试试
正点原子
2楼-- · 2019-10-15 08:57
 精彩回答 2  元偷偷看……
旺旺佳
3楼-- · 2019-10-15 12:30
正点原子 发表于 2016-8-17 21:45
仿真,看看LCD_Fill传入的y值,是否有超过240的时候

1.仿真试过了y值不超过240。
2.后来我又实验几次,发现 当 y=(4/3)*x 时  x=y;当 y=(1/2)*x 时 y 不随 x变化。也就是说红 {MOD}括号里的小数位被舍弃了。
3.后来我想是不是数据类型的问题,把u16 x=0,y=0; 改成 double x=0,y=0; 可是还是不正确。
请问原子哥这问题出在了哪
正点原子
4楼-- · 2019-10-15 16:43
旺旺佳 发表于 2016-8-19 11:21
1.仿真试过了y值不超过240。
2.后来我又实验几次,发现 当 y=(4/3)*x 时  x=y;当 y=(1/2)*x 时 y 不随  ...

不超过240,怎么可能填充240以上的y坐标?
旺旺佳
5楼-- · 2019-10-15 20:27
正点原子 发表于 2016-8-24 23:17
不超过240,怎么可能填充240以上的y坐标?

我的意思,y不随x的变化到320.
实际给他   LCD_Fill(240,320,x,y,color[3]); 这样是可以实现全屏填充的。但是用表达式 y=(4/3)*x 的y不会超过240,如果y=2*x 这时y可以超过240.
正点原子
6楼-- · 2019-10-15 22:42
y=(4/3)*x 的y不会超过240
自己去仿真找问题。

一周热门 更多>