【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,一经查实,立即删除!

相关文章

菜鸟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…

防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数量、…

【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;每一个按键…

【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 口扩展方式-串转并 …

【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…

利用D触发器和异或门实现两个IO解读电机编码器的计数值和方向

目录反转变正转正转变反转iPad Pro 2020 14.8.1 仿真软件&#xff1a;iCircuit 突发奇想&#xff0c;做个记录。应该可以用于诸如51单片机、Arduino或是电赛中可能用到的MSP430G2553这类外设十分稀缺的单片机上。一个想法&#xff0c;啊&#xff0c;不一定对。 黄色波形是编码…

TCP协议的三次握手和四次分手

HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol )&#xff0c;是Web联网的基础&#xff0c;也是手机联网常用的协议之一&#xff0c;HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应&#xff0c;在请…

CountDownLatch线程同步辅助

2019独角兽企业重金招聘Python工程师标准>>> http://bughope.iteye.com/blog/2081935 在上一篇文章中写道用一个静态的变量保存线程的执行状态,并用时间等待的方法后来仔细考虑,其实是 线程不安全的.多个线程同时执行这个类时,这个静态变量的值就不能保证了. 用一个…

【51单片机快速入门指南】3.1:配置外部中断触发方式和中断优先级

目录源码EXTI.cEXTI.hmain.c实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 源码 stdint.h见【51单片机快速入门指南】1&#xff1a;基础知识和工程创建 中断知识见【51单片机快速入门指南】3&#xff1a;中断系统 将…

(转)工厂方法模式

转自&#xff1a;http://www.jellythink.com/archives/62 问题描述 之前讲到了C设计模式——简单工厂模式&#xff0c;由于简单工厂模式的局限性&#xff0c;比如&#xff1a;工厂现在能生产ProductA、ProductB和ProductC三种产品了&#xff0c;此时&#xff0c;需要增加生产Pr…

一种父线程阻塞等待子线程的有效方法

最近在做一个查询优化时&#xff0c;考虑到一次查询耗时较多&#xff0c;所以打算用多线程来做&#xff0c;之前是串行查询。比如一个用户查询触发50个线程&#xff0c;在只有一个用户的情况下&#xff0c;性能比串行查询确实提高了许多&#xff0c;但当多个用户同时触发查询的…

C语言利用循环队列实现滑动平均值滤波器,提高计算速度

目录源码Filter.cFilter.h使用效果普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 串口示波器&#xff1a;Vofa 1.3.10 网上查到的滑动平均值滤波器在计算平均值的时候还要再for累加一遍&#xff0c;这太浪费时间了&#xff0c…

Exchange Server 2013日记功能

9.6 日记9.6.1 日记功能为什么很重要首先&#xff0c;了解日记功能与存档功能之间的区别十分重要&#xff1a;首先&#xff0c;了解日记功能与存档功能之间的区别十分重要&#xff1a; “日记”可以记录组织中的所有通信&#xff08;包括电子邮件通信&#xff09;&#xff0c;以…

VB数据库经典实例总结(二)

大家先看一张似图非图的图、 我们先称它为“过程”也许有不对的地方&#xff0c;在我学数据库到这个阶段、到这个刚刚接触、初生牛犊不怕虎的阶段对它的理解是这样的、所有的都是这个过程、只是在这中间掺杂了一些知识点&#xff08;我们要掌握的&#xff09;针对有些个别的&am…

适用于单片机的FFT快速傅里叶变换算法,51单片机都能用

目录源码FFT.cFFT.h使用方法效果其他部分的代码main.c普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 算法来自FFT算法的使用说明与C语言版实现源码 —— 原作者&#xff1a;吉帅虎 速度更快的版本见C语言实现的FFT与IFFT源代码…

第9课 - 函数重载分析(下)

第9课 - 函数重载分析&#xff08;下&#xff09; 1. 重载与指针 1.1 下面的函数指针将保存哪个函数的地址&#xff1f; 1.2 函数重载遇上函数指针 将重载函数名赋值给函数指针时&#xff1a; &#xff08;1&#xff09;根据重载规则挑选与函数指针参数列表一致的候选者 &#…