📄 common.c
字号:
/******************************Copyright (c)*********************************
** 文件说明
**---------------------------------------------------------------------------
**文 件 名: common.c
**创 建 人: 杨宏伟(YGRAND)
**修 改 人: 杨宏伟(YGRAND)
**创 建 日 期:2003年10月19日
**最后修改日期: 2005年02月28日
**描 述: 公用函数定义,FOR ARM LPC2100
****************************************************************************/
#include "config.h"
/****************************************************************************
** 函数实现
*****************************************************************************/
/*===========================================================================
** 函数名称: delay()
** 功能描述: 软件延时
============================================================================*/
void delay(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
/*===========================================================================
** 函数名称: reset()
** 功能描述: 复位LCD,注意,有时需调整前后两个delay()的输入值大小
============================================================================*/
void reset(void)
{
IO1CLR = RES;
delay(50);
IO1SET = RES;
delay(50);
}
/*===========================================================================
** 函数名称: setPin()
** 功能描述: 设置PIN脚的功能选择和GPIO方向
============================================================================*/
void setPin(uint8 i)
{
switch(i)
{
case 0:
// 选择按8位接口分配IO功能
//PINSEL0 = 0xA0000000; // 设置IO口工作模式,P0.14设置为EINT1,P0.15设置为EINT2,P0.16设置为EINT0,P0.27~P0.31用于从JTAG
//PINSEL1 = 0x55400001; // 注意:当使用16位数据接口时应禁止外部中断0(EINT1)和外部中断2(EINT2)的设置
// 选择按16位接口分配IO功能
PINSEL0 = 0x00000005; // 设置IO口工作模式,P0为GPIO,EINT 0 有效(P0.16),P0.27,P0.28为AD转换输入
PINSEL1 = 0x01400001;
PINSEL2 = 0x00000004; // P1.16~P1.25为GPIO,P1.26~P1.31为调试端口
IO0DIR = 0xFFFFFFFF; // 设置GPIO控制口方向,所有管脚设置为输出
IO1DIR = 0xFFFFFFFF;
EXTMODE = 0x00; // 设置EINT0中断为电平触发模式
break;
case 1:
PINSEL0 = 0x00000000; // 设置IO口工作模式,P0为GPIO,EINT3 有效(P0.20)
PINSEL1 = 0x00000300;
PINSEL2 = 0x00000004; // P1.16~P1.25为GPIO,P1.26~P1.31为调试端口
IO0DIR = 0xFFFFFFFF; // 设置GPIO控制口方向,所有管脚设置为输出
IO1DIR = 0xFFFFFFFF;
EXTMODE = 0x00; // 设置EINT0中断为电平触发模式
break;
default:
;
}
}
/*===========================================================================
** 函数名称: setHL()
** 功能描述: 设置端口电平
============================================================================*/
void setHL(uint8 port,uint32 value)
{
switch(port)
{
case 0:
IO0SET = value;
IO0CLR = ~value;
break;
case 1:
IO1SET = value;
IO1CLR = ~value;
break;
default:
;
}
}
/*===========================================================================
** 函数名称: testPin()
** 功能描述: 测试端口用
============================================================================*/
void testPin(uint8 port,uint32 value)
{
switch(port)
{
case 0:
for(;;)
{
IO0SET = value;
IO0CLR = ~value;
}
break;
case 1:
for(;;)
{
IO1SET = value;
IO1CLR = ~value;
}
break;
default:
;
}
}
/*===========================================================================
** 函数名称: beep()
** 功能描述: 蜂鸣器发声,beep_bit为连接蜂鸣器的管脚(一般定义在P1口,P1.25),count控制蜂鸣长度
============================================================================*/
void beep(uint8 port,uint32 beep_bit,uint8 count,uint8 dly)
{
uint8 i;
switch(port)
{
case 0:
for(i=0;i<count;i++)
{
IO0CLR = beep_bit;
delay(dly);
IO0SET = beep_bit;
delay(dly);
}
break;
case 1:
for(i=0;i<count;i++)
{
IO1CLR = beep_bit;
delay(dly);
IO1SET = beep_bit;
delay(dly);
}
break;
default:
;
}
}
/*===========================================================================
** 函数名称: ledBlink()
** 功能描述: LED闪烁控制,LED闪烁控制,LED1-P0.22,LED2-P0.23,LED3-P0.24,LED4-P0.25
============================================================================*/
void ledBlink(uint32 startLedAdd,uint8 num,uint8 del,uint8 reCount)
{
uint8 i,j;
for(i=0;i<reCount;i++)
{
for(j=0;j<num;j++)
{
IO0CLR = startLedAdd<<j;
delay(del);
IO0SET = startLedAdd<<j;
delay(del);
}
}
}
/*===========================================================================
** 函数名称: waitKey()
** 功能描述: 暂停,直到按相应键后退出继续, 一般定义在KEY6(P0.21)
============================================================================*/
void waitKey(uint32 keyValue,uint32 led_bit)
{
uint32 i;
IO0DIR = ~keyValue;
//IO1SET = CS1;
//IO1SET = CS1_S;
while(1)
{ while( (IOPIN&keyValue)!=0 ) // 等待KEY键按下
{
IO0CLR = led_bit;
}
for(i=0; i<500; i++); // 延时去抖
if( (IOPIN&keyValue)!=0 )
break;
}
while( (IOPIN&keyValue)==0 ); // 等待KEY键放开
IO0SET = led_bit;
}
/*===========================================================================
** 函数名称: ledTest()
** 功能描述: 测试七彩灯
============================================================================*/
void ledTest(uint8 repetCount,uint8 dly)
{
uint8 j;
for(j=0;j<repetCount;j++)
{
IO0CLR = LED_R;
IO0CLR = LED_G;
IO0CLR = LED_B;
IO0SET = LED_R;
delay(dly);
IO0CLR = LED_R;
delay(dly);
IO0SET = LED_G;
delay(dly);
IO0CLR = LED_G;
delay(dly);
IO0SET = LED_B;
delay(dly);
IO0CLR = LED_B;
delay(dly);
}
}
/*===========================================================================
** 函数名称: shortTest()
** 功能描述: 控制端口短路检测
============================================================================*/
void shortTest(uint8 total_num,uint8 const *p_num,uint8 beep_count)
{
uint8 i,j;
//SET HIGH
for(i=0;i<total_num;i++)
{
IO1SET = 1<<p_num[i];
}
// SHORT TEST
for(i=0;i<total_num;i++)
{
IO1CLR = 1<<p_num[i];
for(j=i+1;j<total_num;j++)
{
if( (IO1PIN&(1<<p_num[j]))== 0 )
{
beep(1,BEEP_BIT,beep_count,20);
}
}
}
//SET LOW
for(i=0;i<total_num;i++)
{
IO1CLR = 1<<p_num[i];
}
// SHORT TEST
for(i=0;i<total_num;i++)
{
IO1SET = 1<<p_num[i];
for(j=i+1;j<total_num;j++)
{
if( (IO1PIN&(1<<p_num[j]))!= 0 )
{
beep(1,BEEP_BIT,beep_count,20);
}
}
}
}
/******************************************************************************
** End Of File
*******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -