/**
** 工程名称:led
** 功能描述流水灯+蜂鸣器
** 硬件平台:研究生ARM11实验平台
** 编译环境:RVDS
** 版本信息:v0.0
** 编写时间:2012.4.11
** 附加说明:原理图上的管脚对应关系如下:
** GPK0(LED8) GPK1(LED7)
** GPK2(LED6) GPK3(LED5)
** GPK4(LED4) GPK5(LED3)
** GPK6(LED2) GPK7(LED1)
** GPM3(NLED4) GPF15(PWM_TOUT1)
** 通过控制GPF15端的高低电平,来控制蜂鸣器的鸣叫;通过控制GPK端的高低电平,来控制LED灯的亮灭。
** 修改记录:无
**/
/*寄存器地址宏定义*/
#define rGPKCON0 (*(volatile unsigned *)(0x7F008800))
#define rGPKDAT (*(volatile unsigned *)(0x7F008808))
#define rGPKPUD (*(volatile unsigned *)(0x7F00880C))
#define rGPMCON (*(volatile unsigned *)(0x7F008820))
#define rGPMDAT (*(volatile unsigned *)(0x7F008824))
#define rGPMPUD (*(volatile unsigned *)(0x7F008828))
#define rGPFCON (*(volatile unsigned*)(0x7F0080A0))
#define rGPFDAT (*(volatile unsigned*)(0x7F0080A4))
#define rGPFPUD (*(volatile unsigned*)(0x7F0080A8))
/*函数声明*/
void msDelay(int time);
void GPIO_Init(void);
void switch_on(void);
void LedTest(void);
void BeepOn();
void Beepoff();
/*主函数部分*/
void Main(void)
{
GPIO_Init();
LedTest();
}
/*延时子函数*/
void msDelay(int time)
{
volatile unsigned int i,j;
for(i=0;i<20000;i++)
for(j=0;j<time;j++);
}
/*GPIO端口初始化*/
void GPIO_Init(void)
{
rGPKCON0 = 0x11111111; //output GPK0~GPK7
rGPKPUD = 0x00000000; //禁止上下拉
rGPKDAT = 0x00FF; //初始化灯全灭
rGPMCON = 0x111111; //output GPM0~GPM7
rGPMPUD = 0x000; //禁止上下拉
rGPMDAT = 0x08; //GPM3为高电平
rGPFCON =0x40000000; //令GPF15(PWM TOUT[1])为output模式
rGPFPUD =0x00000000; //禁止上下拉
rGPFDAT =0x0000; //初始值为0
}
/*锁存器上升沿*/
void switch_on(void)
{
rGPMDAT = 0x00;
rGPMDAT = 0x08; //NLED4上升沿有效
}
/*蜂鸣器打开*/
void BeepOn(void)
{
rGPFDAT =rGPFDAT|0x8000;
}
/*蜂鸣器关闭*/
void BeepOff(void)
{
rGPFDAT =0x0000;
}
/*led灯测试*/
void LedTest(void)
{
unsigned int k;
rGPMDAT = 0x1F;
msDelay(5);
while(1)
{
for(k = 0; k < 9;k++)
{
rGPKDAT = ~(0x1<<k);
switch_on();
msDelay(50);
}
for(k = 0; k < 8;k++)
{
rGPKDAT = ~(0x0080>>k);
switch_on();
msDelay(50);
}
for(k = 0; k < 3;k++)
{
rGPKDAT=0x00FF;
switch_on();
msDelay(50);
rGPKDAT=0x0000;
switch_on();
msDelay(50);
BeepOn();
msDelay(50);
BeepOff();
}
}
}
- 1
- 2
前往页