• 【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、代码的编写

    #include 
    void main() {
        while(1){
            P2=0xFE;	//1111 1110
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、程序的下载

    STC-ISP软件

    单片器型号:STC89C52

    串口号:USB…

    打开程序文件:*.hex

    下载进单片机

    二、LED的闪烁

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

    #include 
    void main() {
        while(1){
            P2=0xFE;	//1111 1110
            Delay500ms();
            P2=0xFF;	//1111 1111
            Delay500ms();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    三、 独立按键实现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
    #include 
    void main() {
        while(1){
           if(P3_1 == 0) {
               P2_0 = 0;
           } else {
               P2_0 = 1;
           }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    四、独立按键控制LED状态

    1、按键的抖动

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

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

    2、代码实现

    #include 
    void main() {
        while(1){
           if(P3_1 == 0) {
               Delay(20);			// 消除前抖动
               while(P3_1 == 0);	// 等待松手
               Delay(20);			// 消除后抖动
               P2_0 = ~P2_0;
           }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    #include 
    void main() {
        unsigned char LEDNum = 0;
        while(1){
           if(P3_1 == 0) {
               Delay(20);			// 消除前抖动
               while(P3_1 == 0);	// 等待松手
               Delay(20);			// 消除后抖动
               LEDNum++;
               P2_0 = ~LEDNum;
           }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    六、独立按键控制LED位移

    #include 
    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);
           }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    有关于MySQL的面试题
    【原创】VMware Workstation查看虚拟机实际使用的内存量并通过PID找到对应的虚拟机
    .NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)
    0基础女生学建模前,先看这篇文章
    C语言-函数
    selenium webDriver的运用
    根据消息信息如何快速定位程序
    数字未来:探索 Web3 的革命性潜力
    数据分析(1)——如何用postgres快速找出数据库中所有表格包含空值的列
    Centos服务器部署前后端项目
  • 原文地址:https://blog.csdn.net/wmh1024/article/details/134158255