📄 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: Chenxibing
** Modified date: 2005-01-14
** Version:
** Descriptions: GPIO按键输入实验。
**
********************************************************************************************************/
#include "config.h"
uint32 key;
int key_value(void)
{
uint32 temp;
uint32 i,j;
PINSEL0 = PINSEL0 & (~0xff); // 将P0.0~P0.7设置为按键控制输入端
//PINSEL1 = 0x00000000;
IO0DIR = 0x0f<<4; // 将P0.4~P0.7设置为输出;P0.0~P0.3默认输入
IO0SET=0x0f<<4; // 使P0.4~P0.7输出高电平
IO0CLR=1<<4; // 使P0.4输出低电平
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<<4; // 同上
IO0CLR=1<<5;
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<<4; // 同上
IO0CLR=1<<6;
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<<4; // 同上
IO0CLR=1<<7;
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++);
}
/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :GPIO输入实验测试。
** 检测按键KEY1。KEY1按下 ,蜂鸣器蜂鸣,松开后停止蜂鸣。
** 跳线说明 :把JP8的KEY1跳线短接,JP11连接蜂鸣器。
*********************************************************************************************************
*/
const uint32 KEY_TABLE[16] = {0x00,0x01,0x02,0x03, //LED灯键值
0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,
0x0c,0x0d,0x0e,0x0f};
const uint32 LEDS8 = (0xff << 18); // P1[25:18]控制LED8~LED1
int main(void)
{
PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]连接GPIO
IO1DIR = LEDS8; // 设置LED1控制口为输出
while(1) // 按键控制主函数,使用查询方式
{ IO1SET = LEDS8;
key_value();
IO1CLR = ((KEY_TABLE[key])<<18);
DelayNS(20);
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -