本帖最后由 zjsyjbb 于 2011-12-19 22:07 编辑
在GPIO流水灯的基础上,今天又学习了下如何操作M0的按键,并利用按键对LED灯进行控制.总体上来说跟操作LED的差不多,主要是对端口要进行设置,如何处理按键.在这次学习中充分利用到了51的支持点,比如说如何处理按键的去抖,按键标志位的设定,从这里看出,51的知识点是可以通用的.区别在于操作上先进了,哈哈.
下面贴出我的主程序.
/*------------------------------------------------------------------------- */
/* 实现目标:使用按键对助学班上的四个LED灯进行点亮,熄灭操作 */
/* 作者:小彬 */
/* 时间:2011年12月16日 */
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
/*延时子程序----------------------------------------------------------------*/
/*延时时间:k mS(在12M的晶振频率下)--------------------------------------------*/
void delay_ms(uint32_t k)
{
uint32_t i,j;
for(i=k;i>0;i--)
for(j=2395;j>0;j--);
}
/*---------------------------------------------------------------------------*/
/* 主程序 */
/*---------------------------------------------------------------------------*/
int main (void)
{
uint8_t flag = 0; //标志位的设置
uint8_t count = 0; //计数标志的设置
/*系统时钟设置*/
UNLOCKREG();
SYSCLK->WRCON.XTL12M_EN = 1;
delay_ms(100); //此处要注意,延时一段时间等待外部晶振就绪,上次没注意.
LOCKREG();
/*对M0端口的设置*/
DrvGPIO_Open(E_GPA,2, E_IO_OUTPUT); //四个LED设置为输出
DrvGPIO_Open(E_GPA,3, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA,4, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA,5, E_IO_OUTPUT);
DrvGPIO_Open(E_GPB,14,E_IO_INPUT ); //按键端口设置为输入
DrvGPIO_Open(E_GPB,15,E_IO_INPUT );
while(1)
{
if (DrvGPIO_GetBit(E_GPB,14) == 0) // 当检测到有按键按下时,即KEY2按下,可对照原理图
delay_ms(50); //类似于51的按键操作,软件延时实现去抖功能
if (DrvGPIO_GetBit(E_GPB,14) == 0) //确认按键KEY2确实被按下了
flag = 1; //标志位设定为1,进行后续操作
if(flag)
{
if (DrvGPIO_GetBit(E_GPB,14) == 1) //等待按键释放
{
flag = 0; //标志位恢复
count++; //计数值增加
}
}
if(count>=9) count =1; //计数量超出则恢复
switch(count)
{
case 1: DrvGPIO_ClrBit(E_GPA,2); break; //操作对应的四个LED
case 2: DrvGPIO_SetBit(E_GPA,2); break;
case 3: DrvGPIO_ClrBit(E_GPA,3); break;
case 4: DrvGPIO_SetBit(E_GPA,3); break;
case 5: DrvGPIO_ClrBit(E_GPA,4); break;
case 6: DrvGPIO_SetBit(E_GPA,4); break;
case 7: DrvGPIO_ClrBit(E_GPA,5); break;
case 8: DrvGPIO_SetBit(E_GPA,5); break;
default:break;
}
}
} //注意多预留几行空白行,可消除警告
个人小结:这次学习中,有几个小问题要注意.
1.时钟配置时要注意延时一段时间等待时钟就绪.
2.最后程序写完时要预留出1段空白行,否则会有警告,这个比较新鲜,编写51时没有这样的警告.
最后附上程序压缩包
按键控制LED灯.rar
(719.06 KB)
|