#include ////调用单片机头文件
#define uchar unsigned char///无符号字符型 宏定义 变量范围0~255
#define uintunsigned int ///无符号整形 宏定义 变量范围0~65535
///数字管段选择定义 0 1 2 3 4 5 6 7 8 9
uchar code smg_du[]={0xde,0x91,0xcd,0xd5,0x93,0x2b,0x5f,0xd4,0xdf,0xd1,
// A B C D E F 不显示
0xd7,0x1f,0x4e,0x9d,0x4f,0x47 }; //断码
sbit led_y = P2^2; //黄灯 //高水位
sbit led_g = P2^1; //绿灯
sbit led_r = P2^0; //红灯 //低水位
sbit shuiwei1 = P3^4;
sbit shuiwei2 = P3^5;
sbit shuiwei3 = P3^6;
sbit shuiwei4 = P3^7;
sbit relay = P1^0; //继电器
sbit beep =P2^7; //蜂鸣器
uchar shuiwei; //水位
sbit dianji = P2^3;
/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i
for(j=0;j<120;j );
}
/********************独立按键程序*****************/
uchar key_can; //按键值
void key() //独立按键程序
{
static uchar key_new;
P1 |= 0x06;
if((P1 & 0x06) != 0x06) 按下//按钮
{
delay_1ms(1); //按钮抖动
if(((P1 & 0x06) != 0x06) && (key_new == 1))
{ //确认按钮
key_new = 0;
switch(P1 & 0x06)
{
case 0x02: relay = 0;///手动进水
break; //得到按键值
case 0x04: relay = 1;//手动停止进水
break; //得到按键值
}
}
}
else ///按钮松开
key_new = 1;
}
/******************主程序**********************/
void main()
{
P0 = P1 = P2 = P3 = 0xff;///初始化单片机IO口为高电平
P0 = ~smg_du[0] ;
delay_1ms(1500);
while(1)
{
key(); //独立按键程序
if(shuiwei4 == 1) //高水位 4档
{
shuiwei = 4;
led_r = 1;led_g = 1;led_y = 0; ///高水位绿灯亮
}
else if(shuiwei3 == 1) // 3档
{
shuiwei = 3;
led_r = 1;led_g = 0;led_y = 1; ///正常水位绿灯亮
}
else if(shuiwei2 == 1) // 2档
{
shuiwei = 2;
led_r = 1;led_g = 0;led_y = 1; ///正常水位绿灯亮
}
else if(shuiwei1 == 1) // 1档
{
shuiwei = 1;
led_r = 1;led_g = 0;led_y = 1; ///正常水位绿灯亮
}else //低水位 0
{
shuiwei = 0;
led_r = 0;led_g = 1;led_y = 1; //低水位红灯亮
}
P0 = ~smg_du[shuiwei]; //
if(shuiwei < 1) //进水
{
beep = ~beep; //蜂鸣器报警
relay = 0; //打开继电器 进水
}
else
{
beep = 1; //关闭蜂鸣器
}
if(shuiwei >= 4) //停止进水
{
relay = 1; //关闭继电器
dianji = 0; //打开抽水电机
}else
{
dianji = 1; //关闭电机
}
key(); //独立按键程序
delay_1ms(100);
}
}