#include <REGX51.H>
#include <intrins.h>
//实验目标@萌狼蓝天
/**
1、SW1开关控制LED发光二极管左移流水
2、SW2开关控制发光二极管右移流水
3、由按键开关k1控制LED发光二极管奇偶交替闪烁
4、由按键开关k2控制LED发光二极管亮灭闪烁
*/
// 接口与设备对应关系
/*
P1 : LED
P2.0: SW1
P2.1: SW2
P2.2: K1
P2.3: K2
*/
// LED灯的状态
unsigned char LED;
//延时函数
void delay(int ms){
int i,j;
for(i=0;i<ms;i++) for(j=0;j<1000;j++);
}
//左移函数
char move_left(char val,int mov){
return _crol_(val,mov);
}
//右移函数
char move_right(char val,int mov){
return _cror_(val,mov);
}
//控制小灯闪烁
void light(char val1,char val2){
P1 = val1;
delay(1000);
P1 = val2;
delay(1000);
}
void main(){
//初始化
LED = 0x01;
while(1){
//k1 和 k2 是按下式开关,先判断k1 k2的状态
if(P2_2==1 || P2_3==1){
delay(300); // 防止按下抖动因素的影响
if(P2_2==1){
light(0x55,0xaa);//奇偶交替闪烁一次
P2_2==0;//恢复状态
}
if(P2_3==1){
light(0xff,0x00);//全亮或者全灭
P2_3==0;//恢复状态
}
}else{
P1=LED;// 避免按下K键后对左移或者右移造成影响
//不存在K1或者K2按下的情况时,判断SW1和SW2的情况
if(P2_0==1 & P2_1==0){
//SW1打开 SW2关闭,左移
LED = move_left(LED,1);
}else if(P2_1==1 & P2_0==0){
//SW2打开 SW1关闭,右移
LED = move_right(LED,1);
}else{
//SW1和SW2 同时打开或者关闭
LED = LED;//LED灯状态不变 此部分代码可省略
}
P1=LED;//将值交给P1实现对灯的控制
delay(1000);//延时
}
}
}
标签:小灯,控制,LED,开关,二极管,单片机,发光,按下式
From: https://www.cnblogs.com/mllt/p/0xWSE5G8BVLGG58OP.html