uchar ucDisplayBarStatus; uchar ucDisplayLength; //显示长度
#define c_StatusBar_Start 1 #define c_StatusBar_Scroll 2 #define c_StatusBar_Off 3 uchar ucLoopCount; uchar code ucStatusDispInformation[] = " WWW.21IC是一个好地方,欢迎大家经常光临侃单片机版块,古道热肠版主研制Ver(1.00) "; //滚动显示帮助信息 void ScrollDisplayHelp(void) {
if(ucDisplayBarStatus == c_StatusBar_Start) { //启动状态态显示进程 ucDisplayLength = 0; LcdShowString(4,1,ucStatusDispInformation); //启动定时器1进行延时 bDelayCompleteFlag_T1 = false; TmrCfgFnct(1, Tmr1TDisp_P1, (void *)0); /* Execute when Timer #1 times out */ TmrSetMST(1,0, 0, 1); TmrStart(1);
ucDisplayBarStatus = c_StatusBar_Scroll; } if(ucDisplayBarStatus == c_StatusBar_Scroll) { if(bDelayCompleteFlag_T1) //定时操作完成 { bDelayCompleteFlag_T1 = false; ucDisplayLength += 2; if(ucDisplayLength > (strlen(ucStatusDispInformation)-16)) //结束滚动显示 { ucDisplayBarStatus = c_StatusBar_Off; //关闭显示 LcdShowString(4,1," "); } else { LcdShowString(4,1,ucStatusDispInformation+ucDisplayLength); TmrSetMST(1,0, 0, 1); TmrStart(1); } } }
}
系统有空闲循环调用此函数,滚动节拍由定时值控制,采用状态机,CPU活得很滋润,还可以干其它的很多事. 哈哈,"裸奔"其实也是要讲究艺术的.
|