【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);
       }
    }
}
相关推荐
Xudde.1 小时前
班级作业笔记报告0x04
笔记·学习·安全·web安全·php
晓晓hh1 小时前
JavaSE学习——迭代器
java·开发语言·学习
421!2 小时前
GPIO工作原理以及核心
开发语言·单片机·嵌入式硬件·学习
AI成长日志3 小时前
【笔面试算法学习专栏】双指针专题·简单难度两题精讲:167.两数之和II、283.移动零
学习·算法·面试
zzh0813 小时前
MySQL高可用集群笔记
数据库·笔记·mysql
小手指动起来3 小时前
保姆级提示词工程学习总结(含实操示例+工具推荐)
人工智能·学习·自然语言处理
绛橘色的日落(。・∀・)ノ4 小时前
Matplotlib实践学习笔记
笔记·学习
chase。4 小时前
【学习笔记】AGILE:把人形机器人强化学习从“玄学”变成“工程学”
笔记·学习·敏捷流程
久菜盒子工作室4 小时前
高等教育学|第一章高等教育概述
经验分享·笔记·课程设计
bu_shuo4 小时前
git练习学习网站【中文网站】
git·学习