51单片机点灯
1.点亮LED灯
#include "reg52.h"
sbit ledOne = P3^7;
void main()
{
//灯亮,给一个P3.7低电平
ledOne = 0;
}
给LED1对应标号的P3^7一个低电平,就能点亮LED灯
2.LED灯闪烁
#include "reg52.h"
sbit ledOne = P3^7;
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
//灯灭,给一个高电平
//重复执行
while(1){
//灯亮,给一个P3.7低电平
ledOne = 0;
//数数,数的期间,维持低电平,灯亮,延迟
Delay500ms();
//灯灭,给一个高电平
ledOne = 1;
//数数,数的期间,维持高电平,灯灭,延迟
Delay500ms();
}
}
使用延时函数
3.按键控制灯(状态位)
#include "reg52.h"
#include <intrins.h>
#define ON_STATUS 1
#define OFF_STATUS 0
sbit key1 = P2^1;
sbit key2 = P2^0;
sbit ledOne = P3^7;
void Delay50ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int ledMark = OFF_STATUS;
ledOne = 1;
//查询法检测,是否被按下
while(1){
if(key1 == 0)//KEY1位置和GND接通,表现为低电平,值为0
{
//感觉被按下,不知道是抖动还是人为,延迟50ms再判断一次
//软件消除抖动
Delay50ms();
if(key1 == 0){
//记住,key1被按下,记住,在其他地方点灯
ledMark = ON_STATUS;
}
}
if(key2 == 0){
//KEY2位置和GND接通,表现为低电平,值为0
ledMark = OFF_STATUS;
}
if(ledMark == OFF_STATUS){
ledOne = 1;
}else{
ledOne = 0;
}
}
}
点灯时标志好,后面再判断