02点亮LED
LED
1. 原理图

2. 描述
流水灯模块使用P1 进行IO操作。并使用共地。默认高电平 所以需要点亮LED等, 就是将P1口 地线接通即可。
3. 点亮LED
第一个LED
P1引脚一共8位。此处变量LED设置P1.0(即P1引脚第0位)
#include <reg52.h>
sbit LED = P1^0; // 定义P1.0为LED引脚
void main() {
LED = 0; // 输出低电平,点亮LED(共地接法)
while (1); // 保持程序运行
}
同时点亮1 3 5 led
#include <reg52.h>
sbit LED1 = P1^0;
sbit LED3 = P1^2;
sbit LED5 = P1^4;
void main() {
LED1 = 0;
LED3 = 0;
LED5 = 0;
while (1);
}
#include <reg52.h>
void main() {
// 0xEA 在二进制表示为 11101010
P1 = 0xEA;
while (1);
}
轮流点亮每一个LED
#include <reg52.h>
unsigned char a;
void delay();
void main() {
while(1) {
delay();
for(a = 0; a < 8; a++) {
P1 = P1 << 1;
delay();
}
P1 = 0xFF;
}
}
void delay() {
int i = 65535;
while(i--);
}
轮流点亮每一个LED,每次只点亮一个 从左向右
这里要用到一个 intrins 的 corl 循环左移 corr 循环右移 nop 空指令
#include <reg52.h>
#include <intrins.h>
unsigned char a;
unsigned char temp;
void delay();
void main() {
temp = 0xFE;
P1 = temp;
while(1) {
delay();
temp = _crol_(temp, 1);
P1 = temp;
}
}
void delay() {
int i = 65535;
while(i--);
}
轮流点亮每一个LED,每次只点亮一个 从右向左
#include <reg52.h>
#include <intrins.h>
unsigned char a;
unsigned char temp;
void delay(unsigned int z);
void main() {
temp = 0x7F;
P1 = temp;
while(1) {
delay(1000);
temp = _cror_(temp, 1);
P1 = temp;
}
}
// 改进了延时函数
void delay(unsigned int z) {
unsigned int x,y;
for(x = z; x > 0; x--)
for(y=0; y<125; y++);
}
发光二极管 2-4-6-8 闪烁间隔1s
#include <reg52.h>
#include <intrins.h>
unsigned char a;
unsigned char temp;
void delay(unsigned int z);
void main() {
temp = 0xFD;
P1 = temp;
while(1) {
delay(1000);
temp = _crol_(temp, 2);
P1 = temp;
}
}
void delay(unsigned int z) {
unsigned int x,y;
for(x = z; x > 0; x--)
for(y=0; y<125; y++);
}
从右向左循环点亮间隔500ms
引用 轮流点亮每一个LED,每次只点亮一个 从右向左