[MINI51] mini51学习第一帖GPIO+EINT0 照葫芦画瓢

[复制链接]
2584|2
 楼主| cnjxlxp 发表于 2012-2-1 21:44 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2012-9-22 12:42 编辑

根据lixiaoxu2meng的例子修改而成,加入按键防抖

晚上下载了li的例程来学习,学习中发现按键抖动的问题。所以就加了按键防抖发上来充数了哈。。。

需要的直接下载附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
hotpower 发表于 2012-2-2 00:09 | 显示全部楼层
照葫芦画瓢???能画即有长处!!!

俺还不会画呢~~~

建议将主程序关键代码贴出~~~
 楼主| cnjxlxp 发表于 2012-2-2 19:53 | 显示全部楼层
  1. #include "Mini51.h"
  2. #include "DrvGPIO.h"
  3. #include "DrvSYS.h"

  4. void EINT0Callback(void);
  5. void delay_ms(uint32_t count);
  6. void clock_init(void);
  7. void port_init(void);
  8. void eint0_init(void);
  9. void sys_init(void);

  10. uint8_t count;

  11. void delay_ms(uint32_t count)
  12. {
  13.     uint32_t i,j;
  14.         for(i=count;i>0;i--)
  15.            for(j=2395;j>0;j--);
  16. }

  17. void clock_init(void)
  18. {
  19.    UNLOCKREG();       
  20.    DrvSYS_Open(XTL_CLK);// external 12M as clock
  21.    while (DrvSYS_GetChipClockSourceStatus(XTL_CLK) != 1); //use delay is ok too
  22.    LOCKREG();                                                         
  23. }

  24. void port_init(void)
  25. {
  26.     DrvGPIO_Open(E_PORT3, E_PIN1, E_IO_OUTPUT);//LED0
  27.     DrvGPIO_Open(E_PORT3, E_PIN6, E_IO_OUTPUT);//LED1
  28.     DrvGPIO_Open(E_PORT5, E_PIN2, E_IO_OUTPUT);//LED2
  29.         DrvGPIO_Open(E_PORT2, E_PIN6, E_IO_OUTPUT);//LED3
  30. }

  31. void eint0_init(void)
  32. {
  33.     DrvGPIO_InitFunction(FUNC_EXTINT0);
  34.     DrvGPIO_EnableEINT(E_EINT0_PIN, E_IO_FALLING, E_MODE_EDGE, EINT0Callback);
  35. }

  36. void EINT0Callback(void)
  37. {  
  38.            DrvGPIO_DisableEINT (E_EINT0_PIN);//disable intp0
  39.         delay_ms(20);                  //chattering ignore
  40.         if (DrvGPIO_GetBit (E_PORT3, E_PIN2)== 0)////chattering ignore
  41.         {
  42.           count=!count;
  43.         }   
  44.         DrvGPIO_EnableEINT(E_EINT0_PIN, E_IO_FALLING, E_MODE_EDGE, EINT0Callback); //enable intp0 again
  45. }

  46. void sys_init(void)
  47. {
  48.          clock_init();
  49.          port_init();
  50.          eint0_init();
  51. }

  52. int main (void)
  53. {
  54.     sys_init();

  55.         while(1)
  56.         {

  57.         if(count)
  58.           DrvGPIO_ClrBit(E_PORT3, 1);
  59.         else
  60.           DrvGPIO_SetBit(E_PORT3, 1);

  61.         }
  62. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

46

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部