📄 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:
**
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"
#define TaskStkLengh 64 //Define the Task0 stack length 定义用户任务0的堆栈长度
OS_STK TaskStk[TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈
void Task0(void *pdata); //Task0 任务0
/*******************************************************************************************************/
#include "config.h"
uint32 key;
const uint32 LEDS8 = (0xff << 18); // P1[25:18]控制LED8~LED1
int key_value(void)
{
uint32 temp;
uint32 i,j;
PINSEL0 = PINSEL0 & (~0x00ff); // 将P0.0~P0.3设置为按键控制输入端
PINSEL1 = PINSEL1 & (~0xff00); //
PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]连接GPIO
IO1DIR = LEDS8; // 设置LED1控制口为输出
IO0DIR = 0x0f<<20; // 将P0.20~P0.23设置为输出;P0.0~P0.3默认输入
IO0SET=0x0f<<20; // 使P0.20~P0.23输出高电平
IO0CLR=1<<20; // 使P0.20输出低电平
temp=IO0PIN & 0x0f; // 获取P0.0~P0.3端口上的值
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--); // 延时去抖
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=temp & 0x0f;
switch(temp) // 判断哪个按键按下
{
case 0x0e:
key=0;
break;
case 0x0d:
key=4;
break;
case 0x0b:
key=8;
break;
case 0x07:
key=12;
break;
default:
break;
}
}
}
IO0SET=0x0f<<20; // 同上
IO0CLR=1<<21;
temp=IO0PIN & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=1;
break;
case 0x0d:
key=5;
break;
case 0x0b:
key=9;
break;
case 0x07:
key=13;
break;
default:
break;
}
}
}
IO0SET=0x0f<<20; // 同上
IO0CLR=1<<22;
temp=IO0PIN & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=2;
break;
case 0x0d:
key=6;
break;
case 0x0b:
key=10;
break;
case 0x07:
key=14;
break;
default:
break;
}
}
}
IO0SET=0x0f<<20; // 同上
IO0CLR=1<<23;
temp=IO0PIN & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=3;
break;
case 0x0d:
key=7;
break;
case 0x0b:
key=11;
break;
case 0x07:
key=15;
break;
default:
break;
}
}
}
return key; // 返回键值
}
void DelayNS (uint32 dly) // 延时程序
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
/*********************************************************************************************************/
const uint32 KEY_TABLE[16] = {0x00,0x01,0x02,0x03, //LED灯键值
0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,
0x0c,0x0d,0x0e,0x0f};
/****************************************************************************
* 名称: main()
* 功能: 初始化uC/OS-II操作系统,建立第一个任务,然后启动系统。
****************************************************************************/
int main(void)
{
OSInit ();
OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2);
OSStart ();
return 0;
}
/*******************************************************************************************************
** Task0 任务0
** 功能:使用ZLG/GUI,在屏幕上同时显示多个"Hello ZLG/GUI!"字符串
********************************************************************************************************/
void Task0(void *pdata)
{ uint8 j;
pdata = pdata;
TargetInit ();
GUI_Initialize(); // 初始化LCM
GUI_SetColor(1, 0); // 设置前景色和背景色
while (1)
{
for(j=0; j<9; j++)
{
IO1SET = LEDS8;
key_value();
IO1CLR = ((KEY_TABLE[key])<<18);
OSTimeDlyHMSM(0, 0, 1, 0); // 延时1秒
}
GUI_ClearSCR(); // 清屏
switch(key)
{
case 0:
GUI_PutString(30,0, "this key is 0"); // 指定位置显示字符串
case 1:
GUI_PutString(30,8, "this key is 1"); // 指定位置显示字符串
case 2:
GUI_PutString(30,16, "this key is 2"); // 指定位置显示字符串
case 3:
GUI_PutString(30,24, "this key is 3"); // 指定位置显示字符串
case 4:
GUI_PutString(30,32, "this key is 4");; // 指定位置显示字符串
case 5:
GUI_PutString(30,40, "this key is 5");
case 6:
GUI_PutString(30,18, "this key is 6");
case 7:
GUI_PutString(30,56, "this key is 7");
case 8:
GUI_PutString(30,0, "this key is 8");
case 9:
GUI_PutString(30,8, "this key is 9");
case 10:
GUI_PutString(30,16, "this key is 10");
case 11:
GUI_PutString(30,24, "this key is 11");
case 12:
GUI_PutString(30,32, "this key is 12");
case 13:
GUI_PutString(30,40, "this key is 13");
case 14:
GUI_PutString(30,48, "this key is 14");
case 15:
GUI_PutString(30,56, "this key is 15");
}
}
}
/********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -