打开资料包中《SWM166-SPI-Y1.28C1》软件工程,打开主函数如下: int main(void) { SystemInit(); MyUartInit(921600); spi_flash_init(); GC9A01_Init(); SPI_DMA_SendGet_Init(); Timer_Init(); KEY_Init(); Show_**(); Show_meau_First(Meau_BianPinJieDong); while(1==1) { /*实时更新*/ DataDeal_485(); Key_Get_IO(); /*逻辑*/ Key_Deal(); } } 首先SystemInit();初始化运行主频为90Mhz; MyUartInit(921600);初始化串口1波特率为921600bit/s。 spi_flash_init();外挂SPI Flash存储芯片的初始化。 GC9A01_Init(); 1.28寸圆屏驱动芯片初始化,同样采用Spi驱动。 SPI_DMA_SendGet_Init(); 配置SPI传输为DMA模式,用于快速驱动屏幕显示。 Timer_Init();定时器0初始化,按键按下时间长短判断。 KEY_Init(); 编码器引脚初始化。 Show_**(); 显示示例**图片。 Show_meau_First(Meau_BianPinJieDong); 显示第一个菜单图标 以上初始化完毕,接下来进入大循环 DataDeal_485(); //串口接收上位机发来的图片数据,并将数据写入外挂flash中,用于屏幕显示 Key_Get_IO(); //编码器检测,包含正反旋转选择功能,按键短按、长按操作功能。产生标志供显示界面判断显示。 Key_Deal(); //根据编码器检测的标志位,显示相应的界面图标,使按键逻辑与显示逻辑各自独立,方便管理修改。 几个关键的函数解析: Show_**();//显示示例**图片 void Show_**(void) { for(uint16_t i = 53; i > 0; i--) { GPIO_Init(GPIOA, PIN1, 1, 0, 0, 0); //输出,接LED GPIO_Init(GPIOA, PIN2, 1, 0, 0, 0); //输出,接LED GPIO_Init(GPIOA, PIN3, 1, 0, 0, 0); //输出,接LED SysTick_Config(SystemCoreClock/24000); //每0.25秒钟触发一次中断 LCD_ShowImg_**(0,0,ICO_01 + i); } } 函数中for循环了54次,LCD_ShowImg_**(0,0,ICO_01 + i); 函数执行了54次,关键变量ICO_01,找到其定义处: 这是图片的索引,循环了54次即按顺序显示了54张图片。再看下LCD_ShowImg_**函数: XS,YS表示图片显示的起始坐标,即决定了图片显示的位置。关键变量ImgMap_**,这是一个三维数组,包含了图片对应在外挂flash的存储地址,图片的高和宽: 有了这三个信息,LCD_ShowImg_**函数下半段就是从图片相应的存储地址读取图片数据,再将图片数据发送给屏幕显示,再详细一点,就是根据图片的高和宽,分别逐点读取flash数据到缓存,再立即将缓存数据传输至屏幕显示,以保证屏幕快速刷新,这样即实现了可以在屏幕任何位置显示图片的功能。 下一章节,准备更换下图片资源,将图片显示流程过一遍。
|