通用IO(二)

前言

上期我们讲了通用IO的功能寄存器和方向寄存器的使用。不了解的童鞋可以翻看我的博客,这期我们讲讲配置寄存器的使用。

我们已经可以实现灯的闪烁了,但我们不知道怎么控制它不要一直闪烁。这时候我们需要用到的是按键,我们需要检测按键是否按下去了。这时候我们就需要用到配置寄存器。

配置寄存器PxINP的配置

关于配置,无非就是配置0和1嘛,而配置寄存器配置为0代表上拉/下拉状态。1代表三态
具体配置如下,假设按键是P0_3口,

P0INP |=1<<3;//设置为三态

是不是so easy
那么如何控制灯的闪烁呢?

大体思路是配置LED的初始化,按键的初始化。
/*定义LED1*/
#define LED1 P0_1
/*定义按键*/
#define SW1 P0_3
void LEDinit()//LED的初始化
{
    P0SEL&=~(1<<1);//配置通用IO
    PODIR |=1<<1;//配置输出模式
}
void KEYinit()
{
    P0SEL &=~(1<<3);//配置通用IO
    P0DIR &=~(1<<3);//配置输入模式
    P0INP |=1<<3;//配置为三态
}
void main()
{
/*LED的初始化*/
    LEDinit();
    LED1=0;
/*按键的初始化*/
    KEYinit();
    while(1)
    {
        if(SW1==0)//判断按键是否按下
        {
            Delay(100);//去抖操作
            if(SW1==0)//再次检测按键是否按下
            {
                while(!SW1);//等待按键释放
                LED1=~LED1;        
            }
        }
    }
}

通过上面的小程序是否很快就掌握了配置寄存器的使用。上面的小程序是利用查询的方式来检测按键是否按下。这样子的毛病是当手不松开时,程序就无法执行下面的代码了,程序的利用率就很低效,那么有解决方法吗?

当然有啦!中断方式嘛!

那么我们该如何设置IO的中断呢?如何让当前程序执行起来比较高效呢?请继续关注我的博客。

授人以鱼不如授人以渔,这里我就不发布源码了,希望大家能靠自己慢慢理解。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值