/***2025 4 17 22:18*L184*CODE331*******/
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit L_PWM=P5^5; //
sbit L_EN=P3^3; // 高电平使能 低电平关闭
sbit R_PWM=P3^0; //
sbit R_EN=P3^1; //
sbit OUT1=P3^6; //
sbit OUT2=P3^5; //
sbit S1=P2^6;
sbit S2=P2^7;
sbit S3=P1^0; //功能键
sbit S4=P1^1;
sbit LED=P3^5; //EEPROM写指示
uchar kcounter,kstatus; //按键计数标志 按键状态标志
/**************Delay*******************************/
void Delay_50ms(unsigned int Del_50ms) //
{
unsigned int m;
for(;Del_50ms>0;Del_50ms--)
for(m=62450;m>0;m--);
}
/****************按键计数器状态寄存器归零*************/
void RstKey()
{
kcounter=0; //按键计数器归零
kstatus=0; //状态寄存器归零
}
/*****************按键低电平检测函数*****************/
void LowVoltKey(void) //按键计数器状态标志加一
{
kcounter++;
kstatus++;
}
/*****************按键高电平检测函数*****************/
void HighVoltKey(void) //按键计数器加一 状态标志归零
{
kcounter++; //按键计数器加一
kstatus=0; //按键状态标志归零
}
/*************关所有输出*******************************/
void Init_io()
{
P1M0=0X00; // Init
P1M1=0X00; //
P2M0=0X00; //
P2M1=0X00; //
P3M0=0X01; //
P3M1=0X00; //
P5M0=0X20; //
P5M1=0X00; //
L_PWM=1; //
L_EN=1; //高电平使能 低电平关闭
R_PWM=1; //脉冲频率
R_EN=1; //高电平使能 低电平关闭
}
/***************************************/
void out1()
{
LED=0;
L_EN=0;
R_EN=1;
L_PWM=0;
R_PWM=1;
L_EN=1;
R_EN=1;
L_PWM=1;
R_PWM=0;
Delay_50ms(50);
LED=1;
}
/***************************************/
void out2()
{
LED=0;
L_EN=0;
R_EN=1;
L_PWM=1;
R_PWM=0;
L_EN=1;
R_EN=1;
L_PWM=0;
R_PWM=1;
Delay_50ms(50);
LED=1;
}
/***************************************/
void out3()
{
LED=0;
// L_EN=0;
// R_EN=1;
// Delay_50ms(5);
L_EN=1;
R_EN=1;
L_PWM=1;
R_PWM=0;
Delay_50ms(50);
LED=1;
}
/***************************************/
void out4()
{
LED=0;
// L_EN=0;
// R_EN=1;
// Delay_50ms(5);
L_EN=1;
R_EN=1;
L_PWM=0;
R_PWM=1;
Delay_50ms(50);
LED=1;
}
/***************************************/
void main()
{
while(1)
{
Init_io();
RstKey();
for(;kcounter<5;) //按键循环5次
if(!S1) //按键低电平
{
LowVoltKey(); //按键低电平 清除计数器
}
else if(~!S1) //按键高电平
{
HighVoltKey(); //按键计数器加一 状态计数器加一
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
out1();
}
//
RstKey();
for(;kcounter<5;) //按键循环5次
if(!S2) //按键低电平
{
LowVoltKey(); //按键低电平 清除计数器
}
else if(~!S2) //按键高电平
{
HighVoltKey(); //按键计数器加一 状态计数器加一
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
out2();
}
//
RstKey();
for(;kcounter<5;) //按键循环5次
if(!S3) //按键低电平
{
LowVoltKey(); //按键低电平 清除计数器
}
else if(~!S3) //按键高电平
{
HighVoltKey(); //按键计数器加一 状态计数器加一
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
out3();
}
//
RstKey();
for(;kcounter<5;) //按键循环5次
if(!S4) //按键低电平
{
LowVoltKey(); //按键低电平 清除计数器
}
else if(~!S4) //按键高电平
{
HighVoltKey(); //按键计数器加一 状态计数器加一
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
out4();
}
//
}
|