📄 uart_lcd.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 + -