Skip to content

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);
       }
    }
}

Released under the MIT License.