3050|4

1512

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

基于Nucleo-F413ZH的生肖图案显示 [复制链接]

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

此帖出自stm32/stm8论坛

最新回复

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

赞赏

1

查看全部赞赏

点赞 关注(1)
 

回复
举报

1379

帖子

2

TA的资源

五彩晶圆(初级)

沙发
 
楼主照片上面的 Nucleo-144 板子不是F413的吧 还带了网口呢。
此帖出自stm32/stm8论坛

点评

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

回复

662

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
cruelfox 发表于 2017-1-7 11:57
楼主照片上面的 Nucleo-144 板子不是F413的吧 还带了网口呢。

好眼力, 我去找了 Nucleo-F413ZH 的板子图片还真的没有带网口。   
此帖出自stm32/stm8论坛
 
 

回复

1512

帖子

1

TA的资源

五彩晶圆(初级)

4
 
sorry,在2块板子上都做过图片混了,回来再补上一个图片。
此帖出自stm32/stm8论坛
 
 
 

回复

1512

帖子

1

TA的资源

五彩晶圆(初级)

5
 
更新的图片
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表