⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdtask.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         : DisPlayTask.C                                    *
**                                                              *
**  By : Cyb 2007.01.11                                         *
****************************************************************/
#define   LCDTASK_GLOBALS

#include "includes.h"
#include "timetask.h"
#include "systask.h"
#include "message.h"
#include "errcode.h"
#include "errtask.h"
#include "uart_drv.h"
#include "hardware.h"
#include "LcdTask.h"
#include "alarmer.h"
#include "watchdog.h"
#include "StaName.h"
#include "Predictor.h"
#include "PowerUp.h"

#define  SIZE_MSGQUEBUF             20

static INT8U    CurLcdKey;
static OS_QMSG MsgQueBuf[SIZE_MSGQUEBUF];
static OS_STK  LcdTaskStack[STACK_LCDTASK];
static TMR_TSK  *LcdLightTmr;
static INT8U   wdgid;

static INT8U   StaName[12];

static INT8U DialKeyMapTbl[] = {
	 
	  0x01, KEY_UP,          0x02, KEY_NCK,         0x03, KEY_DOWN,       
	  0x04, KEY_ACK,      0x05, KEY_rangzuo,      0x06, KEY_ENTER,       
	  0x07, KEY_chongbo,     0x08, KEY_yongji,       0x09, KEY_8,       
	  0x86, KEY_guanji
};	

static INT8U QueryKeyTbl(INT8U RecvKey)
{
	 INT8U  i;
	 
	 for(i=0;i<sizeof(DialKeyMapTbl)/2;i++)
	 {
	     if(RecvKey == DialKeyMapTbl[2*i])
	     {
	   	     return DialKeyMapTbl[2*i+1];
	     }
	 }
	 
	 return KEY_INVALID;  	
}

static void LcdLightFunc(void)
{
       Pulldown_L_ELSW();
       StopTmr(LcdLightTmr);
}    
     
void TurnOnLcdLight(void)
{
       Pullup_L_ELSW();
       StartTmr(LcdLightTmr,SECOND,10);
}    

void TurnOffLcdLight(void)
{
       Pulldown_L_ELSW();
       StopTmr(LcdLightTmr);
}

INT8U  GetCurLcdKey(void)
{
      return CurLcdKey;
} 
   
static void InitLcdTask(void)
{
      CurLcdKey = NULL;
      
      LcdLightTmr = CreateTimer(LcdLightFunc,0);

      InitLcdTask();
      
      InitFormStack();
      
      
}

static void HdlKey(void)
{
   
      TurnOnLcdLight();
      WinStackEntry();
      ClearWatchdog();
   
}

static void HdlMSG_LCD_NAMEDISPLAY(INT16U id)
{
      INT8U len;
      
      len = GetStrlen(StaNames[id],15);
      
      if(len >= 12)
      {
          len = 12;
      }
      
      memset(StaName,0,sizeof(StaName));
      memcpy(StaName,StaNames[id],len);
      
      Print_LCD(1,1,StaName,sizeof(StaName));
}

static void HdlMSG_LCD_OPSTATUS(INT8U opstatus)
{
      DplyWorkIcon(opstatus);
}
static void HdlMSG_LCD_POWKEY(void)
{
       OperateMachine();
}    
static void LcdTask(void *pd)
{
      INT8U  tempkey;      
      pd = pd;
      
      PrintFromUART(1, "LcdTask开始执行!\n"); 
      InitLcdTask();
      ActivatePowerUpPage();
     
      wdgid =  ApplyWatchDogID();
      
      while(1)
      {
          if(OSQPend(LcdTaskQ,20,&LcdCurMsg)==OS_NO_ERR)
          {
              switch(LcdCurMsg.MsgID)
	          { 
	             case MSG_LCDKEY:
	             tempkey = LcdCurMsg.LMsgPara;
                 CurLcdKey = QueryKeyTbl(tempkey);
                 HdlKey();
	             break;
	             case MSG_LCD_NAMEDISPLAY:
	             HdlMSG_LCD_NAMEDISPLAY(LcdCurMsg.MsgID);
	             break;
	             case MSG_LCD_OPSTATUS:
	             HdlMSG_LCD_OPSTATUS(LcdCurMsg.MsgID);
	             break;
	             case MSG_LCD_POWKEY:
	             HdlMSG_LCD_POWKEY();
	             default:
	             break;
  
	          }
          }
          
          ResetWatchDog(wdgid);
      }
      
}


void CreateLcdTask(void)
{    
      LcdTaskQ = OSQCreate(MsgQueBuf, sizeof(MsgQueBuf)/sizeof(MsgQueBuf[0]));
      OSTaskCreate(LcdTask, (void *)0, &LcdTaskStack[STACK_LCDTASK], PRIO_LCDTASK);
}

void TurnOnLcdDply(void)
{
     DplyOnLCD();
        
}

void TurnCloseLcdDply(void)
{
     DplyOffLCD();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -