前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >3.3 51单片机-独立按键

3.3 51单片机-独立按键

作者头像
DS小龙哥
发布于 2022-01-12 05:51:31
发布于 2022-01-12 05:51:31
56100
代码可运行
举报
运行总次数:0
代码可运行

3.3 独立按键

3.3.1 按键原理图

图3-3-1

图3-3-2

JP165跳线帽断开、JP10连接J12(为了实现按键控制LED灯的效果)、JP5连接JP8、J21接左边

3.3.2 示例代码

下面代码都使用多文件编程模型,这里贴出每个文件的主要代码。

下面代码实现的效果是,按下按键控制LED灯。

Main.c文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <reg51.h>
#include "delay.h"
#include "key.h"
#include "type.h"
#include "led.h"

int main()
{
    u8 key; 
    LED=0; //关闭所有LED灯,51单片机默认输出高电平,LED默认高电平点亮
    while(1)
    {
        key=Key_Scan();
        if(key)
        {
            LED=~LED; //控制8盏灯
        }
}
}

Key.h文件代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef KEY_H
#define KEY_H
#include <reg51.h>
#include "type.h"
#include "delay.h"
#include "led.h"
u8 Key_Scan(void);
#define KEY P1  //定义按键
sbit key1=KEY^0;
sbit key2=KEY^1;
sbit key3=KEY^2;
sbit key4=KEY^3;
sbit key5=KEY^4;
sbit key6=KEY^5;
sbit key7=KEY^6;
sbit key8=KEY^7;
#endif

Key.c文件代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "key.h"
/*
按键扫描函数
*/
u8 Key_Scan(void)
{
    static u8 flag=0;
    if((KEY!=0xFF)&&(flag==0)) //判断有没有按键按下
    {
        DelayMs(20); //消抖
        flag=1; //标志按键已经被按下
        if(key1==0)return 1;
        if(key2==0)return 2;
        if(key3==0)return 3;
        if(key4==0)return 4;
        if(key5==0)return 5;
        if(key6==0)return 6;
        if(key7==0)return 7;
        if(key8==0)return 8;
    }
    else if(KEY==0xFF) //判断按键是否全部松开
    {
        flag=0; //清除按下标志位
    }
    return 0;
}

Led.h文件代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef LED_H
#define LED_H
#include <reg51.h>
#include "type.h"
#include "delay.h"

#define LED P0  //定义LED引脚
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;
#endif

Type.h文件代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef TYPE_H
#define TYPE_H
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
#endif
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
3.4 51单片机-矩阵键盘
要使用矩阵键盘,需要将JP4接到JP8(P1)上面,JP165跳线帽需要断开(否则会导致矩阵键盘最右一排无法正常使用)。
DS小龙哥
2022/01/12
9320
3.4 51单片机-矩阵键盘
51单片机八路抢答器proteus仿真
由于51单片机小板,按键比较少,还有一些功能上的缺陷,所以说无法完成八路抢答器,所以我们用proteus仿真,代码与实验结果如下:
全栈程序员站长
2022/11/01
4910
基于51单片机设计的简易电子琴
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/80538312
zy010101
2019/05/25
8310
基于单片机的八路抢答器的设计与实现_基于单片机的三路抢答器设计
1.以单片机为核心,设计一个八位竞赛抢答器:同时供八名选手或八个代表队比赛,分别用八个按钮S0~S7表示。
全栈程序员站长
2022/11/07
4130
按键控制LED灯
STM32--------按键控制LED灯 知识介绍 工程文件放置 只有在添加进这一串之后,才能使用头文件集合 stm32f10x_conf.h 选择类型 初始化时钟从哪找 在stm32f10x_r
跋扈洋
2021/01/28
1K0
别怕!51 单片机从入门到应用,小白也能轻松吃透
这篇教程专为单片机小白打造,从 51 单片机基础讲起,带你搭建开发环境,学习汇编与 C 语言编程。通过 LED 灯闪烁、按键控制、数码管显示等基础实验,以及简易电子钟、温度检测系统等应用案例,结合代码实操,助你快速掌握 51 单片机开发。
羑悻的小杀马特.
2025/03/24
4840
接口与通信-独立按键
独立按键一共8个,有对应的插槽可以连接在单片机的任意IO口。去抖动的方式,我们采用软件延时的方法。过程如下:
会洗碗的CV工程师
2024/02/18
3570
接口与通信-独立按键
四路抢答器c语言程序_八路抢答器原理讲解
uc code table[]={0x3f,0x06,0x5b,0x4f,0x66,
全栈程序员站长
2022/11/01
4130
5.1 单片机-16x16LED点阵屏
5.1 16x16点阵滚动显示 5.1.1 点阵原理图 图5-1-1 点阵原理图 图5-1-2 5.1.2 单个汉字纵向移动示例 图5-1-3 纵向滚动取软件模配置方式(LCD2002) 图5-1-4 纵向滚动取模软件配置方式(字模提取V2.1) 示例代码: #include <reg51.h> //定义了一些51单片机通用的寄存器地址 /* 第一片595芯片(U4) 控制行的上8个IO口(高电平有效) 第二片595芯片(U5) 控制行的下8个IO口(高电平有效) 第三片595芯片(U
DS小龙哥
2022/01/10
6650
5.1 单片机-16x16LED点阵屏
STM32F407 GPIO口输入配置配置步骤
介绍STM32F407新建寄存器工程流程,介绍输入模式的配置方式,以按键为例完成按键输入检测。
DS小龙哥
2023/07/08
3770
STM32F407 GPIO口输入配置配置步骤
3.8 51单片机-M74HC138译码器驱动8位数码管
开发板连线:JP10(P0)接J12、J21跳线帽接左边、A.P22、B.P23、C.P24
DS小龙哥
2022/01/12
1.9K0
3.8 51单片机-M74HC138译码器驱动8位数码管
3.6 51单片机-动态数码管
J21跳线帽接左边、JP165跳线帽断开、JP10(P0)接J12、JP16(右排)接JP8。
DS小龙哥
2022/01/12
8690
3.6 51单片机-动态数码管
4.1 51单片机-定时器使用
时钟周期:时钟周期T是时序中最小的时间单位,具体计算的方法就是 1/时钟源频率,89C51单片机开发板上常用的晶振是11.0592M,对于这个单片机系统来说,时钟周期=1/11059200 秒。
DS小龙哥
2022/01/12
1.2K0
4.1 51单片机-定时器使用
基于51单片机的自动浇花器电路
自动浇水灌溉系统设计方案,以AT89C51单片机为控制核心,采用模块化的设计方法。
芯动大师
2024/05/16
1550
基于51单片机的自动浇花器电路
3.5 51单片机-独立数码管(静态数码管)
对应关系: P0.0 ->A P0.1->B P0.2->C P0.3->D………
DS小龙哥
2022/01/12
9090
3.5 51单片机-独立数码管(静态数码管)
3.7 51单片机-LED 16*16点阵
LED点阵使用连线说明:P595_A接J17、P595_B接J18、JP595跳线帽需要接上、JP1302断开、J11(P3.3)断开
DS小龙哥
2022/01/12
1.4K0
3.7 51单片机-LED 16*16点阵
51单片机开发中一些常用代码块
数码管中的16个字符 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 延时函数(使用之前先声明一遍) void delay(uint); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 点亮第一个二级管 #include //点亮第一个发光二级管
Gorit
2021/12/09
6380
利用Proteus仿真STM32实现按键控制LED灯设计
Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DSPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。
DS小龙哥
2022/06/01
3.6K1
利用Proteus仿真STM32实现按键控制LED灯设计
单片机中断—外部中断
51系列单片机的中断共有5个,其中外部中断共占两个。外部中断主要通过单片机的引脚P3.3、P3.4接收外部脉冲或高低电平触发CPU中断。与外部中断有关的多功能寄存器为IE、IP、TCON。
电子工程师成长日记
2022/07/21
3K0
单片机中断—外部中断
【STM32学习记录2】GPIO输入—按键检测
弹性按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一 下子断开,使用按键时会产生如图带波纹信号,需要用软件消抖处理滤波,不方便输入检测。当然有专用的去抖电路,也有专用的去抖芯片,但通常我们用软件延时的方法就能解决抖动问题,没有必要添加多余的硬件电路。
AXYZdong
2020/10/28
9540
推荐阅读
相关推荐
3.4 51单片机-矩阵键盘
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验