51单片机简单的输入输出(LED和按键)

内容分享3周前发布
0 3 0

IO输出与输入 是单片机编程最基本的逻辑控制操作,我们以N76E003为例讲解最基本的编程。

51单片机简单的输入输出(LED和按键)

如上图,P15为IO输出,输出高电平时,LED灯亮,输出低电平时,LED灭。

P04作为输入,由于没有外部上拉,所以此处需要配置为内部上拉,配置为准双向模式,并且使能内部上拉。测试时用杜邦线将P04短接到GND模拟按键触发(P04引脚低电平时),不短接到GND就是高电平,不触发。

当P04为低电平时,LED亮;当P04为高电平时,LED灭。通过简单的例程来测试输入输出控制。

51单片机简单的输入输出(LED和按键)

#include “N76E003.h”

#include “Function_define.h”

#include “SFR_Macro.h”

#define LEDP15//高电平亮

#define KEYP04//按键,按下为低电平

void main(void)

{

/*设置P15为输出推挽模式 */

P15_PushPull_Mode;

/* 默认灯灭*/

P15 = 0;

/* 设置P04为准双向模式 */

P04_Quasi_Mode;

/*并且输出高电平,打开内部上拉功能 */

P04 = 1;

while(1)

{

/* 如果按键按下,点亮LED灯*/

if(KEY == 0)

{

LED = 1;

}

/* 否则熄灭LED */

else

{

LED = 0;

}

}

}

00:00

以上的按键采用查询的方式,在主循环里每次循环都去扫描下P04的电平状态。

我们都知道,输入触发还可以通过中断事件来捕获,那么该怎么配置IO输入中断呢?同样我们以P04被拉低作为触发条件(从高电平到低电平,下降沿触发),当触发中断时,LED亮灭切换。

#include “typedef.h”

#include “N76E003.h”

#include “Function_define.h”

#include “SFR_Macro.h”

#define LEDP15//高电平亮

#define KEYP04//按键,按下为低电平

void PinInterrupt_ISR (void) interrupt 7

{

if(PIF == (1<<4))/* Pin4 */

{

LED = !LED;/* LED控制取反*/

}

PIF = 0x00; /* 清除中断标志 */

}

void main(void)

{

P15_PushPull_Mode;/*设置P15为输出推挽模式 */

LED = 0;/* 默认灯灭*/

P04_Quasi_Mode;/* 设置P04为准双向模式 */

P04 = 1;/*并且输出高电平,打开内部上拉功能 */

Enable_INT_Port0;/*配置P0端口 中断*/

Enable_BIT4_FallEdge_Trig;/*下降沿触发*/

PIF = 0;/* 清除中断标志*/

set_EPI;/* 使能IO输入中断*/

set_EA;/* 使能总中断 */

while(1)

{

}

}

在新唐003芯片,输入中断这里,所有IO输入中断都共享一个中断入口。进入中断里再判断是哪一个引脚触发的。

另外,不得不说,新唐挖了个坑,同一时刻 只能有一个端口使能中断,要么P0口,要么P1口,或者P2.0/P3.0引脚。所以在设计电路时特别要注意,不要将用于中断的IO布置在不同端口(输入中断唤醒功能在低功耗应用时常常用到)。切记,切记,切记!

还有P20引脚只能用作输入,并且是与RST外部复位复用的,使用时要先配置,使用时当心。

(END)

感谢观看

© 版权声明

相关文章

3 条评论

您必须登录才能参与评论!
立即登录
  • 头像
    翻跟斗的狐狸 读者

    基本不用汇编

    无记录
  • 头像
    山上有辣椒蜂蜜 读者

    收藏了,感谢分享

    无记录
  • 头像
    小萝卜卷_ 投稿者

    汇编懂不,大神

    无记录