OpenEdv-开源电子网

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

学习STM32笔记 玩TFT屏 第二季

[复制链接]

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2012-6-21 01:40:33 | 显示全部楼层 |阅读模式
 

好了,昨天我们学习了如何得到屏的型号,然后写了初始化代码.
然后............

我们得到了一个很花的屏.里边的颜色什么都有,就象很久很久以前的显像管彩电没信号一样.

别怕,那就对了,初始化完了,我们下来的工作就要抹掉那些乱七八糟的东东,画上一块统一颜色.

我们学到现在,对于显屏,不外呼就是先找到屏里的像素地址,然后输入这一点的的数据.就成了.

OLED输入一个数据决定8个点的情况(要画点或抹掉点),因为OLED的地址X坐标一个是点阵形式,Y坐标是行(页).这是以前LCD屏技术的一个延伸.我们对得这样的屏多了.
反而对新事物就比较难接受了,现在TFT屏XY坐标都是点陈的形式.本来屏就得用点阵的形式来做地址的.但小屏为了写程式员好过一点才分成行的形式(必竟小屏显示的东东不多)
好了,TFT显示还是那两板斧,找到行地址,然后找到列地址,然后写一个16位的数据来决定这一点的颜色.(比OLED好理解决多了)

昨天我们写的读写TFT屏的的寄存器代码:

//写寄存器
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
LCD_WR_REG(LCD_Reg);  
LCD_WR_DATA(LCD_RegValue);       
}

今天用上了.

看到没有,TFT屏的命令模式都是先 放上寄存器地址,然后再放上要存放在这个寄存器里的数据,比方说你要找一个人办事,得先找到这个人,再将要办的事(数据)交给他.

如下这个代码:

LCD_WriteReg(0x0020,XXXX);  //X
 (XXXX代表的0至239)  0x0020代表指令R32  指令R32是地址设置的指令

LCD_WriteReg(0x0021,YYYY);  //Y
( YYYY 代表的0至319)  0x0021代表指令R33  指令R33是地址设置的指令

然后,写入命令  意思是说上边的XY坐标已经给你了,我要写入数据了.
LCD_WR_REG(0x22);

0x22是R34号指令.这个指令是这么多指令中唯一的一个不用后边跟数据的的指令,所以直接写指令函数LCD_WR_REG就得了,不用用函数LCD_WriteReg来表达.

然后用我们自己写的写数据函数丢进数据说明这一点的颜色

LCD_WR_DATA(ZZZZ);

ZZZZ是一个16位的二进制数.底5位是蓝色的值,中间6位是绿色的值,最高5位是红色的值,值越大颜色越深.

好了:

LCD_WriteReg(0x0020,XXXX);  //X
LCD_WriteReg(0x0021, YYYY );  //Y
LCD_WR_REG(0x22);
LCD_WR_DATA(ZZZZ);

以上4行就是 在X,Y点  画一个颜色为ZZZZ值的点 的意思.   这样好明白了吧.

好,我们将昨天写的代码中的MAIN()函数改一下,丢进板子试一下.
代码如下:

int main(void)
{
  u16 i,j,k,FOX[5]={0x001F,0XF81F,0XFFE0,0X07FF,0xF800};
  
  Stm32_Clock_Init(9);
  delay_init(72);
  uart_init(72,9600);
  LCD_IO_Init();
  LCD_init();

//  LCD_WriteReg(0x0007, 0x0);
//  LCD_WriteReg(0x0007, 0x0173); //26万色显示开启
 
  while (1) 
    {   
   
for (k=0;k<5;k++)
{
for (i=0;i<320;i++)
{
for (j=0;j<240;j++)
{

LCD_WriteReg(0x0020,j);  //X
LCD_WriteReg(0x0021,i);  //Y

LCD_WR_REG(0x22);

LCD_WR_DATA(FOX[k]);

    delay_ms(1);   
}
      }
 }
}

FOX[5]={0x001F,0XF81F,0XFFE0,0X07FF,0xF800}  <====代表五种颜色的值.

丢进板子,叮叮叮叮~~~~~~~~~~~~~~~~~~~~~

看到没有,先是蓝色(值是0x001F)从屏的上方从左到右,一直画下来,这样,我们就清楚我们的屏子的顶在那里,底的在那里了!!
如要刷快点,将delay_ms(1); 注释掉.那屏就刷得哗哗的.但可能我们还不满意,还是觉得慢了,这个不怕,后几季我们想办法将它刷快点.

PS:  加上delay_ms(1);  主要是给我们看点是怎么样画上去的,从那里开始.画得太快我们没反应过来.

哈哈,我们的TFT就玩进门了.

好,下一季,我们要试一下这几行代码:

#define LCD_CS_SET  GPIOC->BSRR=1<<9    //片选端口          PC9
#define LCD_RS_SET GPIOC->BSRR=1<<8    //数据/命令            C8    
#define LCD_WR_SET GPIOC->BSRR=1<<7    //写数据    PC7
#define LCD_RD_SET GPIOC->BSRR=1<<6    //读数据    PC6
    
#define LCD_CS_CLR  GPIOC->BRR=1<<9     //片选端口          PC9
#define LCD_RS_CLR GPIOC->BRR=1<<8     //数据/命令            C8    
#define LCD_WR_CLR GPIOC->BRR=1<<7     //写数据    PC7
#define LCD_RD_CLR GPIOC->BRR=1<<6     //读数据    PC6


是来搞什么东东的,因为我们上两季都没用到.
我的工作就是天天在玩
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-21 08:51:48 | 显示全部楼层
你没用到的这个代码,就是让刷屏变快的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

187

主题

324

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1123
金钱
1123
注册时间
2012-6-4
在线时间
120 小时
发表于 2012-6-21 09:12:14 | 显示全部楼层
原子哥不厚道,楼主本来准备下一节慢慢讲解的,你却提前泄露了天机!
回复 支持 反对

使用道具 举报

187

主题

324

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1123
金钱
1123
注册时间
2012-6-4
在线时间
120 小时
发表于 2012-6-21 09:12:57 | 显示全部楼层
原子哥不厚道,楼主本来准备下一节慢慢讲解的,你却提前泄露了天机!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-21 09:34:05 | 显示全部楼层
......
回复 支持 反对

使用道具 举报

59

主题

189

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
金钱
451
注册时间
2012-4-11
在线时间
1 小时
发表于 2012-6-21 14:05:08 | 显示全部楼层
楼主这种讲解方式挺好的!!顶!!!!!!!!
回复 支持 反对

使用道具 举报

5

主题

107

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
金钱
276
注册时间
2011-10-24
在线时间
33 小时
发表于 2012-6-21 23:59:27 | 显示全部楼层
顶。。。。
回复 支持 反对

使用道具 举报

102

主题

318

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1876
金钱
1876
注册时间
2011-12-21
在线时间
545 小时
发表于 2012-6-22 09:03:07 | 显示全部楼层
支持楼主
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-5-7
在线时间
8 小时
发表于 2012-6-22 13:15:39 | 显示全部楼层
我也觉得了楼主的讲解方式很容易理解
耐心做事,好好做人。O(∩_∩)O!
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-5-7
在线时间
8 小时
发表于 2012-6-22 14:29:38 | 显示全部楼层
楼主,我们的屏幕不知道为何没反应
耐心做事,好好做人。O(∩_∩)O!
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-5-7
在线时间
8 小时
发表于 2012-6-22 16:30:57 | 显示全部楼层
呵呵,找到原因了
耐心做事,好好做人。O(∩_∩)O!
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2012-8-25 13:35:39 | 显示全部楼层
很好 mark
回复 支持 反对

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2012-10-29
在线时间
0 小时
发表于 2012-11-5 18:40:29 | 显示全部楼层
为什么我放进去板子去什么都没显示呢?就显示白屏
回复 支持 反对

使用道具 举报

76

主题

355

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2012-9-19
在线时间
5 小时
发表于 2012-11-5 20:08:07 | 显示全部楼层

快速模式。 采用宏定义。他只执行宏。不进函数里。这样会起到速度提高。但是也有个不好的地方那个。那就是一旦函数有毛病。宏不报错

具有资深STM32点灯技术,
回复 支持 反对

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2013-1-11
在线时间
12 小时
发表于 2013-1-19 23:36:22 | 显示全部楼层
回复【楼主位】chinafox:
---------------------------------
真心感谢楼主
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2012-12-31
在线时间
3 小时
发表于 2013-1-26 18:06:49 | 显示全部楼层
楼主啊 !为什么我的ID读出来了   初始化始终没有反应呢
回复 支持 反对

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-1-20
在线时间
50 小时
发表于 2013-4-9 20:47:31 | 显示全部楼层
看楼主的帖子,真是受益匪浅!感觉思路很清晰
回复 支持 反对

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
 楼主| 发表于 2013-4-10 07:50:15 | 显示全部楼层
看来偶有一颗教书的心^_^
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

12

主题

432

帖子

0

精华

高级会员

Rank: 4

积分
729
金钱
729
注册时间
2012-6-21
在线时间
59 小时
发表于 2013-4-10 08:22:53 | 显示全部楼层
谢谢。
回复 支持 反对

使用道具 举报

9

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2013-2-5
在线时间
18 小时
发表于 2013-4-10 12:18:42 | 显示全部楼层
说好的下一季呢
话说我有严重的拖延症,怎样才能不做事不拖拖拉拉的呢...
回复 支持 反对

使用道具 举报

17

主题

466

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2164
金钱
2164
注册时间
2013-1-11
在线时间
510 小时
发表于 2013-7-9 23:05:47 | 显示全部楼层
楼主教的不错
知识是你最好的财富
回复 支持 反对

使用道具 举报

8

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-8-11
在线时间
0 小时
发表于 2013-8-16 10:15:06 | 显示全部楼层
顶顶顶顶!!!!!!
回复 支持 反对

使用道具 举报

18

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2013-2-4
在线时间
214 小时
发表于 2013-11-24 17:02:07 | 显示全部楼层
请问 线是不是画的很细?
回复 支持 反对

使用道具 举报

34

主题

127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1067
金钱
1067
注册时间
2012-1-7
在线时间
157 小时
发表于 2013-12-10 23:45:48 | 显示全部楼层
回复【4楼】51921866:
---------------------------------
哈哈哈,原子哥无语了
回复 支持 反对

使用道具 举报

34

主题

127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1067
金钱
1067
注册时间
2012-1-7
在线时间
157 小时
发表于 2013-12-10 23:46:43 | 显示全部楼层
回复【14楼】敌害:
---------------------------------
还有,宏定义很占空间内存啊
回复 支持 反对

使用道具 举报

76

主题

355

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2012-9-19
在线时间
5 小时
发表于 2013-12-23 09:50:11 | 显示全部楼层
回复【25楼】天涯水乡:
--------------------------------
占用的是FLASH
你的程序都放在FLASH里的
具有资深STM32点灯技术,
回复 支持 反对

使用道具 举报

74

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2014-1-8
在线时间
7 小时
发表于 2014-3-23 10:40:43 | 显示全部楼层
回复【楼主位】chinafox:
---------------------------------
请问楼主,第一季在哪里,我想知道“好了,昨天我们学习了如何得到屏的型号,然后写了初始化代码.
然后............”这部分内容,能给一下吗?谢谢了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-23 10:58:10 | 显示全部楼层
回复【31楼】MTFQ:
---------------------------------
论坛搜索。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-4-23
在线时间
0 小时
发表于 2014-8-1 20:23:00 | 显示全部楼层
感觉真心学到好多东西!谢谢各位老师!
都只为不负青春
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-4 10:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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