[STM32F7] 基于NUCLEO_F767ZI的生肖图案型万年历

[复制链接]
1047|3
 楼主| jinglixixi 发表于 2016-11-16 17:47 | 显示全部楼层 |阅读模式
在NUCLEO_F767ZI实现RTC实时时钟的帖子中,介绍了一种以OLED屏来实现实时时钟的方法,本贴再介绍一种以串行接口TFT屏来实现带生肖图案的万年历实现方法。
以前受程序存储空间的限制,在不加挂大容量存储器件的情况下要想显示一幅高质量的图片是件困难的事。对于NUCLEO_F767ZI来说这件事容易了许多,因为它的程序存储空间已达2M,显示的图片数据完全可以存放到程序中,这完全有种土豪的有钱就可以这么任性的味道。
在该生肖图案型万年历中,每幅生肖图片的规格为200*200像素,以16位色彩的格式来存储,共12幅。
万年历的计时环节则是使用NUCLEO_F767ZI内部的RTC,其运行效果如图1所示。
 楼主| jinglixixi 发表于 2016-11-16 17:50 | 显示全部楼层
图片1.png
图1生肖图案型万年历
由于在前帖中对RTC的用法已做过介绍,这里就不再重复,参见该网址即可:
http://www.stmcu.org/module/forum/thread-608523-1-1.html
本贴主要介绍以串口TFT屏来实现图片的显示,其整体构成如图2所示。
串口TFT屏与开发板的引脚连接关系为:
REST-PB1    DC-PB2   CS-PB3   SCK-PC6   SDI-PC7
相应的高低电平输出语句定义如下:
#define LCD_SCK_High()      { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);}
#define LCD_SCK_Low()           { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);}
#define LCD_SDI_High()      { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET);}
#define LCD_SDI_Low()      { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);}
#define LCD_CS_High()       { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);}
#define LCD_CS_Low()            { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);}
#define LCD_DC_High()       { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);}
#define LCD_DC_Low()              { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);}
#define LCD_REST_High()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);}
#define LCD_REST_Low()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);}
图片2.png
2 整体构成

生肖图片的显示函数如下:
  1. void show_image(unsigned int x,unsigned int y,unsigned int n)  //200*200
  2. {  
  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==9)  da=gImage_sh[k*2];
  13.                         da<<=8;
  14.                         if (n==9) da|=gImage_sh[k*2+1];
  15.                         LCD_WR_DATA(da);                                       
  16.                         k++;  
  17.                 }
  18.         }
  19. }
实现生肖图案型万年历的主函数如下:
  1. int main(void)
  2. {
  3.     HAL_Init();                                    //初始化HAL库
  4.     Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz
  5.     delay_init(216);                //延时初始化
  6.     GPIO_Configuration();
  7.         Lcd_Init();                    // 初始化TFT
  8.     LCD_Clear(WHITE);
  9.         BACK_COLOR=WHITE;
  10.     POINT_COLOR=RED;
  11. show_image(20,0,9);            // 显示生肖图片
  12. while(1)
  13. {
  14. //  显示RTC 计时值
  15. }
  16. }


mmuuss586 发表于 2016-11-16 19:16 | 显示全部楼层
不错,谢谢分享;
paderboy 发表于 2016-11-16 19:25 | 显示全部楼层
不错,多谢分享。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

525

主题

2963

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部