1.在GPIO 、UART、中断、定时器、LCD、ADC、TICK时钟滴答中断这些知识的基础上开始写电子相册这个项目。
2.电子相册主要实现了LED灯的闪烁,按键切换图片,实现图片的自动播放,图片上翻、下翻、按键返回主界面、上位机控制arm (实现开启相册、)
具体实现
1.先写了主界面,主界面上用到了将字符串、汉字、图片、时间分别显示在主界面上,分别调用了LCD的各自显示函数,汉字利用LCD字模提取工具,图片由于arm板的大小是480*272,所以将图片的像素调至一样,再利用图片处理工具生成代码。
2.,RTC时钟主要包括中断初始化,设置时间,获取时间,中断服务映射函数,在主函数中设置时间(bcd码),在TICK中断里获取时间,将时间利用数组缓存起来,然后数组通过LCD的字符串打印函数显示到arm的主界面上,显示到主界面上时,我没有用LCD_clean(0xffffff),写了
void LCD_FILL(U32 x0,U32 y0,U32 x1,U32 y1, U32 colour)
{
U16 x,y;
for(y=y0;y { for(x=x0;x LCD_BUFFER[y][x]=colour; } } 函数把时间那块区域给填白,再定义一个int showtime = 0的全局变量,当按键按下的时候使其 为1,这样在放图片的时候就不用显示时间了 3.按键控制图片,主要是Key1实现自动播放功能,key2实现下翻,key3实现上翻,key4实现返回主界面,调用按键扫描函数,在主函数中通过switch(key_scan(0))来判断究竟是哪个按键按下,key1由于是自动播放图片,直接在case语句下调用自动播放图片的函数,key4是返回主届面,定义了一个全局变量showfirst,初始化为0,然后使其自增,并判断是否为0,同时调用显示界面的函数,最后只显示主界面一次,在写key4时直接写showfirst = 0,然后就可以返回主界面了。 if (showfirst == 0) { show(); showfirst++; } 4.遇到的问题: 在写LED的时候将LED灯的闪烁放在定时器中断,TICK中断里放的是时间,在主函数里同时对这两个中断使能会只显示LED灯从而时间显示不出来,原因是定时器中断和TICK中断两个中断都是1s中断一次,同时执行,没有中断优先级 5.按键切换图片主要考虑的是上翻、下翻,我定义了变量i,给他初始化为100,在主函数里定义一个指针数组,给它初始化生成的照片数组名,在key2按键下执行i++,LCD_displaypicture (0, 0, 480, 272, pict[i%5]);我一共加载了5张照片,所以pict[i%5],因为执行了i++所以i%5代表往下切换图片(上翻则i--)