📄 main.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
********************************************************************************************************/
#define MAIN_GLOBAL
#include "user_includes.h"
#define TaskStkLengh 64 //Define the Task0 stack length 定义用户任务0的堆栈长度
#define TaskUIStkSize 128
#define TaskKeyScanSize 128
OS_STK TaskStk [TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈
OS_STK TaskUIStk[TaskUIStkSize]; // 定义用户任务0的堆栈
OS_STK TaskKeyScanStk[TaskKeyScanSize];
#define TaskUIPro 3
#define TaskKeyScanPro 4
void Task0(void *pdata); //Task0 任务0
void TaskUI(void *pdata);
void TaskKeyScan(void *pdata);
//*******************************************************************************
// 函数名称 :DelayNS()
// 函数功能 :nS级别延时
// 入口参数 :dly - uS数 dly<=5000
// 出口参数 :无
//Note :
//*******************************************************************************
void DelayUS(uint32 dly){
dly = dly *4;//(SYS_OSC / 1000) / 2800; //1260;
for (; dly > 0; dly--)
;
}
/******************************************************************************
** 函数名称 :DelayMS()
** 函数功能 :mS级别延时
** 入口参数 :dly 延时参数,1 - 1mS dly<65535
** 出口参数 :无
**Note: dly建议大于2
*******************************************************************************/
void DelayMS(uint32 dly){
for (; dly > 0; dly--){
DelayUS(1000);
}
}
int main (void)
{
OSInit ();
KeySem = OSSemCreate(0);
OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2);
OSStart ();
return 0;
}
/*********************************************************************************************************
** Task0 任务0
********************************************************************************************************/
void Task0 (void *pdata)
{
pdata = pdata;
TargetInit ();
OS_ENTER_CRITICAL();
T1_Ini();
SPI0_Init();
SPI1_Init();
OS_EXIT_CRITICAL();
OSTaskCreate(TaskUI, (void*)0, &TaskUIStk[TaskUIStkSize - 1], TaskUIPro);
OSTaskCreate(TaskKeyScan, (void*)0, &TaskKeyScanStk[TaskKeyScanSize - 1],TaskKeyScanPro);
while (1)
{
LED5_on();
OSTimeDly(OS_TICKS_PER_SEC/10); //延时一秒
LED5_off();
OSTimeDly(OS_TICKS_PER_SEC/10); //延时一秒
}
}
void TaskUI(void *pdata)
{
uint8 err;
for (err=0; err< 20; err++)
SPI0Data.Buff[err]=0x5A;
while (1)
{
//Debug1On();
OSSemPend(KeySem, OS_1SEC, &err); // 等待信号量
if (OS_NO_ERR == err)
{
switch (Key.Code)
{
case KEY_K1_PRESS_DOWN:
LED1_on();
SPI0Data.Point = 0;
SPI0Data.Count = 4;
Set0SPI0SSEL();
StartSPI();
break;
case KEY_K1_PRESS_UP:
LED1_off();
break;
case KEY_K2_PRESS_DOWN:
LED2_on();
break;
case KEY_K2_PRESS_UP:
LED2_off();
break;
case KEY_K3_PRESS_DOWN:
SPI1Data.Count = 4;
SPI1Data.Point = 0;
SPI1Data.Timer = 5;
SPI1Data.Mode = SPI1_TX;
SPI1Data.Ptr_Buff = SPI1Data.Buff;
StartSPI1();
LED3_on();
break;
case KEY_K3_PRESS_UP:
LED3_off();
break;
case KEY_K4_PRESS_DOWN:
LED4_on();
break;
case KEY_K4_PRESS_UP:
LED4_off();
break;
}
}
}
}
/************************************************************************************
Function: Scan Key Event.get Key.Signal and Key.Code
Input: PIN of KEYIN
Output: PIN of D0,D1,D2,D3;These pins shared with outside,should be restored after process outside progress
Key.Signal;this event sholde be cleared after respond
Key.Code;
Local: Key.ScanCnter local
Note: scan every port 4*2ms , Scanout a keycode 3*4*2ms
************************************************************************************/
void TaskKeyScan(void *pdata){
uint8 err;
uint32 timer;
pdata = pdata;
while (1){
err = 1;
OSTimeDly(OS_20MS);
// SETIO0OUTPUT();
Key.KStatus[Key.ScanCnter] <<= 1;
Key.KStatus[Key.ScanCnter] += (READ_PIN_KEYIN() ? 0 : 1);
if ((Key.KStatus[Key.ScanCnter] &0x7) == K_PRESS_DOWN){
Key.VT = VT_KEY_HOLD_START;
Key.Code = Key.ScanCnter + 1;
err = OSSemPost(KeySem); // 发送信号量
}
else if (((Key.KStatus[Key.ScanCnter] &0x7) == K_PRESS_UP)
&& (Key.Code != Key.ScanCnter + 9) ){
Key.Code = Key.ScanCnter + 5;
err = OSSemPost(KeySem); // 发送信号量
}
else if ((Key.KStatus[Key.ScanCnter] &0x7) == K_PRESS_HOLD){
if (!Key.VT){
Key.VT = VT_KEY_HOLD_REPEAT;
Key.Code = Key.ScanCnter + 9;
err = OSSemPost(KeySem); // 发送信号量
}
}
if (++Key.ScanCnter >= 4){
Key.ScanCnter = 0;
}
// WRITE_SCAN_KEY(Key.ScanCnter);
if (++timer >= 30){//300ms
timer = 0;
}
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -