本帖最后由 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);
- }
- }
- }
|