📄 main.c
字号:
/****************************************Copyright (c)**************************************************
**
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2008-10-23
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Way1201
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
uint32 key_flag=0,key_value=0;
/********************************************************************************************************
** 函数名称 :DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly 延时参数,值越大,延时越久
** 出口参数 :无
*********************************************************************************************************
*/
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
/*********************************************************************************************************
**函数名称:IRQ_Keyboarb
**函数功能:键盘扫描子程序
**调试说明:无
**入口参数:无
**出口参数:key_value
**
********************************************************************************************************/
__irq void SCAN_Keyboard(void)
{ uint32 temp;
T0IR =0x01; //关闭中断
VICVectAddr=0x00;
IO1CLR|= 0x00f00000; /* 键盘行信号清零 */
temp = IO1PIN&0x000f0000;
if(temp!=0x000f0000)
{
DelayNS(5);
temp = IO1PIN&0x000f0000;
if(temp!=0x000f0000)
{ key_flag=1;
IO1SET|= 0x00f00000; /* 扫描行信号0 */
IO1CLR|= 0x00800000;
temp = IO1PIN;
temp = temp&0x000f0000;
while(temp!=0x000f0000)
{ temp = IO1PIN&0x000f0000;
switch(temp)
{
case 0x000e0000:key_value=1;break;
case 0x000d0000:key_value=2;break;
case 0x000b0000:key_value=3;break;
case 0x00070000:key_value=4;break;
}
break;
}
IO1SET|= 0x00f00000; /* 扫描行信号1 */
IO1CLR|= 0x00400000;
temp = IO1PIN;
temp = temp&0x000f0000;
while(temp!=0x000f0000)
{
temp = IO1PIN&0x000f0000;
switch(temp)
{
case 0x000e0000:key_value=5;break;
case 0x000d0000:key_value=6;break;
case 0x000b0000:key_value=7;break;
case 0x00070000:key_value=8;break;
}
break;
}
IO1SET|= 0x00f00000; /* 扫描行信号2 */
IO1CLR|= 0x00200000;
temp = IO1PIN;
temp = temp&0x000f0000;
while(temp!=0x000f0000)
{
temp = IO1PIN&0x000f0000;
switch(temp)
{
case 0x000e0000:key_value=0x09;break;
case 0x000d0000:key_value=0x0a;break;
case 0x000b0000:key_value=0x0b;break;
case 0x00070000:key_value=0x0c;break;
}
break;
}
IO1SET|= 0x00f00000; /* 扫描行信号3 */
IO1CLR|= 0x00100000;
temp = IO1PIN;
temp = temp&0x000f0000;
while(temp!=0x000f0000)
{
temp = IO1PIN&0x000f0000;
switch(temp)
{
case 0x000e0000:key_value=0x0d;break;
case 0x000d0000:key_value=0x0e;break;
case 0x000b0000:key_value=0x0f;break;
case 0x00070000:key_value=0;break;
}
break;
}
}
}
//return key_value;
}
/*********************************************************************************************************
**函数名称:main()
**函数功能:使用定时器0定时检测键盘扫描
**调试说明:无
**
********************************************************************************************************/
int main (void)
{
PINSEL0|= 0x00030055; /* 设置管脚连接GPIO */
PINSEL1|= 0x20000000;
PINSEL2|= 0x00000004;
IO0DIR |= 0xffffffff;
IO1DIR |= 0x00f00000;
IO0SET |= 0xffffffff; /* 设置键盘控制口输入 */
IO0CLR |= 1<<4;
IRQEnable(); /* IRQ中断使能 */
/* 定时器0初始化 */
T0TC =0; /* 定时器设置为0 */
T0PR =0; /* 时钟不分频 */
T0MCR =0X03; /* 设置匹配后复位,并产生中断*/
T0MR0 =Fpclk/5; /* 时间定时20ms */
T0TCR =0x01; /* 启动定时器 */
/* 设置定时器0为IRQ中断*/
VICIntSelect= 0x00000000; /* 设置所有中断分配为IRQ中断 */
VICVectCntl0=0x20|0x04; /* 分配定时器0到向量中断0 */
VICVectAddr0=(uint32)SCAN_Keyboard; /* 设置中断服务程序地址 */
VICIntEnable=1<<0x04; /* 使能定时器0中断 */
IO1CLR|= 0x00f00000; /* 键盘行信号清零 */
while(1)
{IO0CLR|=1<<27;
//key_value=1;
if(key_flag==1)
{key_flag=0;
IO0SET|=1<<4;
DelayNS(25);
IO0CLR|=1<<4;
}
}
// add user source code
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -