【51单片机】LED与独立按键(学习笔记)

一、点亮一个LED

1、LED介绍

LED:发光二极管

补:电阻读数

102 => 10 00 = 1k

473 => 47 000

2、Keil的使用

1、新建工程:Project => New Project

Ctrl + Shift + N :新建文件夹

2、选型号:Atmel-AT89C52

3、xxx提示?选否

4、Source Group => 右键 => Add New Item ... => C文件"main.c"

5、设置勾选创建HEX File文件

6、编译

3、单片机控制硬件的原理

CPU通过对寄存器的控制,寄存器通过驱动器、引脚控制硬件设备

4、代码的编写

c 复制代码
#include <REGX52.H>
void main() {
    while(1){
        P2=0xFE;	//1111 1110
    }
}

5、程序的下载

STC-ISP软件

单片器型号:STC89C52

串口号:USB...

打开程序文件:*.hex

下载进单片机

二、LED的闪烁

利用STC-ISP软件生成Delayxxxms()延时函数

c 复制代码
#include <REGX52.H>
void main() {
    while(1){
        P2=0xFE;	//1111 1110
        Delay500ms();
        P2=0xFF;	//1111 1111
        Delay500ms();
    }
}

三、 独立按键实现LED亮灭

1、轻触按键

独立按键:按下接通、松开断开

2、代码实现

1、P2 = 0xFE 相当于 P2_0 = 0

2、独立按键对应顺序

  1. K1:P3_1
  2. K2:P3_0
  3. K3:P3_2
  4. K4:P3_3
c 复制代码
#include <REGX52.H>
void main() {
    while(1){
       if(P3_1 == 0) {
           P2_0 = 0;
       } else {
           P2_0 = 1;
       }
    }
}

四、独立按键控制LED状态

1、按键的抖动

机械开关断开和闭合时会产生抖动

消抖:硬件过滤、软件算法(Delay)

2、代码实现

c 复制代码
#include <REGX52.H>
void main() {
    while(1){
       if(P3_1 == 0) {
           Delay(20);			// 消除前抖动
           while(P3_1 == 0);	// 等待松手
           Delay(20);			// 消除后抖动
           P2_0 = ~P2_0;
       }
    }
}

五、独立按键控制LED显示二进制

c 复制代码
#include <REGX52.H>
void main() {
    unsigned char LEDNum = 0;
    while(1){
       if(P3_1 == 0) {
           Delay(20);			// 消除前抖动
           while(P3_1 == 0);	// 等待松手
           Delay(20);			// 消除后抖动
           LEDNum++;
           P2_0 = ~LEDNum;
       }
    }
}

六、独立按键控制LED位移

c 复制代码
#include <REGX52.H>
void main() {
    P2 = ~0x01;
    unsigned char LEDNum = 0;
    while(1){
       if(P3_1 == 0) {
           Delay(20);			// 消除前抖动
           while(P3_1 == 0);	// 等待松手
           Delay(20);			// 消除后抖动
           LEDNum++;
           if(LEDNum >= 8) LEDNum = 0;
           P2 = ~(0x01 << LEDNum);
       }
       if(P3_0 == 0) {
           Delay(20);			// 消除前抖动
           while(P3_1 == 0);	// 等待松手
           Delay(20);			// 消除后抖动
           if(LEDNum == 0) LEDNum = 7;
           else LEDNum--;
           P2 = ~(0x01 << LEDNum);
       }
    }
}
相关推荐
bush42 小时前
正点原子imx6ull-uboot,奇怪的问题
linux·学习
念雨思2 小时前
HarmonyOS AI 应用开发实战:短视频选题灵感 —— AI 驱动的内容创作引擎
人工智能·学习·华为·harmonyos·鸿蒙
蜡笔小电芯3 小时前
【电路设计】TVS 瞬态抑制二极管选型与应用笔记
笔记
2601_959383243 小时前
休学干预的“信任难题”,坤和静界·春藤计划怎么尝试破局
学习
tyqtyq225 小时前
HarmonyOS AI 应用开发实战:考研择校分析系统
人工智能·学习·考研·华为·生活·harmonyos
三水不滴5 小时前
RAG 系统评测全梳理:三元组方法论 + 分层指标体系
经验分享·笔记
光影6276 小时前
MySQL基础入门
数据库·笔记·sql·学习·mysql·学习方法
海兰6 小时前
【实用程序】网页公开信息智能采集系统详细设计指南
人工智能·学习·自动化·采集信息
MartinYeung56 小时前
[论文学习]AgentDAM:自主Web Agent的隐私泄露评估
学习
光影6276 小时前
MySQL 进阶篇 —— 事务 / 外键 / 索引 / 高级查询
数据库·笔记·sql·学习·mysql