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

📄 uart_lcd.c

📁 ARM7 LPC2114上编写的uC/os-II源程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**
**									FOXCONN 测试开发部
** 作者: 梁浩荡 
** 日 期: 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
********************************************************************************************************/

⌨️ 快捷键说明

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