/**********************按键实验*********************************/
// 公司名称 :保定飞凌嵌入式技术有限公司
// 描 述 :按键控制蜂鸣器
// 版 权 :保定飞凌嵌入式技术有限公司
// 网 址 :www.witech.com.cn
/***************************************************************/
/*
本实验接口说明
GPB0 ------ 蜂鸣器控制口
GPF0 ------ 按键S2
GPF2 ------ 按键S3
GPF3 ------ 按键S4
GPF4 ------ 按键S5
*/
/*------------------------地址声明-----------------------------*/
#define GPFCON (*(volatile unsigned *)0x56000050)
#define GPFDAT (*(volatile unsigned *)0x56000054)
#define GPFUP (*(volatile unsigned *)0x56000058)
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
/*-----------------------函数声明----------------------------*/
void Delay(int count);
void Beep_On(void);
void Beep_Off(void);
void BeepCount(unsigned char count);
unsigned char KeyNum(void);
/*------------------------------------------------------------/
函数名称: Delay
功能描述: 延时函数 延时count毫秒
传 参: int count
返 回 值: 无
-------------------------------------------------------------*/
void Delay(int count)
{
unsigned int i;
while (--count != 0)
{
for (i=0; i<255; i++); // ";" 表示空语句,CPU空转。
}
}
/*------------------------------------------------------------/
函数名称: Beep_On
功能描述: 打开蜂鸣器
蜂鸣器控制口拉高后,蜂鸣器开始工作
传 参: 无
返 回 值: 无
-------------------------------------------------------------*/
void Beep_On(void)
{
GPBDAT |= 0x01;
}
/*------------------------------------------------------------/
函数名称: Beep_Off
功能描述: 关闭蜂鸣器
蜂鸣器控制口拉低后,蜂鸣器停止工作
传 参: 无
返 回 值: 无
-------------------------------------------------------------*/
void Beep_Off(void)
{
GPBDAT &= 0xfffe;
}
/*------------------------------------------------------------/
函数名称: BeepCount
功能描述: 打开蜂鸣器
蜂鸣器控制口拉高后,蜂鸣器开始工作
传 参: 无
返 回 值: 无
-------------------------------------------------------------*/
void BeepCount(unsigned char count)
{
unsigned int time;
time = count * 1200;
if (time != 0)
{
Beep_On();
Delay(time);
Beep_Off();
Delay(time);
}
}
/*------------------------------------------------------------/
函数名称: KeyNum
功能描述: 按键扫描程序
不同的按键按下 有不同的蜂鸣器工作时间返回值
传 参: 无
返 回 值: unsigned char KeyTemp
-------------------------------------------------------------*/
unsigned char KeyNum(void)
{
unsigned char KeyTemp;
KeyTemp = 0;
//根据按键的不同 蜂鸣器工作时间依次加倍
if ((GPFDAT&0x01) == 0) KeyTemp = 1;
if ((GPFDAT&0x04) == 0) KeyTemp = 2;
if ((GPFDAT&0x08) == 0) KeyTemp = 4;
if ((GPFDAT&0x10) == 0) KeyTemp = 8;
return KeyTemp;
}
/*-------------------------------------------------------------
函数名称: keyMain
功能描述: 入口程序
初始化后,进入按键扫描死循环
传 参: 无
返 回 值: int 0
-------------------------------------------------------------*/
int keyMain(void)
{
GPFCON = 0x3FFC0C; // GPF0,GPF2,GPF3,GPF4设置为输出
GPBCON |= 0x01; // GPB0 输出有效
GPBUP = 0XFFF;
GPFUP = 0XFF;
Beep_Off(); // 关闭蜂鸣器
while (1) // 死循环
{
BeepCount(KeyNum());
}
return 0;
}