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、独立按键对应顺序
- K1:P3_1
- K2:P3_0
- K3:P3_2
- 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);
}
}
}