这是前段时间做的12864显示诗词可用按键控制和上位机发送命令控制,也是开始使用AD画图之后第一次用AD画板,可以先先介绍一下,液晶屏是用的带字库的,显示字符方便倒是方便,就是画图和反白有问题,为此我还在论坛上发帖问过呢,以后坚决不用,还是自己写字库好,就是我用的STC89C52撑不住啊,现在才4首诗只往里写了3首,程序存储空间和ROM已经放不下了;按键是抬起执行(显示滚动和开背光和蜂鸣器),所有任务都交给定时器来分配,不死循,但是有一个问题:开启串口接收中断后显示刷新时间被拉长了。上图吧,完整的代码就不放这儿了,太占地方,放个片段
/*********************************************
FunctionName: pomeDisplay
FunctionInfo: 诗词显示函数
Input: no
Output: no
注:如果想要整屏向下移动->改变行数(行++)DisplayWhere(gFlag.gKeyRow +1,gVerse1.firstVerse);
但这种做法不好;于是想了第二种方法->不改变行数 改变显示内容
就可以向上翻,把下面的也显示出来
**********************************************/
void pomeDisplay(void)
{
switch(gFlag.gKeyPage)
{
case 0: //第一页->诗名
{
DisplayWhere(1,gTitile.firstPoetry+16*gFlag.gKeyRow); //&a+16和a+16一样的效果
if(gFlag.gKeyRow <(TITLE_NUM-1)) //若是改变诗的首数需改变这个宏
{
DisplayWhere(2,gTitile.secondPoetry+16*gFlag.gKeyRow);
}
if(gFlag.gKeyRow <(TITLE_NUM-2))
{
DisplayWhere(3,gTitile.thirdPoetry+16*gFlag.gKeyRow);
}
if(gFlag.gKeyRow <(TITLE_NUM-3)) //向上翻显示时不加边界检查 不需要显示那行会显示垃圾内容
{ //也就是现在4首诗按下第二次下键后第四行便要为空移到上行
DisplayWhere(4,gTitile.fourthPoetry+16*gFlag.gKeyRow);
}
break;
}
case 1: //第二页->诗句
{
if(ZERO == gFlag.gTitleCnt) //第一首
{
DisplayWhere(1,gVerse1.firstVerse+16*gFlag.gKeyRow);
if(gFlag.gKeyRow <(TITLE_NUM-1))
{
DisplayWhere(2,gVerse1.secondVerse+16*gFlag.gKeyRow);
}
if(gFlag.gKeyRow <(TITLE_NUM-2))
{
DisplayWhere(3,gVerse1.thirdVerse+16*gFlag.gKeyRow);
}
if(gFlag.gKeyRow <(TITLE_NUM-3))
{
DisplayWhere(4,gVerse1.fourthVerse+16*gFlag.gKeyRow);
}
break;
}
if(ONE == gFlag.gTitleCnt) //第二首
{
DisplayWhere(1,gVerse2.firstVerse+16*gFlag.gKeyRow);
if(gFlag.gKeyRow <(TITLE_NUM-1))
{
DisplayWhere(2,gVerse2.secondVerse+16*gFlag.gKeyRow);
}
if(gFlag.gKeyRow <(TITLE_NUM-2))
{
DisplayWhere(3,gVerse2.thirdVerse+16*gFlag.gKeyRow);
}
if(gFlag.gKeyRow <(TITLE_NUM-3))
{
DisplayWhere(4,gVerse2.fourthVerse+16*gFlag.gKeyRow);
}
break;
}
if(TWO == gFlag.gTitleCnt) //第三首
{
DisplayWhere(1,gVerse3.firstVerse+16*gFlag.gKeyRow);
if(gFlag.gKeyRow <(TITLE_NUM-1))
{
DisplayWhere(2,gVerse3.secondVerse+16*gFlag.gKeyRow);
}
if(gFlag.gKeyRow <(TITLE_NUM-2))
{
DisplayWhere(3,gVerse3.thirdVerse+16*gFlag.gKeyRow);
}
if(gFlag.gKeyRow <(TITLE_NUM-3))
{
DisplayWhere(4,gVerse3.fourthVerse+16*gFlag.gKeyRow);
}
break;
}
}
default:break;
}
}
|