社区导航

 
查看: 939|回复: 4

[原创] 基于Nucleo-F413ZH的生肖图案显示

[复制链接]

225

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-1-7 10:27:02 | 显示全部楼层 |阅读模式
NUCLEO_F413ZH实现RTC实时时钟的帖子中,介绍了一种以OLED屏来实现实时时钟的方法,本贴再介绍一种以串口TFT实现生肖图案的显示方法。
以前受程序存储空间的限制,在不加挂大容量存储器件的情况下要想显示一幅高质量的图片是件困难的事。对于NUCLEO_F413ZH来说这件事容易了许多,因为它的程序存储空间已达1.5M,显示的图片数据完全可以存到程序中,真有那种土豪有钱就任性的味道。
经实际测试,扣除显示程序所占用的空间,以F413的存储空间完全可以承担12幅图像数据的存储任务,其规格为200*200像素16位色彩的格式。至此用F413来进行12生肖的图像显示,可以说是绰绰有余了。图1F413所显示的生肖图案效果。
图片1.png
1  生肖图案显示效果

为便于生肖图案的显示,是将12个生肖图案的数据以头文件方式引入到程序中,相应的说明函数如下:
  1. //  STM32413 + SPI_TFT +12*BMP(200*200*16)  OK
  2. #include "main.h"
  3. #include "font.h"   //显示字符的字模
  4. #include "sh.h"
  5. #include "yj.h"
  6. #include "xg.h"
  7. #include "hz.h"
  8. #include "zs.h"
  9. #include "cn.h"
  10. #include "yh.h"
  11. #include "mt.h"
  12. #include "cl.h"
  13. #include "ss.h"
  14. #include "wm.h"
  15. #include "wy.h"
复制代码
2.2寸串口TFT屏与F413的连接关系如下:
CS   --PB.4
SCK  --PB.3
SDI  --PB.5
DC   --PB.1
REST --PB.0
对于的引脚输出高低电平的定义语句如下:
  1. #define LCD_CS_High()       { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);}
  2. #define LCD_CS_Low()            { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);}
  3. #define LCD_SCK_High()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);}
  4. #define LCD_SCK_Low()            { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);}
  5. #define LCD_SDI_High()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);}
  6. #define LCD_SDI_Low()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);}
  7. #define LCD_DC_High()             { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);}
  8. #define LCD_DC_Low()            { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);}
  9. #define LCD_REST_High()           { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);}
  10. #define LCD_REST_Low()    { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);}
复制代码
为进行TFT屏显示,对GPIO的设置函数为:
  1. void GPIO_Configuration(void)
  2. {
  3.   __HAL_RCC_GPIOB_CLK_ENABLE();  
  4.   GPIO_InitStruct.Pin   = GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_1|GPIO_PIN_0;
  5.   GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;     
  6.   GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  7.   GPIO_InitStruct.Pull  = GPIO_PULLUP;
  8.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  9. }
复制代码
串口TFT屏的初始化函数为:
  1. void Lcd_Init(void)
  2. {
  3.         LCD_REST_Low();
  4.         delay_ms(20);
  5.         LCD_REST_High();
  6.     delay_ms(20);
  7.     LCD_CS_Low();  
  8.         LCD_WR_REG(0xCB);  
  9.     LCD_WR_DATA8(0x39);
  10.     LCD_WR_DATA8(0x2C);
  11.     LCD_WR_DATA8(0x00);
  12.     LCD_WR_DATA8(0x34);
  13.     LCD_WR_DATA8(0x02);
  14.     LCD_WR_REG(0xCF);  
  15.     LCD_WR_DATA8(0x00);
  16.     LCD_WR_DATA8(0XC1);
  17.     LCD_WR_DATA8(0X30);
  18.     LCD_WR_REG(0xE8);  
  19.     LCD_WR_DATA8(0x85);
  20.     LCD_WR_DATA8(0x00);
  21.     LCD_WR_DATA8(0x78);
  22.     LCD_WR_REG(0xEA);  
  23.     LCD_WR_DATA8(0x00);
  24.     LCD_WR_DATA8(0x00);
  25.     LCD_WR_REG(0xED);  
  26.     LCD_WR_DATA8(0x64);
  27.     LCD_WR_DATA8(0x03);
  28.     LCD_WR_DATA8(0X12);
  29.     LCD_WR_DATA8(0X81);
  30.     LCD_WR_REG(0xF7);  
  31.     LCD_WR_DATA8(0x20);
  32.     LCD_WR_REG(0xC0);     //Power control
  33.     LCD_WR_DATA8(0x23);   //VRH[5:0]
  34.     LCD_WR_REG(0xC1);     //Power control
  35.     LCD_WR_DATA8(0x10);   //SAP[2:0];BT[3:0]
  36.     LCD_WR_REG(0xC5);     //VCM control
  37.     LCD_WR_DATA8(0x3e);   //?????
  38.     LCD_WR_DATA8(0x28);
  39.     LCD_WR_REG(0xC7);     //VCM control2
  40.     LCD_WR_DATA8(0x86);   //--
  41.     LCD_WR_REG(0x36);     // Memory Access Control
  42.     LCD_WR_DATA8(0x48);   //C8           //48 68??//28 E8 ??
  43.     LCD_WR_REG(0x3A);   
  44.     LCD_WR_DATA8(0x55);
  45.     LCD_WR_REG(0xB1);   
  46.     LCD_WR_DATA8(0x00);  
  47.     LCD_WR_DATA8(0x18);
  48.     LCD_WR_REG(0xB6);    // Display Function Control
  49.     LCD_WR_DATA8(0x08);
  50.     LCD_WR_DATA8(0x82);
  51.     LCD_WR_DATA8(0x27);  
  52.     LCD_WR_REG(0xF2);    // 3Gamma Function Disable
  53.     LCD_WR_DATA8(0x00);
  54.     LCD_WR_REG(0x26);    //Gamma curve selected
  55.     LCD_WR_DATA8(0x01);
  56.     LCD_WR_REG(0xE0);    //Set Gamma
  57.     LCD_WR_DATA8(0x0F);
  58.     LCD_WR_DATA8(0x31);
  59.     LCD_WR_DATA8(0x2B);
  60.     LCD_WR_DATA8(0x0C);
  61.     LCD_WR_DATA8(0x0E);
  62.     LCD_WR_DATA8(0x08);
  63.     LCD_WR_DATA8(0x4E);
  64.     LCD_WR_DATA8(0xF1);
  65.     LCD_WR_DATA8(0x37);
  66.     LCD_WR_DATA8(0x07);
  67.     LCD_WR_DATA8(0x10);
  68.     LCD_WR_DATA8(0x03);
  69.     LCD_WR_DATA8(0x0E);
  70.     LCD_WR_DATA8(0x09);
  71.     LCD_WR_DATA8(0x00);
  72.     LCD_WR_REG(0XE1);    //Set Gamma
  73.     LCD_WR_DATA8(0x00);
  74.     LCD_WR_DATA8(0x0E);
  75.     LCD_WR_DATA8(0x14);
  76.     LCD_WR_DATA8(0x03);
  77.     LCD_WR_DATA8(0x11);
  78.     LCD_WR_DATA8(0x07);
  79.     LCD_WR_DATA8(0x31);
  80.     LCD_WR_DATA8(0xC1);
  81.     LCD_WR_DATA8(0x48);
  82.     LCD_WR_DATA8(0x08);
  83.     LCD_WR_DATA8(0x0F);
  84.     LCD_WR_DATA8(0x0C);
  85.     LCD_WR_DATA8(0x31);
  86.     LCD_WR_DATA8(0x36);
  87.     LCD_WR_DATA8(0x0F);
  88.     LCD_WR_REG(0x11);    //Exit Sleep
  89.     delay_ms(120);
  90.     LCD_WR_REG(0x29);    //Display on
  91.     LCD_WR_REG(0x2c);
  92. }
复制代码
12生肖的显示函数为:
  1. void show_image(unsigned int x,unsigned int y,unsigned int n)
  2. {   //200*200*16 bit BMP
  3.         unsigned int i,j,k;
  4.         unsigned int da;
  5.         k=0;
  6.         for(i=0;i<200;i++)
  7.         {       
  8.                 LCD_SetCursor(x,y+i);
  9.                 LCD_WriteRAM_Prepare();                                    
  10.                 for(j=0;j<200;j++)
  11.                 {
  12.                         if(n==0) da=gImage_sh[k*2];
  13.                         if(n==1) da=gImage_yj[k*2];
  14.                         if(n==2) da=gImage_xg[k*2];
  15.                         if(n==3) da=gImage_hz[k*2];
  16.                         if(n==4) da=gImage_zs[k*2];
  17.                         if(n==5) da=gImage_cn[k*2];
  18.                         if(n==6) da=gImage_yh[k*2];
  19.                         if(n==7) da=gImage_mt[k*2];
  20.                         if(n==8) da=gImage_cl[k*2];
  21.                         if(n==9) da=gImage_ss[k*2];
  22.                         if(n==10) da=gImage_wm[k*2];
  23.                         if(n==11) da=gImage_wy[k*2];                       
  24.                         da<<=8;
  25.                         if(n==0) da|=gImage_sh[k*2+1];
  26.             if(n==1) da|=gImage_yj[k*2+1];
  27.                         if(n==2) da|=gImage_xg[k*2+1];
  28.             if(n==3) da|=gImage_hz[k*2+1];
  29.                         if(n==4) da|=gImage_zs[k*2+1];
  30.             if(n==5) da|=gImage_cn[k*2+1];
  31.                         if(n==6) da|=gImage_yh[k*2+1];
  32.             if(n==7) da|=gImage_mt[k*2+1];
  33.                         if(n==8) da|=gImage_cl[k*2+1];
  34.             if(n==9) da|=gImage_ss[k*2+1];
  35.                         if(n==10) da|=gImage_wm[k*2+1];
  36.             if(n==11) da|=gImage_wy[k*2+1];
  37.                         LCD_WR_DATA(da);                                       
  38.                         k++;  
  39.                 }
  40.         }
  41. }
复制代码
在主函数main()中,为显示酉鸡年图案的语句为:
LCD_Clear(WHITE);  //清屏
        show_image(20,10,1);//显示酉鸡图案
        // LCD_ShowString(80,220,200,16,16,"2017-1-6");
        // LCD_ShowString(80,260,200,16,16,"   8:30:00");
显示的原始图案如图2所示。
图片2.png
2 酉鸡年图案

此帖出自stm32/stm8论坛

评分

1

查看全部评分


回复

使用道具 举报

638

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2017-1-7 11:57:48 | 显示全部楼层
楼主照片上面的 Nucleo-144 板子不是F413的吧 还带了网口呢。

点评

好眼力, 我去找了 Nucleo-F413ZH 的板子图片还真的没有带网口。  详情 回复 发表于 2017-1-7 17:27

回复 支持 反对

使用道具 举报

668

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-1-7 17:27:44 | 显示全部楼层
cruelfox 发表于 2017-1-7 11:57
楼主照片上面的 Nucleo-144 板子不是F413的吧 还带了网口呢。

好眼力, 我去找了 Nucleo-F413ZH 的板子图片还真的没有带网口。   

回复 支持 反对

使用道具 举报

225

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-1-8 08:49:21 | 显示全部楼层
sorry,在2块板子上都做过图片混了,回来再补上一个图片。

回复 支持 反对

使用道具 举报

225

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-1-8 16:57:13 | 显示全部楼层
更新的图片 IMG_20161213_224940.jpg

回复 支持 反对

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-8-21 21:46 , Processed in 0.335416 second(s), 20 queries , Redis On.

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