【51单片机快速入门指南】2:GPIO LED与按键

目录

  • 硬知识
    • 概念
    • I/O口配置
    • 准双向口/弱上拉输出配置
    • 开漏输出配置
  • 实战
    • 延时函数的生成
    • 闪烁一个LED灯
      • 源码
      • 实验现象
    • 流水灯
      • 源码
      • 实验现象
    • 按键控制LED灯
      • 按键介绍
      • 源码
      • 实验现象

普中51-单核-A2
STC89C52
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0


硬知识

概念

        GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。

I/O口配置

        STC89C52系列单片机所有I/O口均(新增P4口)有3种工作类型:准双向口/弱上拉(标准8051输出模式)、仅为输入(高阻)或开漏输出功能。STC89C52系列单片机的P1/P2/P3/P4上电复位后为准双向口/弱上拉(传统8051的I/O口)模式P0口上电复位后是开漏输出。P0口作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加10K-4.7K上拉电阻
        STC89C52的5V单片机的P0口的灌电流最大为12mA,其他1/0口的灌电流最大为6mA STC89LE52系列的3V单片机的PO口的灌电流最大为8mA,其他1/0口的灌电流最大为4mA.

准双向口/弱上拉输出配置

        准双向口输出类型可用作输出和输入功能而不需重新配置端口输出状态。这是因为当端口输出为1时驱动能力很弱,允许外部装置将其拉低。当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。准双向口有3个上拉晶体管适应不同的需要。
        在3个上拉晶体管中,有1个上拉晶体管称为“弱上拉”,当端口寄存器为1且引脚本身也为1时打开。此上拉提供基本驱动电流使准双向口输出为1。如果一个引脚输出为1而由外部装置下拉到低时,弱上拉关闭而“极弱上拉”维持开状态,为了把这个引脚强拉为低,外部装置必须有足够的灌电流能力使引脚上的电压降到门槛电压以下。
        第2个上拉晶体管,称为“极弱上拉”,当端口锁存为1时打开。当引脚悬空时,这个极弱的上拉源产生很弱的上拉电流将引脚上拉为高电平。
        第3个上拉晶体管称为“强上拉”。当端口锁存器由0到1跳变时,这个上拉用来加快准双向口由逻辑0到逻辑1转换。当发生这种情况时,强上拉打开约2个时钟以使引脚能够迅速地上拉到高电平。
在这里插入图片描述

开漏输出配置

        P0口上电复位后处于开漏模式,当P0管脚作I/O口时,需外加10K-4.7K的上拉电阻,当P0管脚作为地址/数据复用总线使用时,不用外加上拉电阻。
        当端口锁存器为0时,开漏输出关闭所有上拉晶体管。当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到Vcc。如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。这种方式的下拉与准双向口相同。
在这里插入图片描述

实战

在这里插入图片描述

延时函数的生成

使用软件延时计算器生成延时函数
系统频率选择和开发板上的晶振频率一致
在这里插入图片描述

在这里插入图片描述

闪烁一个LED灯

源码

#include <REGX52.H>
#include "intrins.h"sbit D1 = P2^0;			//将P2.0管脚定义为D1void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main(void)
{while(1){D1 = ~D1;Delay500ms();}
}

实验现象

烧录后可见D1闪烁
在这里插入图片描述

流水灯

由原理图可知,P2口控制的LED灯为低电平点亮。

源码

stdint.h内容见【51单片机快速入门指南】一、基础知识和工程创建

#include <REGX52.H>
#include "intrins.h"
#include "stdint.h"#define LED_PORT	P2	//使用宏定义P2端口void Delay500ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main(void)
{	uint8_t i = 0;LED_PORT= ~(uint8_t)1;while(1){//方法1:使用移位+循环实现流水灯for(i=0; i<8; i++){LED_PORT=~(0x01<<i);	//将1右移i位,然后取反将结果赋值到LED_PORTDelay500ms();}for(i=0; i<8; i++){LED_PORT=~(0x80>>i);	//将1右移i位,然后取反将结果赋值到LED_PORTDelay500ms();}//方法2:使用循环+_crol_或_cror_函数实现流水灯for(i=0; i<7; i++)	 		//将led左移一位{									  LED_PORT = _crol_(LED_PORT,1);Delay500ms(); 	}for(i=0; i<7; i++)			//将led右移一位{LED_PORT = _cror_(LED_PORT,1);Delay500ms();	}	}		
}

实验现象

在这里插入图片描述

按键控制LED灯

由原理图可知,K1按下后P31接地,其值应为0
在这里插入图片描述

按键介绍

        按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开。开发板上使用的按键及内部简易图如下图所示:
在这里插入图片描述

在这里插入图片描述

        按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态, 如果按键按下,初始导通状态变为断开,初始断开状态变为导通。 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号如下图所示:
在这里插入图片描述
        由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间 的长短由按键的机械特性决定的,一般为 5ms 到 10ms。按键稳定闭合时间的长短则由操作人员的按键动作决定的,一般为零点几秒至数秒。按键抖动会引起按键被误读多次。为了确保 CPU 对按键的一次闭合仅作一次处理,必须进行消抖。
        按键消抖有两种方式,一种是硬件消抖,另一种是软件消抖。为了使电路更加简单,通常采用软件消抖。
软件消抖
        一般来说一个简单的按键软件消抖就是先读取按键的状态,如果得到按键按下之后,延时一段时间,再次读取按键的状态,如果按键还是按下状态,那么说明按键已经按下。其中延时就是软件消抖处理。
硬件消抖
示例:
在这里插入图片描述

源码

#include <REGX52.H>
#include "intrins.h"
#include "stdint.h"sbit K1 = P3^1;
sbit D1 = P2^0;void Delay20ms()				//@11.0592MHz
{unsigned char i, j;i = 36;j = 217;do{while (--j);} while (--i);
}void main(void)
{	while(1){if(K1 == 0){Delay20ms();		//消抖if(K1 == 0){D1 = ~D1;while(K1 == 0);	//等待按键释放}}}		
}

实验现象

按下K1后可见D1翻转。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片视频预览开启和关闭脚本 Xp

关闭缩略图 regsvr32 /u shmedia.dll开启缩略图 regsvr32 shmedia.dll 关闭缩略图 regsvr32 /u shimgvw.dll开启缩略图 regsvr32 shimgvw.dll 如果还是不行&#xff0c;请安装 K-Lite Codec Pack 解码器 注册表相关 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.…

菜鸟Linux攻略--目录文件权限的查看和修改(详细)

为什么80%的码农都做不了架构师&#xff1f;>>> 链接&#xff1a;http://zhaoyuqiang.blog.51cto.com/6328846/1214718 转载于:https://my.oschina.net/L110/blog/402042

【51单片机快速入门指南】2.1:数码管显示数字、小数 (科学计数法)

目录硬知识数码管简介多位数码管简介数码管动态显示原理74HC245 芯片简介74HC138 芯片简介上机实战源码Tube.cTube.hmain.c效果显示整数正数负数显示小数&#xff08;保留三位有效数字&#xff09;正数负数普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Develop…

jmeter 插件 监视器 图形界面使用

http://www.cnblogs.com/zhaoxd07/p/5197669.html转载于:https://www.cnblogs.com/kaka1988/p/7148554.html

防USB病毒

Windows XP 需要用此步驟。Windows 7 就不需要了。 步驟1. 於「開始/執行」中執行 regedit&#xff0c;進入登錄編輯程式。2. 找到機碼名稱: HKEY_CURRENT_USER\Software\microsoft\Windows\CurrentVersion\Explorer\MountPoints23. 點選該機碼&#xff0c;按右鍵選擇「使用權限…

项目案例分享四:DC升级后Sysvol停止复制,日志报13508

最近在240个站点AD升级项目过程中遇到个别DC升级后Sysvol里面的内容同步到一半就不动了&#xff0c;连续一个星期都没有动静&#xff0c;今天在此跟大家分享此问题的处理方法。1.环境介绍其中DC01和DC02是中国总部的DC&#xff0c;中国地区其他两百多站点通过KCC生成的链路和DC…

【51单片机快速入门指南】2.2:任意位/任意长度数码管显示数字、小数

目录源码Tube.cTube.hmain.c效果8位数码管正整数负整数正小数负小数6位数码管正整数负整数正小数负小数4位数码管正整数负整数正小数负小数普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 源码 移植时主要只修改Tube_Num数量、…

【bzoj4025】二分图 LCT

题目描述 神犇有一个n个节点的图。因为神犇是神犇&#xff0c;所以在T时间内一些边会出现后消失。神犇要求出每一时间段内这个图是否是二分图。这么简单的问题神犇当然会做了&#xff0c;于是他想考考你。输入 输入数据的第一行是三个整数n,m,T。第2行到第m1行&#xff0c;每行…

世界500强高频逻辑推理智力面试题(一)

1、有一堆垃圾&#xff0c;规定要由张王 李三户人家清理。张户因外出没能参加&#xff0c;留下&#xff19;元钱做代劳费。王户上午起早干了&#xff15;小时&#xff0c; 李户下午接着干了&#xff14;小时刚好干完。问王户和李户应怎样分配这&#xff19;元钱&#xff1f; 答…

【51单片机快速入门指南】2.3:GPIO读取矩阵键盘 8个IO读16键

目录硬知识矩阵键盘介绍测试程序Key_Board.cKey_Board.hmain.c实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 选自《普中51单片机开发攻略_V1.2》 矩阵键盘介绍 独立按键与单片机连接时&#xff0c;每一个按键…

wordpress数据库表详解

表名&#xff1a;wp_commentmeta 仅存储Akismet或手工审核的评论是否为垃圾评论的判断结果。 字段注释meta_id自增唯一IDcomment_id对应评论IDmeta_keymeta_value表名&#xff1a;wp_comments 存储评论信息&#xff0c;如评论内容、评论所属文章、评论人昵称、邮箱、URL等&…

搭建LAMP

RPM包和源码包存放位置 /usr/local/src源码包编译安装位置 /usr/local/apache/usr/local/mysql/usr/local/php默认MySQL 数据库位置 /usr/local/mysql/var默认网站根目录 /usr/local/apache/htdocs2 LAMP环境搭建搭建的工作包括 mysql、apache、PHP。可以按照这个顺序来搭建环境…

JavaScript 计时器

1.定义计时器 (1).setInteral(函数名或代码,时间间隔). 注&#xff1a;每隔你定义的时间间隔执行一次你定义的函数或代码。 (2).setTimeout(函数名或代码,时间间隔). 注&#xff1a;setTimeout();严格意义上说不是定时器&#xff0c;它只是让代码延后执行&#xff0c;只会执行一…

【51单片机快速入门指南】2.4:74HC595、LED点阵屏及其SPI控制

目录硬知识IO 口扩展方式-串转并74HC595 芯片介绍硬件设计测试源码HC74595.cHC74595.hmain.h实验现象SPI控制普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 选自《普中51单片机开发攻略_V1.2》 IO 口扩展方式-串转并 …

Mongodb 安装和启动

一.首先去官网下载对应的的mongodb ,本人的操作系统是win7 64位 mongodb-win32-x86_64-2.0.6.rar 解压安装&#xff1a;进入到bin目录下&#xff0c;会看到N多的.exe文件 二.启动mongodb mongod.exe --dbpathd:\mongo\data\db --logpathd:\mongo\log\log.txt, 通过浏览器访问…

【51单片机快速入门指南】3:中断系统

目录硬知识中断概念中断系统中断结构中断优先级中断处理普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 选自《普中51单片机开发攻略_V1.2》、《STC89C52系列单片机器件手册》 中断概念 中断是为使单片机具有对外部或内…

正能量之项目经理的自我修养

正能量之项目经理的自我修养 作者&#xff1a;张子良 版权所有&#xff0c;转载请注明出处 引子 还记得曾经看过的《喜剧之王》么&#xff1f;还记的那曾经经典的台词么&#xff1a;“我不是死跑龙套的”&#xff0c;“人如果没有理想&#xff0c;和咸鱼又有什么区别呢&#xf…

20170505

RAID级别 raid0 为带区阵列&#xff1b;raid1 为镜像阵列raid01 为四块磁盘实现的荣誉磁盘阵列&#xff1b;raid5 至少三块&#xff0c;容量为&#xff08;n-1&#xff09;/n 广泛用于各种服务器&#xff1a;文件&#xff0c;数据库&#xff0c;web&#xff0c;邮件服务器 1.gi…

MVC4下配置log4net 五部曲

第一步&#xff1a;把log4net.dll 编译成Framework 4.0 第二步&#xff1a;找到项目的Properties下的AssemblyInfo。在最下面添加&#xff1a;[assembly: log4net.Config.XmlConfigurator(Watch true)]。 第三步&#xff1a;Web.config <configuration><configSectio…

算法,俄罗斯方块

炮姐的88行代码,亮瞎了..有待研究 #include <windows.h> #include <stdio.h> #include <time.h> #include <conio.h> #include <stdlib.h> char gcText[] " 1LJTSZ#"; struct tetris {int _pool[16][32], (*pool)[32], tmap[8][4][16…