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

📄 main.c

📁 一个 uC/OS + GUI 驱动 98x67 LCD 的例程 使用 Keil MDK 编译工程,uCOS-II 为 V2.52 版,GUI 为 ZLG 的 V1.0 版,LCD 使用 NOKIA
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
** mcu123.com add keil
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"
#include "..\GUI\BMP.h"

WINDOWS  Mwindows;   /* 主窗口句柄 */
WINDOWS  *current_Mwindows=&Mwindows;



#define	TaskStkLengh	64			//Define the Task0 stack length 定义用户任务0的堆栈长度 
 
OS_STK	TaskStk0 [TaskStkLengh];		//Define the Task0 stack 定义用户任务0的堆栈
OS_STK	TaskStk1 [TaskStkLengh];		//Define the Task0 stack 定义用户任务1的堆栈
OS_STK	TaskStk2 [TaskStkLengh];		//Define the Task0 stack 定义用户任务2的堆栈

void 	Task0(void *pdata);			//Task0 任务0
void 	Task1(void *pdata);			/*Tas1  任务1实现显示 */
void    Task_Keyboard(void *pdata);	 /* 键盘扫描任务 */

OS_EVENT   *DispSem;    
OS_EVENT   *Display_Box;        

/****************************************************************************
* 名称:main()
* 功能:主程序从这里开始运行 
* 入口参数:
****************************************************************************/
int main (void)
{   
    Mwindows.x=0;
	Mwindows.y=0;
	Mwindows.with=97;
	Mwindows.hight=67;
	Mwindows.title="yhy_GUI_TEST";
  //  UART0_Init();
	LcdInit();
//	LcdClr(0xfff);
//	GUI_Picture(0, 0,97,66,BMP);
	LCD_ColorSet(0);
//	GUI_WindowsDraw(current_Mwindows);  /* 画主窗口 */
	OSInit ();			
	DispSem = OSSemCreate(1);	       /**/	
	Display_Box = OSMboxCreate((void *)0);	/**/																			
	OSTaskCreate (Task0,(void *)0, &TaskStk0[TaskStkLengh - 1], 2);		
	OSStart();
	return 0;															
}
/*********************************************************************************************************
**                            Task0 任务0
********************************************************************************************************/

		void Task0	(void *pdata)
{
    RTCTime Time;
	uint8   Display[9];
//    uint8   Wait_Signal0;
	pdata = pdata;						        /*防止编译器警告 */
	Time.RTC_Sec  = 0;       /* 秒 - [0,59] */
    Time.RTC_Min  = 0;       /* 分 - [0,59] */
    Time.RTC_Hour = 0;       /* 小时 - [0,23] */
    Time.RTC_Mday = 25;      /* 当月天数- [1,31] */
    Time.RTC_Mon  = 4;       /* 月 - [1,12] */
    Time.RTC_Year = 2007;    /* 年 - [0,4095] */
    Time.RTC_Wday = 2;       /* 星期- [0,6] */
    Time.RTC_Yday = 156;     /* 当年天数 - [1,365] */
	TargetInit();		     /*硬件初始化 */
	RTCInit();				 /**/
	RTCSetTime(Time); 
	RTCStart();
	OSTaskCreate(Task1,(void *)0, &TaskStk1[TaskStkLengh - 1], 3);	
	OSTaskCreate(Task_Keyboard,(void *)0, &TaskStk2[TaskStkLengh - 1], 4);		
	while(1)
	{		 
//	    OSSemPend(DispSem,0,&Wait_Signal0);               /*等待信号量 */
		Time = RTCGetTime();
		Display[0] = ((uint8)Time.RTC_Hour/10)+48;
		Display[1] = ((uint8)Time.RTC_Hour%10)+48;
		Display[2] = ':';
		Display[3] = ((uint8)Time.RTC_Min/10)+48;
		Display[4] = ((uint8)Time.RTC_Min%10)+48;
		Display[5] = ':';
		Display[6] = ((uint8)Time.RTC_Sec/10)+48;
		Display[7] = ((uint8)Time.RTC_Sec%10)+48;
		Display[8] = '\0';
/*		Dispaly[0] = Time.RTC_Hour+48;
		Dispaly[0] = Time.RTC_Mday+48;
		Dispaly[0] = Time.RTC_Mon+48;
		Dispaly[0] = Time.RTC_Year+48;	 */
	    UART0_SendData("现在时间是:");
		UART0_SendData(Display);
	    UART0_SendData("\n");
	//	GUI_Picture(0, 0,97,66,BMP); 
		OSTimeDly(100);
//		Wait_Signal0 = OSSemPost(DispSem);              /*发送信号量 */	
	}
}

		void Task1	(void *pdata)
{		   
    uint8   Wait_Signal1;
    uint8   *Wait_Message;	
	uint8    Key_Message;
	pdata = pdata;						     /*防止编译器警告*/
	
	while (1)
	{	 
	    Wait_Message = OSMboxPend(Display_Box,0,&Key_Message);;
		Wait_Signal1=Wait_Signal1;
	    UART0_SendData("I am Task1");
		GUI_Picture_256(0, 0,97,66,Wait_Message);
//		OSTimeDly(100);
		Wait_Signal1 = OSSemPost(DispSem);			    /*发送信号量 */
	}
}

		void Task_Keyboard	(void *pdata)
{     
	uint32   key_temp=0,old_key=0;	          /* */
	uint8  	Key_Message;
	pdata = pdata;						     /*防止编译器警告*/
	
	while (1)
	{	 
		OSTimeDly(3);               /**Delay 30Ms*/
	    key_temp=(FIO0PIN&0x00000078);
		OSTimeDly(2);               /**Delay 20Ms The key is Ture*/
	   if((FIO0PIN&0x00000078) ==key_temp)
	  {
	    if(key_temp != old_key)     /* 识别长按 */
		{
		old_key=key_temp;
	    switch(key_temp)
		 {
		  case    0x00000038: 
		               Key_Message =  OSMboxPost(Display_Box,(void *)me); 
		               break;
		  case    0x00000070: Key_Message = OSMboxPost(Display_Box,(void *)meinv); 
		                break;
		  case    0x00000068: Key_Message = OSMboxPost(Display_Box,(void *)BMP);
		                break;
		  case    0x00000058:Key_Message =  OSMboxPost(Display_Box,(void *)&Fengjing);
		                break;
		 default :     break;
		 }
		Key_Message=Key_Message;
	  }
	  }
	}
	

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

⌨️ 快捷键说明

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