OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8916|回复: 15

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

[复制链接]

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-7-28
在线时间
25 小时
发表于 2016-8-15 17:17:31 | 显示全部楼层 |阅读模式
1金钱
#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 增加填充的颜色块就逐渐铺开直到铺满全屏。
3. 问题:最后的实验结果是 屏幕 x轴方向 铺满,但 y轴方向 只铺到240的位置。请问原子哥这是为什么????


最佳答案

查看完整内容[请看2#楼]

我感觉可能是数据类型的问题吧 4*x/3你试试
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

359

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2014-9-29
在线时间
261 小时
发表于 2016-8-15 17:17:32 | 显示全部楼层
我感觉可能是数据类型的问题吧     4*x/3你试试
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2016-8-17 21:45:37 | 显示全部楼层
仿真,看看LCD_Fill传入的y值,是否有超过240的时候
回复

使用道具 举报

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-7-28
在线时间
25 小时
 楼主| 发表于 2016-8-19 11:21: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变化。也就是说红色括号里的小数位被舍弃了。
3.后来我想是不是数据类型的问题,把u16 x=0,y=0; 改成 double x=0,y=0; 可是还是不正确。
请问原子哥这问题出在了哪
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2016-8-24 23:17:31 | 显示全部楼层
旺旺佳 发表于 2016-8-19 11:21
1.仿真试过了y值不超过240。
2.后来我又实验几次,发现 当 y=(4/3)*x 时  x=y;当 y=(1/2)*x 时 y 不随  ...

不超过240,怎么可能填充240以上的y坐标?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-7-28
在线时间
25 小时
 楼主| 发表于 2016-8-27 21:09:01 | 显示全部楼层
正点原子 发表于 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.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165558
金钱
165558
注册时间
2010-12-1
在线时间
2118 小时
发表于 2016-8-29 00:05:22 | 显示全部楼层
y=(4/3)*x 的y不会超过240
自己去仿真找问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

359

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2014-9-29
在线时间
261 小时
发表于 2016-8-29 08:49:58 | 显示全部楼层
直接用1.33我感觉都行的   为毛你非要弄个4/3
最后算的一直是Y=X
回复

使用道具 举报

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-7-28
在线时间
25 小时
 楼主| 发表于 2016-9-2 21:04:14 | 显示全部楼层
正点原子 发表于 2016-8-29 00:05
y=(4/3)*x 的y不会超过240
自己去仿真找问题。

问题已解决,谢谢原子哥耐心的解答
y=(4/3)*x改成 y=4*x/3就好了
回复

使用道具 举报

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-7-28
在线时间
25 小时
 楼主| 发表于 2016-9-2 21:15:02 | 显示全部楼层
闪电之舞 发表于 2016-8-15 17:17
我感觉可能是数据类型的问题吧     4*x/3你试试

谢谢哥们,你说得对。我试了试C语言中无论是什么数据类型(4/3)都等于1,所以y=(4/3)*x也就等于y=x;写成 y=x*4/3就对。
哎,还是我c语言基础太差
回复

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2016-7-12
在线时间
38 小时
发表于 2016-9-13 16:58:24 | 显示全部楼层
哥们,问你个问题,你学习这个2.8屏是怎么学习的,我都快学了一个星期了,到现在还云里雾里的!
回复

使用道具 举报

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-7-28
在线时间
25 小时
 楼主| 发表于 2016-9-13 21:11:44 | 显示全部楼层
cccsssc 发表于 2016-9-13 16:58
哥们,问你个问题,你学习这个2.8屏是怎么学习的,我都快学了一个星期了,到现在还云里雾里的!

我开始学时也是云里雾里,看着开发指南的那一大堆就懵了
后来发现开发指南中讲了一大堆其实主要就讲了两个原理和两个关系,第一个就是  ILI9341液晶控制器的控制原理;第二个就是  FMSC灵活的静态存储控制器,的控制原理;两个关系就是 ILI9341 控制 TFTLCD的显示,FSMC 控制 ILI9341. 我感觉把这两个原理大概看一下不要想着一遍看懂 和 两个关系搞清楚。然后你就去看实验代码,最后从实验代码里再反过来看原理你会发现,原来不会的豁然开朗!
其实我也学的不是太好,分享一点学习心得希望对你有所帮助。
回复

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2016-7-12
在线时间
38 小时
发表于 2016-9-14 09:33:51 | 显示全部楼层
旺旺佳 发表于 2016-9-13 21:11
我开始学时也是云里雾里,看着开发指南的那一大堆就懵了。
后来发现开发指南中讲了一大堆其实主要就讲 ...

这个已经很好了!非常感谢!
回复

使用道具 举报

12

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-9-20
在线时间
56 小时
发表于 2016-11-11 16:15:17 | 显示全部楼层
楼主、我用的是Mini板,资料里给的TFTLCD例程会按一定的时间去闪烁、我现在想实现不闪烁,或者说闪烁频率高肉眼感觉不到、你有什么解决方案么
回复

使用道具 举报

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-7-28
在线时间
25 小时
 楼主| 发表于 2017-2-13 10:01:22 | 显示全部楼层
Riven丶叮当 发表于 2016-11-11 16:15
楼主、我用的是Mini板,资料里给的TFTLCD例程会按一定的时间去闪烁、我现在想实现不闪烁,或者说闪烁频率高 ...

对不起好长时间没来论坛了,刚刚看到。
这个我还真没碰见过,建议你换个屏试试!不要是因为硬件的问题导致的
回复

使用道具 举报

4

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-7-28
在线时间
25 小时
 楼主| 发表于 2017-2-13 10:01:33 | 显示全部楼层
Riven丶叮当 发表于 2016-11-11 16:15
楼主、我用的是Mini板,资料里给的TFTLCD例程会按一定的时间去闪烁、我现在想实现不闪烁,或者说闪烁频率高 ...

对不起好长时间没来论坛了,刚刚看到。
这个我还真没碰见过,建议你换个屏试试!不要是因为硬件的问题导致的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-24 14:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表