打印
[菜农助学交流]

呵呵 第二贴 与第一帖子 隔了太久

[复制链接]
1787|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
l545742117|  楼主 | 2012-4-1 19:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
gp, IO, pi, GPIO, LED
/*程序功能:按下KEY2键四个LED开始闪烁,蜂鸣器叫*/
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
void delay_ms(uint32_t x)           //延时函数
{
uint32_t i,j;
for(i=900;i>0;i--)
  for(j=x;j>0;j--);
}
/*外部中断0回调函数  */
void EINT0CALLBACK( void )
{
DrvGPIO_SetBit( E_GPB, 10);
}
int main( void )
{
DrvGPIO_EnableInt( E_GPB, 14, E_IO_FALLING, E_MODE_EDGE);        //设置端口GPB14为外部中断模式   
    DrvGPIO_EnableDebounce(E_GPB, 14);
DrvGPIO_InitFunction( E_FUNC_EXTINT0);                         //指定外部中断0引脚功能
DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT);                              //设定端口GPB10为输出模式
DrvGPIO_ClrBit(E_GPB, 10);                //开始时关闭蜂鸣器
DrvGPIO_EnableEINT0( E_IO_FALLING, E_MODE_EDGE, EINT0CALLBACK);
while(1)
{
  if(DrvGPIO_GetBit( E_GPB, 14)==0)
   {
     DrvGPIO_SetPortBits(E_GPA,0XFFC3);        //  LED全亮
  delay_ms(4000) ;
  DrvGPIO_SetPortBits(E_GPA,0XFFFF)   ;       //  LED全灭
  delay_ms(1000) ;
  DrvGPIO_SetBit(E_GPB,10) ;          //蜂鸣器响
  delay_ms(3000);             //关掉蜂鸣器
  DrvGPIO_ClrBit(E_GPB, 10);
  delay_ms(3000) ;
     DrvGPIO_SetPortBits(E_GPA,0XFFC3);        //  LED全亮
  delay_ms(4000) ;
  DrvGPIO_SetPortBits(E_GPA,0XFFFF)   ;       //  LED全灭
         
    }
}
}

相关帖子

沙发
john_lee| | 2012-4-1 20:57 | 只看该作者
lz,你的delay_ms()函数准确吗?在不同的时钟频率下,如何才能做到通用?望lz考虑。

使用特权

评论回复
板凳
l545742117|  楼主 | 2012-4-4 20:02 | 只看该作者
如果时钟频率不变的话,他是准确的。这是我所知道的软件定时,如果要通用的话,我的觉得可以采用外部电路的硬件定时是一个很好的方法。(用外部中断的方式定时)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:家宝哥说:年轻人要不断的努力学习!

0

主题

221

帖子

1

粉丝