📄 3_25.c
字号:
/***************************头文件***********************/
#include <reg51.h>
/************************数据类型宏定义******************/
#define uchar unsigned char
#define uint unsigned int
/***********************使能、禁止宏定义*****************/
#define Enable(); EA=1;
#define Disable(); EA=0;
/********************程序选择功能标志宏定义**************/
#define BIAOZHUN 0
#define JINGJI 1
#define DANDU 2
#define PAISHUI 3
/********************强弱选择功能标志宏定义**************/
#define QIANGXI 0
#define RUOXI 1
/*******************进水、排水时间限制宏定义*************/
#define T_JinShui 5 //4min*60s
#define T_PaiShui 60 //1min*60s
/*************************管脚定义***********************/
//都是低有效,因LED是灌电流,而PNP也是低电平时导通
sbit LED_BiaoZhun = P1^0; //标准程序显示灯
sbit LED_JingJi = P1^1; //经济程序显示灯
sbit LED_DanDu = P1^2; //单独程序显示灯
sbit LED_PaiShui = P1^3; //排水程序显示灯
sbit LED_QiangXi = P1^4; //强洗状态灯
sbit LED_RuoXi = P1^5; //弱洗状态灯
sbit LED_XiDi = P1^6; //洗涤状态灯
sbit LED_PiaoXi = P1^7; //漂洗状态灯
sbit LED_TuoShui = P2^0; //脱水状态灯
sbit PIN_BaoJing = P2^1; //报警喇叭
sbit PIN_JinShui = P2^2; //进水控制
sbit PIN_PaiShui = P2^3; //排谁控制
sbit PIN_Motor_A = P2^4; //电机脚A
sbit PIN_Motor_B = P2^5; //电机脚B
sbit K_SEL_ChengXu = P3^0; //选择程序键
sbit K_SEL_QiangRuo = P3^1; //选择强弱键
sbit p32 = P3^2; //
sbit p33 = P3^3; //
sbit SW_AnQuan = P3^6; //安全开关,水位、盖
/*************************数据定义***********************/
uchar flag_SEL_ChengXu; //默认为标准程序,
bit flag_SEl_QiangRuo; //默认为强洗,1为弱洗
bit flag_Run; //运行标志,1为运行
bit flag_ZanTing; //暂停标志,1为暂停
bit flag_JinShui; //进水标志,1为进水
bit flag_PaiShui; //排水标志,1为排水
bit flag_XiDi; //置洗涤标志
bit flag_PiaoXi; //置漂洗标志
bit flag_TuoShui; //脱水标志
bit flag_BaoJing; //报警标志
uchar _50ms; //每50ms加一次的变量
uint s; //秒
uint T_S; //定时总时间/*************************延时程序*********************/
void Delay(uchar t1,uchar t2)
{ for(;t1;t1--)
for(;t2;t2--);
}
/**********************管脚初始化程序******************/
void Pin_Init(void)
{ LED_BiaoZhun = 0; //默认为标准程序,灯亮
LED_JingJi = 1; //经济程序显示灯,灭
LED_DanDu = 1; //单独程序显示灯,灭
LED_PaiShui = 1; //排水程序显示灯,灭
LED_QiangXi = 0; //默认为强洗状态,灯亮
LED_RuoXi = 1; //弱洗状态灯,灭
LED_XiDi = 1; //洗涤状态灯,运行后灯亮
LED_PiaoXi = 1; //漂洗状态灯,运行后灯亮
LED_TuoShui = 1; //脱水状态灯,运行后灯亮
PIN_BaoJing = 1; //报警喇叭,不叫
PIN_JinShui = 1; //进水控制,关
PIN_PaiShui = 1; //排谁控制,关
PIN_Motor_A = 1; //电机脚A,不走
PIN_Motor_B = 1; //电机脚B,不走
}
/********************中断初始化程序********************/
void ExInt_Init(void)
{ IT0 = 1;
EX0 = 1;
IT1 = 1;
EX1 = 1;
}
/*******************定时器0初始化程序******************/
void Timer0_Init(void)
{ TMOD = TMOD | 0X01; //定时方式1
TH0 = 0X3C; //50ms
TL0 = 0XB0;
ET0 = 1;
TR0 = 1;
}
/*******************定时器1初始化程序******************/
void Timer1_Init(void)
{ TMOD = TMOD | 0X10; //定时方式1
TH1 = 0X3C; //50ms
TL1 = 0XB0;
ET1 = 1;
TR1 = 1;
}
/**************外部中断0程序为运行或者暂停*************/
void int0(void) interrupt 0
{ static bit flag_FirstInt0 = 1;
if(!p32)
{ Delay(8,250); //延时10ms左右,去抖动
if(!p32)
{ if(flag_FirstInt0)
{ flag_FirstInt0 = 0; //清第一次进中断0标志
flag_Run = 1; //置运行标志
}//end if(flag_FirstInt0)
else
{
}//end else
}//end if(!p32) 2
}//end if(!p32) 1
}
/*******************定时器0中断程序********************/
void Timer0(void) interrupt 1
{
ET0 = 0; //关定时器0
TH0 = 0X3C; //重装定时器值
TL0 = 0XB0;
ET0 = 1;
_50ms++;
if(_50ms == 20) //1s到
{ _50ms = 0;
s++;
}//end if(_50ms == 20)
}//end Timer0()
/**********外部中断1程序为水位到或者盖开处理***********/
void int1(void) interrupt 2
{ if(!p33)
{ Delay(8,250); //延时10ms左右,去抖动
if(!p33)
{
}//end if(!p33) 2
}//end if(!p33) 1
}
/***************定时器1中断程序作为闪烁****************/
void Timer1(void) interrupt 3
{ static uchar _50ms; //每50ms加一次的变量
ET1 = 0; //关定时器0
TH1 = 0X3C; //重装定时器值
TL1 = 0XB0;
ET1 = 1;
_50ms++;
if(_50ms == 14) //0.7s到
{ _50ms = 0;
if(flag_XiDi) //洗涤中~
LED_XiDi = ~LED_XiDi; //洗涤状态灯闪烁
if(flag_PiaoXi) //漂洗中~
LED_PiaoXi = ~LED_PiaoXi; //漂洗状态灯闪烁
if(flag_TuoShui) //脱水中~
LED_TuoShui = ~LED_TuoShui; //脱水状态灯闪烁
}//end if(_50ms == 14)
}
/**********************程序选择程序********************/
void SEL_ChengXU(void)
{ if(!K_SEL_ChengXu) //程序选择键
{ Delay(10,250); //延时10ms左右,去抖动
if(!K_SEL_ChengXu)
{ while(!K_SEL_ChengXu);
flag_SEL_ChengXu++;
if(flag_SEL_ChengXu==4)
flag_SEL_ChengXu = 0;
switch(flag_SEL_ChengXu)
{ case BIAOZHUN : LED_BiaoZhun= 0; //亮
LED_JingJi = 1; //灭
LED_DanDu = 1; //灭
LED_PaiShui = 1; //灭
break;
case JINGJI : LED_BiaoZhun= 1;
LED_JingJi = 0;
LED_DanDu = 1;
LED_PaiShui = 1;
break;
case DANDU : LED_BiaoZhun= 1;
LED_JingJi = 1;
LED_DanDu = 0;
LED_PaiShui = 1;
break;
case PAISHUI : LED_BiaoZhun= 1;
LED_JingJi = 1;
LED_DanDu = 1;
LED_PaiShui = 0;
break;
default : break;
}//end switch
}//end if(!K_Sel_ChengXu) 2
}//end if(!K_Sel_ChengXu) 1
}//END
/********************强弱选择程序**********************/
void SEL_QiangRuo(void)
{ if(!K_SEL_QiangRuo) //强弱选择键
{ Delay(10,250); //延时10ms左右,去抖动
if(!K_SEL_QiangRuo)
{ while(!K_SEL_QiangRuo);
flag_SEl_QiangRuo = ~flag_SEl_QiangRuo;
if(!flag_SEl_QiangRuo)
{ LED_QiangXi = 0; //强洗状态,灯亮
LED_RuoXi = 1; //弱洗状态灯,灭
}//end if(!flag_SEl_QiangRuo)
else
{ LED_QiangXi = 1; //强洗状态,灯亮
LED_RuoXi = 0; //弱洗状态灯,灭
}//end else
}//end if(!K_SEL_QiangRuo) 2
}//end if(!K_SEL_QiangRuo) 1
}
/**********************进水程序***********************/
void JinShui(void)
{
}
/**********************排水程序***********************/
void PaiShui(void)
{
}
/**********************洗涤程序***********************/
void XiDi(void)
{
}
/**********************漂洗程序***********************/
void PiaoXi(void)
{
}
/***********************脱水程序**********************/
void TuoShui(void)
{
}
/********************标准洗衣程序*********************/
void Programme_BiaoZhun(void)
{ JInShui();
XiDi();
PaiShui();
Jinshui();
PiaoXi();
Paishui();
}
/********************经济洗衣程序*********************/
void Programme_JingJi(void)
{
}
/********************单独洗衣程序*********************/
void Programme_DanDu(void)
{
}
/********************排水洗衣程序*********************/
void Programme_PaiShui(void)
{
}
/************************主程序************************/
void main()
{ static bit flag_FirstRun = 1;
Pin_Init(); //管脚初始化
ExInt_Init(); //外中断初始化
Enable(); //开总中断
while(1)
{ if(!flag_Run) //运行前按键才有效
{ SEL_ChengXU(); //程序选择程序
SEL_QiangRuo(); //强弱选择程序
}//end if(!flag_Run)
else
{ if(flag_FirstRun)
{ flag_FirstRun = 0;
switch(flag_SEL_ChengXu)
{ case BIAOZHUN : Programme_BiaoZhun(); //标准洗衣程序
LED_XiDi = 0; //洗涤状态灯亮
LED_PiaoXi = 0; //漂洗状态灯亮
LED_TuoShui = 0; //脱水状态灯亮
break;
case JINGJI : Programme_JingJi(); //经济洗衣程序
LED_XiDi = 0; //洗涤状态灯亮
LED_PiaoXi = 0; //漂洗状态灯亮
LED_TuoShui = 0; //脱水状态灯亮
break;
case DANDU : Programme_DanDu(); //单独洗衣程序
LED_XiDi = 0; //洗涤状态灯
LED_PiaoXi = 1; //漂洗状态灯
LED_TuoShui = 1; //脱水状态灯亮
break;
case PAISHUI : Programme_PaiShui(); //排水洗衣程序
LED_XiDi = 1; //洗涤状态灯
LED_PiaoXi = 1; //漂洗状态灯
LED_TuoShui = 0; //脱水状态灯亮
break;
default : break;
}//end switch
}//end if(flag_FirstRun)
}//end esle
}//end while
}//end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -