一、点亮一个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 <REGX52.H>
void main() {while(1){P2=0xFE; //1111 1110}
}
5、程序的下载
STC-ISP软件
单片器型号:STC89C52
串口号:USB…
打开程序文件:*.hex
下载进单片机
二、LED的闪烁
利用STC-ISP软件生成Delayxxxms()
延时函数
#include <REGX52.H>
void main() {while(1){P2=0xFE; //1111 1110Delay500ms();P2=0xFF; //1111 1111Delay500ms();}
}
三、 独立按键实现LED亮灭
1、轻触按键
独立按键:按下接通、松开断开
2、代码实现
1、
P2 = 0xFE
相当于P2_0 = 0
2、独立按键对应顺序
- K1:P3_1
- K2:P3_0
- K3:P3_2
- K4:P3_3
#include <REGX52.H>
void main() {while(1){if(P3_1 == 0) {P2_0 = 0;} else {P2_0 = 1;}}
}
四、独立按键控制LED状态
1、按键的抖动
机械开关断开和闭合时会产生抖动
消抖:硬件过滤、软件算法(Delay)
2、代码实现
#include <REGX52.H>
void main() {while(1){if(P3_1 == 0) {Delay(20); // 消除前抖动while(P3_1 == 0); // 等待松手Delay(20); // 消除后抖动P2_0 = ~P2_0;}}
}
五、独立按键控制LED显示二进制
#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位移
#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);}}
}