火浪汤B - tombtomb的BLOG http://tombtomb.52rd.net - 复制 - 收藏
驭刀降佛 发表于 2008-6-7 11:09:00

/****************************************Copyright (c)**************************************************
**
**         ** 作者:tomb

** 日 期: 2008-05-28
**描        述: HG1223209C-YF62L-VA LCD的uc/osII底层驱动
********************************************************************************************************/

#include "config.h"


#define led1 (1<<22)   
#define  KEY1  (1<<16)
#define  KEY2  (1<<17)
#define  KEY3  (1<<18)
#define  KEY4  (1<<19)
#define  KEY5  (1<<20)
#define  KEY6  (1<<21)


#define  TASK_STK_SIZE                 128
OS_STK        TaskStk[TASK_STK_SIZE];
OS_STK        TaskStartStk[TASK_STK_SIZE];
OS_STK    TaskKeyScanStk[TASK_STK_SIZE];
OS_EVENT *Uart0ReviceMbox;
uint32 Uartbps;
void  TaskStart(void *data);
void  TaskUart0Revice(void *pdata);
void  TaskKeyScan(void *pdata);


/*********************************************************************************************************
** 函数名称: LCD_DispChar
** 功能描述: 从UART0将缓冲区的数据显示到LCD。
** 输 入: cp  要显示数据的缓冲区指针
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2003年7月1日
**-------------------------------------------------------------------------------------------------------
** 修改人: 梁浩荡
** 日 期: 2008-05-28
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void LCD_DispChar(uint8 *cp)
{
  
    cp++;
   
    OS_ENTER_CRITICAL();
    LCD_Display_a_Number_FUN(0x90,*cp++);
 OSTimeDly(OS_TICKS_PER_SEC/2); 
    OS_EXIT_CRITICAL();

    OS_ENTER_CRITICAL();
    LCD_Display_a_Number_FUN(0x92,*cp++);
 OSTimeDly(OS_TICKS_PER_SEC/2); 
    OS_EXIT_CRITICAL();
 
    OS_ENTER_CRITICAL();
    LCD_Display_a_Number_FUN(0x94,*cp++);
 OSTimeDly(OS_TICKS_PER_SEC/2); 
    OS_EXIT_CRITICAL();
   
    OS_ENTER_CRITICAL();
    LCD_Display_a_Number_FUN(0x96,*cp++);
 OSTimeDly(OS_TICKS_PER_SEC/2); 
    OS_EXIT_CRITICAL(); 

       
}


/*********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: PC_DispClrScr,OSInit,OSTaskCreate,OSStart
**
** 作 者: 陈明计
** 日 期: 2003年7月1日
**-------------------------------------------------------------------------------------------------------
** 修改人: 梁浩荡
** 日 期: 2008-05-28
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        int main (void)
{
    OSInit();

    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
   
    OSStart();
    return 0;
}

/*********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2003年7月1日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

        void  TaskStart(void *pdata)
{
    uint8 *cp;
    uint8 err;
 pdata = pdata;
                                                    /* 避免编译警告 */
   PINSEL0 = 0x00000005; // 除UART0/I2C外,设置所有管脚连接GPIO
   PINSEL1 = 0x00000000;
   IO0DIR = led1;  // 设置LED控制口为输出,其它I/O为输入
   IO0SET = led1; 
  
   Uart0ReviceMbox = OSMboxCreate(NULL);                           /* 建立邮箱     */
    if (Uart0ReviceMbox == NULL)
    {
        while (1);
    }
 
     
    TargetInit();         /* 目标板初始化 */
   
   
    OSTaskCreate(TaskUart0Revice, (void *)0,
                 &TaskStk[TASK_STK_SIZE - 1], 10);                  /* 创建任务     */
    OSTaskCreate(TaskKeyScan, (void *)0, &TaskKeyScanStk[TASK_STK_SIZE - 1],9);
   
 
    for (;;)
    {
  
        cp = (uint8 *)OSMboxPend(Uart0ReviceMbox, 0, &err);         /* 接收数据 */
       
        LCD_DispChar(cp);                                    /* 显示接收到的数据 */
     IO0CLR = led1;
     OSTimeDly(OS_TICKS_PER_SEC/5);
     //OSTaskResume(9);
    }
}

/*********************************************************************************************************
** 函数名称: TaskUart0Revice
** 功能描述: μCOS-II的任务
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 梁浩荡
** 日 期: 2008年5月28日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  TaskUart0Revice(void *pdata)
{
   
    uint8 Buf[8],i;
    uint8 *data;
    pdata = pdata;                                                  /* 避免编译警告 */

    for (;;)
    { 
     IO0SET = led1;
        data = (uint8 *)UART0Getch_8Number();
     for(i=0;i<5;i++)
      {
       Buf[i] = *data++;
      }
          
     /*OSTimeDly(OS_TICKS_PER_SEC);
  LCD_Display_a_Sentence_FUN(0x80,"这一刻我们都是",1);
  OSTimeDly(OS_TICKS_PER_SEC/2);
  LCD_Display_a_Sentence_FUN(0x90,"四川人!",0);
  OSTimeDly(OS_TICKS_PER_SEC/2);
  */   
  OSMboxPost(Uart0ReviceMbox, (void *)Buf);
  
    }
}


/*********************************************************************************************************
** 函数名称: TaskKeyScan
** 功能描述: μCOS-II的任务
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 梁浩荡
** 日 期: 2008年5月28日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
 
/************************设置串口通讯数率********************************************/
void TaskKeyScan(void *pdata)
{
 pdata = pdata;
 
 IO0DIR &= (~KEY1)|(~KEY2)|(~KEY3)|(~KEY4)|(~KEY5)|(~KEY6);
 
 for(;;)
 {
  //while(((IO0PIN&KEY1)!=0) && ((IO0PIN&KEY2)!=0) && ((IO0PIN&KEY3)!=0) && ((IO0PIN&KEY4)!=0) );
    //{
    // OSTimeDlyHMSM(0,0,0,100);
    //}
  //OSTaskSuspend(OS_PRIO_SELF);
  
  OS_ENTER_CRITICAL();
  if((IO0PIN&KEY1)==0)
    {
     Uartbps = 115200;
     LCD_Display_a_Sentence_FUN(0x80,"波特率:",1);
           LCD_Display_a_Sentence_FUN(0x84,"115200",0);
           UART0Init2(Uartbps);
    }
      else if((IO0PIN&KEY2)==0)
        {
         Uartbps = 19200;
         LCD_Display_a_Sentence_FUN(0x80,"波特率:",1);
            LCD_Display_a_Sentence_FUN(0x84,"19200",0);
            UART0Init2(Uartbps);
        }else if((IO0PIN&KEY3)==0)
           {
          Uartbps = 9600;
          LCD_Display_a_Sentence_FUN(0x80,"波特率:",1);
             LCD_Display_a_Sentence_FUN(0x84,"9600",0);
             UART0Init2(Uartbps);
            }
  
  OS_EXIT_CRITICAL();
  OSTimeDly(OS_TICKS_PER_SEC);
  //OSTaskSuspend(OS_PRIO_SELF);
    }
}
/*******************************************************************************************/   

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

阅读全文(560) | 评论(0)
评 论
昵 称: 匿名
验证码: 8771
博 主
进入tombtomb的首页
博客名称:火浪汤B
日志总数:24
评论数量:92
访问次数:33997
建立时间:2007年10月16日
导 航
日 历
«Mar.2010»
123456
78910111213
14151617181920
21222324252627
28293031
公 告
欢迎光临!
日 志
评 论
链 接