| | | | | K只是接通路由的AC电源?那也不难的啊...就是端口检测,输出端口.
|
|
|
|
| | | | | | | | | 我想问的是K被控制的是路由的电源还是什么?
而不是被什么控制..而是 K在控制的是什么. |
|
|
|
| | | | | | | | | | | 能问一下这个电路有哪些不足?或者改进吗?程序要怎么简化啊?谢谢版主 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | | | | | | | | | | 额恩,现在这个软件我电脑上没有装,我后续把仿真图传上 |
|
|
|
|
| | | | | | | 是吗?朋友!我感觉对于一个在校的大学生是一次锻炼! |
|
|
|
| | | | | | | | | | | 是吧,但是设计这个,换来的是学费,还有生活费!!有时候太高看大学生了。 |
|
|
|
|
|
| | | | | | | | | | | | | | | 好吧,我感觉学历就是一个敲门砖,只要有经验,有技术,无论到哪里都能站住脚,做什么事情都需要自己悟,我感觉最重要的思想就是转化,这是个人认为的。 |
|
|
|
|
|
| | | | | | | | | 是啊,都是最基本的,但是对于你们大神级人物,小菜一碟,对于一个还没毕业的大学生来说,可能就有点难了! |
|
|
| | | | | #include<reg51.h>
#define unchar unsigned char
#define uint unsigned int
#define _DEVICEFLAG_
uint num = 0;
uint Control = 0; //设置控制开关转变量
/***********************************
定义开关状态量
***********************************/
sbit Jiqi_Key = P0^0; //机器总开关
sbit Reset1 = P3^2; //复位开关1
sbit Reset2 = P3^3; //复位开关2
sbit Fuwuqi_Key = P0^5; //服务器+5V
/**********************************
继电器是否吸合状态判断引脚
**********************************/
sbit Jidian_KEY1 = P0^3; //无线路由器继电器开关KEY1
sbit Jidian_KEY2 = P0^4; //IPpbx继电器开关KEY2
/***********************************
定义开关控制量
***********************************/
sbit KEY5 = P2^0; //总电源指示灯;
sbit KEY2 = P2^1; //IPpbx reset
sbit KEY3 = P2^2; //无线路由器reset
sbit KEY4 = P2^3;
sbit KEY1 = P2^4; //网络开关
sbit KEY6 = P2^5; //IPPBX开关
/***************************************
开关延迟
****************************************/
void delay_ms(uint del)
{
uint i,j;
for(i=0;i<del;i++)
for(j=0;j<1827;j++)
;
}
/**************************************
LED灯延迟
***************************************/
/*void char_delay_ms(void)
{
unsigned char j;
for(j=0;j<50;j++);
}
*/
/*****************************************
单片机初始化
*****************************************/
void CPU_Init(void)
{
P0 = 0x00;
P2 = 0x00;
}
/**************************************
定时器中断初始化
***************************************/
void Jiqi_Key_Init(void)
{
TMOD=0x01; //定时器0,工作方式1
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
ET0 = 1;
TR0 = 1;
EA = 1;
}
/****************************************
定时器0溢出中断
****************************************/
void Jiqi_Key_Int(void) interrupt 1 //机器总开关Jiqi_Key 启动定时中断
{
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
num++;
if(num == 10)
{
TR0 = 0;
if(Jiqi_Key == 1)
{
#ifdef _DEVICEFLAG_
delay_ms(10);
if(Jiqi_Key == 0)
{
Control = 2;
}
else if(Jiqi_Key == 1)
{
Control = 2;
}
#else
delay_ms(3);
if(Jiqi_Key == 1)
{
Control = 1;
}
#endif
}
num = 0;
TR0 = 1;
}
}
/*************************************
外部中断初始化
*************************************/
void reset_Init(void)
{
EX0 = 1; //INT0中断开
EX1 = 1; //INT1中断开
IT0 = 0; // INT0低电平触发(为1则为下降沿触发)
IT1 = 0; //INT1低电平触发(为1则为下降沿触发)
EA = 1; //CPU所有中断开(IE最高位MSB)
}
/****************************************
外部中断0
****************************************/
void reset1_Int(void) interrupt 0 //复位开关reset1路由器 启动中断
{
delay_ms(3);
EX0 = 0;
if(Reset1 == 0)
{
delay_ms(10);
if(Reset1 == 0)
{
Control = 4; //继电器控制无线路由
}
else if (Reset1 == 1)
{
Control = 3;
}
}
EX0 = 1; //清除interrupt 1中断
}
/****************************************
外部中断1
****************************************/
void reset2_Int(void) interrupt 2 //复位开关reset2 IPpbx 启动中断
{
delay_ms(3);
EX1 = 0;
if(Reset2 == 0)
{
delay_ms(10);
if(Reset2 == 0)
{
Control = 6; //IPpbx继电器开关KEY2
}
else if(Reset2 == 1)
{
Control = 5; //控制IPpbx
}
}
EX1 = 1; //清除interrupt 2中断
}
void main()
{
KEY5=0;
Jiqi_Key_Init();
CPU_Init();
reset_Init();
while(1)
{
#ifdef _DEVICEFLAG_
/*******************************************
控制开关按键 路由+网络
******************************************/
if((KEY1 == 1)||(Fuwuqi_Key == 1)) //判断服务器+5V为1时,KEY5闭合
{
KEY5 = 1;
}
else if((Fuwuqi_Key == 0)&&(KEY1 == 0)) //判断服务器+5V为0时,KEY5断开
{
KEY5 =0;
}
#else
/*******************************************
控制开关按键 IP pbx+网络
******************************************
if((Jidian_KEY1 == 1)||(Jidian_KEY2 == 1)) //K1和K2任何一个接通时,K5接通
{
KEY5 = 0;
}
else if((Jidian_KEY1 == 0)&&(Jidian_KEY2 == 0)) //K1和K2全断开,K5断开
{
KEY5 = 1;
} */
#endif
switch(Control)
{
#ifdef _DEVICEFLAG_
/*******************************************
控制开关按键 路由+网络
*******************************************/
case 1: //机器总开关长按
if(Fuwuqi_Key == 0) //判断服务器+5V为0时
{
delay_ms(100);
if(Jiqi_Key == 1) //继电器K1为断开时
{
KEY1 = 1;
KEY4 = 1;
delay_ms(100);
KEY4 = 0;
}
else if(Jiqi_Key == 0)
{
KEY1 = 0;
}
}
else if(Fuwuqi_Key == 1) //服务器+5V为1时
{
delay_ms(100);
if(Jiqi_Key == 1) //继电器K1断开时
{
KEY4 =1;
delay_ms(100);
delay_ms(100);
delay_ms(100);
delay_ms(100);
KEY4 = 0;
}
else if(Jiqi_Key == 0) //继电器K1闭合时
{
KEY1 = 1;
KEY4 = 1;
delay_ms(100);
delay_ms(100);
delay_ms(100);
KEY1 = 0;
delay_ms(100);
KEY4 = 0;
}
}
Control = 0;
break;
case 2: //机器总开关短按
if(Fuwuqi_Key == 0) //判断服务器+5V为0时
{
delay_ms(100);
if(Jiqi_Key == 1) //继电器K1为断开时
{
KEY1 = 1;
KEY4 = 1;
delay_ms(100);
KEY4 = 0;
}
else if (Jiqi_Key == 0) //继电器K1为闭合时
{
KEY4 = 1;
delay_ms(100);
KEY4 = 0;
}
}
else if(Fuwuqi_Key ==1) //服务器+5V为1时
{
delay_ms(100);
if(Jiqi_Key == 1) //继电器K1断开时
{
KEY1 = 1;
}
else if(Jiqi_Key == 0) //继电器K1闭合时
{
;
}
}
Control = 0;
break;
case 3: //复位开关1长按
if(Jidian_KEY1 == 0) //继电器K1闭合
{
KEY2 = 1;
delay_ms(300);
KEY2 = 0;
}
Control = 0;
break;
case 4: //复位开关1短按
if(Jidian_KEY1 == 0) //继电器K1闭合
{
KEY1 = 0;
delay_ms(100);
KEY1 = 1;
}
Control = 0;
break;
case 5: //复位开关2长按
if(Fuwuqi_Key == 0)
{
KEY3 = 1;
delay_ms(100);
KEY3 = 0;
}
Control = 0;
break;
case 6:
if(Fuwuqi_Key == 0) //复位开关2短按
{
KEY3 = 1;
delay_ms(100);
KEY3 = 0;
}
Control = 0;
break;
/*******************************************
控制开关按键 IP pbx+网络
*******************************************
#else
case 1: // if(Jiqi_Key == 1)
// {
if((Jidian_KEY1 == 1)&&(Jidian_KEY2 == 1)) //当K1、K2断开时,此时按总电源开关,K1,K2接通
{
KEY1 = 1;
KEY6 = 1;
}
else if((Jidian_KEY1 == 0)&&(Jidian_KEY2 == 0)) //当K1、K2接通时,此时按总电源开关,K1,K2断开
{
KEY1 = 0;
KEY6 = 0;
}
// }
Control = 0;
break;
case 2:
{;}
// if(Jiqi_Key == 1)
// {
// }
// Control = 0;
break;
case 3: //复位开关1短按
if((Jidian_KEY1 == 0)&&(Jidian_KEY2 == 0))
{
KEY1 = 0;
delay_ms(100);
KEY1 = 1;
}
Control = 0;
break;
case 4:
if((Jidian_KEY1 == 0)&&(Jidian_KEY2 == 0))
{
//复位开关1长按
KEY3 = 1;
delay_ms(400);
KEY3 = 0;
}
Control = 0;
break;
case 5: //复位开关2短按
if((Jidian_KEY1 == 0)&&(Jidian_KEY2 == 0))
{
KEY6 = 0;
delay_ms(100);
KEY6 = 1;
}
Control = 0;
break;
case 6:
if((Jidian_KEY1 == 0)&&(Jidian_KEY2 == 0)) //复位开关2长按
{
KEY4 = 1;
delay_ms(400);
KEY4 = 0;
}
Control = 0;
break; */
#endif
default:
;
break;
}
}
}
这是程序,谢谢 |
|
|
|
| | | | | | | | | 反正在学校没事,整天就是游戏之类的,马上也快毕业了,就想试试自己的水平,毕竟刚接触工作。虽然可以简化很多,但是对于一个新手来说,能做出来已经很不错了,至少现在没什么问题,机器能正常运行。。 |
|
|
| | | | | | | 貌似.程序格式相对有点复杂了,多写写就可以减化不少.
KEY1-6 在里面写的时候,你还记得哪个是干嘛的吗?直接用缩写不是更懂维护与调试? |
|
|
| | | | | | | | | 嗯嗯,应该可以简化,本来想用STM32至少在写程序的时候,可以设置断点调试,感觉51就足以了,没有必要用功能大的,在说了51 中断源和IO口已经足够用了,在学校的时候已经很熟悉51了,就用51.至于开关用KEY1-6纯属自习惯。谢谢! |
|
|
|
| | | | | | | | | 延时对吧,其实写出来之后感觉挺简单的,但是接到之后,说实话有点迷茫,至少最后设计出来了!! |
|
|
|
|
|
|
|
| | | | | 很牛逼啊,不过你帮别人做了,知识产权是那公司的了吧,你这样发出来是不是不好? |
|
|
| | | | | | | 是吧,这算犯罪了?但是也没听他们不让啊,这只是一部分,应该没事 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| | | | | 看了之后感觉好厉害啊,有经商头脑,以最小的成本获取最大的利益,也学会融会贯通,赞一个。 |
|
|
|
|
|
|
|
| | | | | | | 大神,我感觉这个程序还可以在优化,你能给点建议吗?
|
|
|
|
|
|
| | | | | | | 大神,我感觉这个程序还可以在优化,你能给点建议吗?
|
|
|
|
|
|
|
| | | | | 还有楼主今年是上本科几年级,还是研究生了?想了解一下,没其他意思. |
|
|
|
|
|
|
|
|
| | | | | | | 大神,我感觉这个程序还可以在优化,你能给点建议吗? |
|
|
|
|
|
|
|
| | | | | | | | | 大神,我感觉这个程序还可以在优化,你能给点建议吗?
|
|
|