实验名称: 按键测试
实验目的: 熟悉ADS使用,熟悉c编程
实验原理:
GPF1,GPF4,GPF2,GPF0分别控制K1,K2,K3,K4,未按键时,端口读入高电平,按键按下,对应端口读入低电平。
前次实验实现了对蜂鸣器的控制,只要调整蜂鸣器响与不响之间的延时,就可以达到改变声响频率的目的。
实验步骤:
Init.s与前几次一样,不再赘述。
Main.c实现按键控制蜂鸣器频率调整。代码如下:
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
#define GPFCON (*(volatile unsigned *)0x56000050)
#define GPFDAT (*(volatile unsigned *)0x56000054)
#define GPFUP (*(volatile unsigned *)0x56000058)
void Delay(unsigned int i)
{
unsigned int j;
while(i--)
//for (k=0;k<=0xff;k++)
for (j=0;j<=0xff;j++);
}
void BuzzerOn()
{
GPBDAT =0x001;// 使buzzer响
}
void BuzzerOff()
{
GPBDAT =0x000;
}
void BuzzerCount(unsigned int count)
{
count=100*count;
if(count!=0)
{
BuzzerOn();
Delay(count);
BuzzerOff();
Delay(count);
}
}
unsigned char KeySet()
{
unsigned char KeyValue;
KeyValue=0;
if((0x02&GPFDAT)==0) KeyValue=2; //GPF1-->K1,低电平 按下
if((0x10&GPFDAT)==0) KeyValue=4; //GPF4-->K2
if((0x04&GPFDAT)==0) KeyValue=8; //GPF2-->K3
if((0x01&GPFDAT)==0) KeyValue=16; //GPF0-->K4
return KeyValue;
}
void BuzzerMain() //按不同的键有不同频率的声音,松开按键不会发声
{
GPBCON=0xfffffd;//GPB0
GPBUP =0xfff;//使用的口不上拉
GPFCON=0xfcc0;//GPF0,1,2,4设为输入,其他RESERVED
GPFUP=0xff;//不上拉
BuzzerOff();
while(1)
{
BuzzerCount(KeySet());
}
}
实验心得:
程序不难,但还是调了两个小时,有个小错没看出来,判断按键时有个数与错了,结果蜂鸣器一直响。还有就是不能太迷信网上资料,我原来的端口设置就是照抄的,后来检查出来了,浪费不少时间。