前言
上期我们讲了通用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的中断呢?如何让当前程序执行起来比较高效呢?请继续关注我的博客。
授人以鱼不如授人以渔,这里我就不发布源码了,希望大家能靠自己慢慢理解。