基本输入输出单元与编程

输出电路

基本输出元件:发光二极管(Light Emitting Diode)

灌入的最大电流为 10 mA

拉出的最大电流为 1 mA

单片机输出低电平时驱动能力尚可,输出高电平时驱动能力很差。

输入电路

基本输入元件:按钮(Button)或开关(Switch)

当按键未按下压时,Px.n端口为高电平;按压按键后为低电平。

实例 独立按键识别

【要求】采用独立按键方式实现下述功能:开机时LED全熄,然后根据按键动作使相应灯亮,并将亮灯状态保持到按压其它键时为止。

独立按键——每个按键都彼此独立地各占有一位I/O口线。特点是电路简单,但占用I/O口线较多。

【分析】

为使按键抬起后LED能保持先前的点亮状态,需要在按键未压下期间禁止向P2输出P0状态值。

参考程序如下:

void main( ) {char key = 0;         //定义按键变量while(1){key = P0 & 0x0f;     //读取按键状态,高4位清零if (key != 0x0f) P2 = key;  //有按键动作时,P0状态值送P2}
}

实例 键控流水灯

【要求】

K1为“启动键”,首次按压K1可产生“自下向上” 的流水灯运动;

K2 为“停止键”,按压K2可终止流水灯的运动;

K3和K4为“方向键”,分别产生 “自上向下”和 “自下向上” 运动。

思路分析:设立状态标志变量→根据键值修改标志值→根据标志值控制灯的亮灭

总体关系流程图如下:

获取按键状态

状态

无按键—— xxxx 1111B   0x0f

按压K1——xxxx 1110B   0x0e

按压K2——xxxx 1101B   0x0d

按压K3——xxxx 1011B   0x0b

按压K4——xxxx 0111B  0x07

按键动作判断——(P0 & 0x0f)是否等于 0x0f?若是,说明无按键动作,反之则有按键动作。

修改方向和启停标志值

switch(P0 & 0x0f){
case 0x0e:run=1;break,
case 0x0d:run=0,dir=0;break,
case 0x0b: dir=1,break,
case 0x07: dir=0;break,
}

D1D4循环方向控制

P2口亮灯编码

xxxx 1110

xxxx 1101

xxxx 1011

xxxx 0111

char led [ ] = {0xfe,0xfd,0xfb,0xf7};
for (i=0; i<=3; i++){ P2 = led [i]; } //↓移动
for (i=3; i>=0; i-- ) { P2 = led [i]; } //↑移动

#include "reg51.h"
char led[]={0x01,0x02,0x04,0x08};
void delay(unsigned int time){unsigned int j= 0;for(;time>0;time--)for(j=0;j<125;j++);
}
void main(){bit dir =0,run=0;//标志位初始化char i;while(1){switch(P0 & 0x0f){    //根据键值修改标志位case 0x0e:run=1;break;case 0x0d:run=0;dir=0;break;case 0x0b:dir=1;break;case 0x07:dir=0;break;}if(run)    //若run=dir=1,自上而下流动if(dir)for(i=0;i<=3;i++){P2=led[i];delay(200);}else     //若run=l,dir=0, 自下而上流动for(i=3;i>=0;i--){P2=led[i];delay(200);}else P2=0;   //若run=0,灯全灭}
}

实例2原理图与程序界面图

实例2程序运行效果

I/O端口的简单应用相关推荐

  1. 如何设置阿里云安全组?开放和关闭端口很简单

    阿里云安全组概述 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程 在购买阿里云ECS服务器的时候,阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组.那么,这个安 ...

  2. 公司邮件服务器端口mail2000,简单邮件传输协议SMTP—邮件服务器DBMail

    SMTP概念 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/ ...

  3. 无线网络渗透测试系列学习(二) - 在VMware中搭建Metasploit靶机的详细步骤以及端口的简单了解

    引言: 无线网络渗透测试系列学习目录: 无线网络渗透测试系列学习(一) - 在Windows系统下使用虚拟机安装Kali Linux操作系统 在上一篇文章中我们讲解了在Windows下如何在VMwar ...

  4. python扫描端口脚本_Python端口扫描简单程序

    本文实例为大家分享了Python端口扫描的实现代码,供大家参考,具体内容如下 获取本机的IP和端口号: import socket def get_my_ip(): try: csock = sock ...

  5. linux+awk过滤端口,Awk简单过滤[1]

    I. 示例: 简单的记录了awk条件过滤和赋值变量来进行判断的过滤实例 [root@LinuxEA awk]# cat test1 3 aa bb 4 ss gg 1 ssyyu 6 ddf 8 ff ...

  6. IOCP 简单的完成端口读写文件

    IOCP 简单的完成端口读写文件 简单的移动文件代码 IOCP详细讲解 注意:IO完成端口它其实是一个内核对象,不要认为它是SOCKET中的端口. 简单的移动文件代码 // IOCP.cpp : 此文 ...

  7. 理解I/O Completion Port(完成端口)

    欢迎阅读此篇IOCP教程.我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼.OK,但我不能保证你明白IOCP的一切,但我会尽我 ...

  8. 常见TCP/UDP端口

    常见TCP端口: ftp:   21号端口,文件传输协议. ssh:   22号端口,安全(SSH)服务 telnet: 23号端口,用户可以以自己的身份远程连接到主机上 smtp:  25号端口,简 ...

  9. 使用 python-nmap 进行端口扫描

    利用 python-nmap模块进行端口扫描,简单的实现方式 实现了三种输入方式 1)单个端口扫描,例如 python scanport.py -H host -P port 2)多个端口扫描,例如 ...

最新文章

  1. ORACLE初次安装自动安装软件包
  2. 前沿地带:从量子计算到量子互联网
  3. android cmd 右键菜单不见了,为Windows右键菜单提供打开命令行选项
  4. Oracle语句生成+存储过程测试工具发布:Easytran V0.1
  5. openwrt 格式化_OPENWRT扩展系统到U盘
  6. 初中变成了菜园子了!
  7. java序列化(六) - protostuff序列化
  8. 自定义数字格式字符串_部分分隔符和条件格式
  9. 16.UNIX 环境高级编程--网络IPC:套接字
  10. 稳压二极管型号详解(额定功耗3W)
  11. 《2021企业数智化转型升级服务全景图/产业图谱1.0版》重磅发布
  12. gif透明背景动画_软件|电脑GIF录制软件,强烈推荐!
  13. 制作u盘winpe启动盘_干货| 如何制作U盘启动盘安装操作系统
  14. mysql 生日提醒
  15. 年终盘点 | 用Python分析了上千个基金,终于发现了赚钱的秘密!
  16. 数据分析网站-竞品分析数据来源
  17. 智能座舱之HUD-发展趋势深度解析
  18. 教你用Python自制拼图小游戏,一起来玩吧
  19. [洛谷P3975][TJOI2015]弦论
  20. Android8.0 悬浮窗的实现

热门文章

  1. saturn 源码解析
  2. 《摩诃般若波罗蜜多心经》新译 何新 译
  3. svn add *归档当前目录下的所有文件和存在的问题
  4. 小技巧大用处!这些渠道让你的群发邮件更省心
  5. 【算法】时域处理方法
  6. 高级计算机网络实验题
  7. 面试官提问关于c语言知识,c语言面试的问题分析.doc
  8. Linux bridge table(brctl)
  9. ubuntu中配置好清华的apt源
  10. solaris系统光盘无法弹出