一前言
前面几篇分别讲了按键中断、按键查询、LCD显示以及定时器,这一篇把这些差不多综合一下。
实现如下大致功能:
(1)开发板下载程序后上电,
(2)如果不进行按键操作,则LCD进行循环显示,循环屏数为6屏,分别显示为:“Current :”屏,“software:”屏,电压采样值屏,“The temperature:”屏, “Baud Rate:”屏,“ALLDisplay Screen:”屏。
(屏里面显示的参数的值尚未全部添加,后期会慢慢加进来,敬请期待)
(3)如果在循环显示过程中,按键按下,则进入键显状态,按键按下一翻一屏,不按则保持上次按键按下的屏显,如果十几秒内检测不到按键按下了,则回到上次循环显示的屏数进行显示。
键盘显示屏分别为:"CorrespondenceAddress : "屏,"Meter No: FFFFFFFFFFFF"屏,电压采样值屏,"The temperature:6 "屏, "BaudRate:115200"屏,"ALL Display Screen:6 "屏。
二部分源码
- 定时器中断代码:
- void Timer1IntHandler(void)
- {
- ROM_TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); // 清除时钟中断
- // HWREGBITW(&g_ulFlags, 1) ^= 1; // 定时器切换标志
- ROM_IntMasterDisable();
- // GrStringDraw(&sContext, (HWREGBITW(&g_ulFlags, 1) ? "1" : "0"), -1, 98,
- // 46, 1); // 显示屏上的更新中断状态
- if(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_0)!=0)
- {
- keyflag++;
- if(keyflag==20)
- {
- autoflag++;
- keyflag=0;
- DisplayMode=DISPLAYAUTO;
- }
- }
- ROM_IntMasterEnable();
- }
- switch(autoflag%6)
- {
- case 0:
- LCD_Clear();
- //SysCtlDelay(SysCtlClockGet()/100);
- GrContextFontSet(&sContext, &g_sFontCm20);
- GrStringDraw(&sContext, "Auto Display Num: 1", -1, 0, 0, 0);
- GrStringDraw(&sContext, "Current : ", -1, 0, 60, 0);
- GrStringDraw(&sContext, Add, -1, 200, 60, 1);
- SysCtlDelay(SysCtlClockGet()/500);
- break;
- case 1:
- LCD_Clear();
- //SysCtlDelay(SysCtlClockGet()/500);
- GrContextFontSet(&sContext, &g_sFontCm20);
- GrStringDraw(&sContext, "Auto Display Num: 2", -1, 0, 0, 0);
- GrStringDraw(&sContext, "software: FFFFFFFFFFFF", -1, 30, 60, 0);
- SysCtlDelay(SysCtlClockGet()/200);
- break;
- case 2:
- LCD_Clear();
- // SysCtlDelay(SysCtlClockGet()/1);
- GrContextFontSet(&sContext, &g_sFontCm20);
- GrStringDraw(&sContext, "Auto Display Num: 3", -1, 0, 0, 0);
- // GrStringDraw(&sContext, "Voltage : ", -1, 30, 60, 0);
- GrStringDraw(&sContext, cText, -1, 30, 60, 1);
- SysCtlDelay(SysCtlClockGet()/50);
- break;
- case 3:
- LCD_Clear();
- // SysCtlDelay(SysCtlClockGet()/10);
- GrContextFontSet(&sContext, &g_sFontCm20);
- GrStringDraw(&sContext, "Auto Display Num: 4", -1, 0, 0, 0);
- GrStringDraw(&sContext, "The temperature:6 ", -1, 30, 60, 0);
- SysCtlDelay(SysCtlClockGet()/10);
- break;
- case 4:
- LCD_Clear();
- // SysCtlDelay(SysCtlClockGet()/100);
- GrContextFontSet(&sContext, &g_sFontCm20);
- GrStringDraw(&sContext, "Auto Display Num: 5", -1, 0, 0, 0);
- GrStringDraw(&sContext, "Baud Rate:115200", -1, 30, 60, 0);
- SysCtlDelay(SysCtlClockGet()/150);
- break;
- case 5:
- LCD_Clear();
- SysCtlDelay(SysCtlClockGet()/100);
- GrContextFontSet(&sContext, &g_sFontCm20);
- GrStringDraw(&sContext, "Auto Display Num: 6", -1, 0, 0, 0);
- GrStringDraw(&sContext, "ALL Display Screen:6 ", -1, 30, 60, 0);
- SysCtlDelay(SysCtlClockGet()/150);
- break;
- default:
- break;
- }
三. 显示的图片及视频
按键显示第三屏
视频
本帖最后由 常见泽1 于 2015-5-1 11:10 编辑