打印
[STM32F7]

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

[复制链接]
849|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在NUCLEO_F767ZI实现RTC实时时钟的帖子中,介绍了一种以OLED屏来实现实时时钟的方法,本贴再介绍一种以串行接口TFT屏来实现带生肖图案的万年历实现方法。
以前受程序存储空间的限制,在不加挂大容量存储器件的情况下要想显示一幅高质量的图片是件困难的事。对于NUCLEO_F767ZI来说这件事容易了许多,因为它的程序存储空间已达2M,显示的图片数据完全可以存放到程序中,这完全有种土豪的有钱就可以这么任性的味道。
在该生肖图案型万年历中,每幅生肖图片的规格为200*200像素,以16位色彩的格式来存储,共12幅。
万年历的计时环节则是使用NUCLEO_F767ZI内部的RTC,其运行效果如图1所示。
沙发
jinglixixi|  楼主 | 2016-11-16 17:50 | 只看该作者

图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 整体构成

生肖图片的显示函数如下:
void show_image(unsigned int x,unsigned int y,unsigned int n)  //200*200
{  
        unsigned int i,j,k;
        unsigned int da;
        k=0;
        for(i=0;i<200;i++)
        {       
                LCD_SetCursor(x,y+i);
                LCD_WriteRAM_Prepare();                                    
                for(j=0;j<200;j++)
                {
                        if (n==9)  da=gImage_sh[k*2];
                        da<<=8;
                        if (n==9) da|=gImage_sh[k*2+1];
                        LCD_WR_DATA(da);                                       
                        k++;  
                }
        }
}
实现生肖图案型万年历的主函数如下:
int main(void)
{
    HAL_Init();                                    //初始化HAL库
    Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz
    delay_init(216);                //延时初始化
    GPIO_Configuration();
        Lcd_Init();                    // 初始化TFT
    LCD_Clear(WHITE);
        BACK_COLOR=WHITE;
    POINT_COLOR=RED;
show_image(20,0,9);            // 显示生肖图片
while(1)
{
//  显示RTC 计时值
}
}


使用特权

评论回复
板凳
mmuuss586| | 2016-11-16 19:16 | 只看该作者
不错,谢谢分享;

使用特权

评论回复
地板
paderboy| | 2016-11-16 19:25 | 只看该作者
不错,多谢分享。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

2756

帖子

38

粉丝