本帖最后由 weshiluwei6 于 2011-4-25 15:33 编辑
本人是新手,只能发些比较简单的程序。高手勿拍。
此程序实现:按KEY,一次一个灯亮。2次2个等亮。3次3个灯亮。4次4个灯亮。5次一个灯,周而复始
以前玩过 51, 经常写按键程序只加个去抖延时或者有时候不加都无所谓,松手检测更是没加过;
今天编了M0的按键,开始什么都没加,可是程序问题很大,后来加了消抖,稍微好点,但是还是不稳定,最后加了松手检测才算成功。
请问:这个按键和单片机有关么?感觉差距挺大的。
/*---------------------------------------------------------------------------------------------------------*/
/* */
/* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved. */
/* */
/*---------------------------------------------------------------------------------------------------------*/
#include <stdio.h>
#include "NUC1xx.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"
uint32_t signal;
void delay_loop(void)
{
uint32_t i,j;
for(i=500;i>0;i--)
for(j=110;j>0;j--);
}
/***************************************************************************:**************
** 文件名称:NUC120_HOT_UART.c
** 文件说明:NUC120助学板按键小程序
** 创建日期:2011-04-025
** 修改日期:
** 现 象:按KEY,一次一个灯亮。2次2个等亮。3次3个灯亮。4次4个灯亮。
5次一个灯,周而复始
(新手练习入门程序)
** 备 注:
***********************************************************:****::************************/
int main (void)
{
/* SYSCLK =>12Mhz*/
UNLOCKREG();
SYSCLK->WRCON.XTL12M_EN = 1;
LOCKREG();
/*set GPI0 output*/
DrvGPIO_Open(E_GPA,2, E_IO_OUTPUT);
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,15,E_IO_INPUT); //按键设置为输入
while(1)
{
if((DrvGPIO_GetBit(E_GPB,15) == 0) && (signal == 0))
{
delay_loop();
if((DrvGPIO_GetBit(E_GPB,15) == 0) && (signal == 0))
{
DrvGPIO_ClrBit(E_GPA,2);
DrvGPIO_SetBit(E_GPA,3);
DrvGPIO_SetBit(E_GPA,4);
DrvGPIO_SetBit(E_GPA,5);
signal = 1;
}
while(DrvGPIO_GetBit(E_GPB,15) == 0);
}
if( (DrvGPIO_GetBit(E_GPB,15) == 0) && (signal == 1))
{
delay_loop();
if( (DrvGPIO_GetBit(E_GPB,15) == 0) && (signal == 1))
{ DrvGPIO_ClrBit(E_GPA,2);
DrvGPIO_ClrBit(E_GPA,3);
DrvGPIO_SetBit(E_GPA,4);
DrvGPIO_SetBit(E_GPA,5);
signal = 2;
}
while(DrvGPIO_GetBit(E_GPB,15) == 0);
}
if( (DrvGPIO_GetBit(E_GPB,15) == 0) && (signal == 2))
{
delay_loop();
if( (DrvGPIO_GetBit(E_GPB,15) == 0) && (signal == 2))
{
DrvGPIO_ClrBit(E_GPA,2);
DrvGPIO_ClrBit(E_GPA,3);
DrvGPIO_ClrBit(E_GPA,4);
DrvGPIO_SetBit(E_GPA,5);
signal = 3;
}
while(DrvGPIO_GetBit(E_GPB,15) == 0);
}
if( (DrvGPIO_GetBit(E_GPB,15) == 0) && (signal == 3))
{
delay_loop();
if( (DrvGPIO_GetBit(E_GPB,15) == 0) && (signal == 3))
{
DrvGPIO_ClrBit(E_GPA,2);
DrvGPIO_ClrBit(E_GPA,3);
DrvGPIO_ClrBit(E_GPA,4);
DrvGPIO_ClrBit(E_GPA,5);
signal = 0;
}
while(DrvGPIO_GetBit(E_GPB,15) == 0);
}
}
}
|