基于单片机的简易净水器放水控制系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
继续接你之前剩下的水,再按又暂停,再按又继
续 … … ……
好玩啊,哼~
④ 如果差一点就满了,那就请按下点动开关吧;如果已经接
满水了,但还在放水,请按暂停键或者关闭单片机,
本设计的主要原理: 延时 。
好吧,我把程序贴在这里吧,也好显得我写了些东西,哈哈。
#include<reg51.h> #define key P1 sbit K = P2^0; //控制继电器 sbit K1= P1^2; //点动放水按键 sbit K2= P1^0; //半桶水按键 sbit K3= P1^1; //一桶水按键 sbit led1=P2^1;//半桶水工作指示灯 sbit led2=P2^2;//一桶水工作指示灯 sbit led3=P2^3;//点动指示灯 sbit led4=P2^4;//暂停指示灯 unsigned int count,m,n; unsigned char keyboard,a,b,c;
!既然他有了电磁阀以及电磁阀的工作电源,那就好办 多了,下面我列了一下可能需要的清单:
① STC 单片机一个--------(谢:申通也出单片机了吗?
Βιβλιοθήκη Baidu:呃 STC ?STO…… )
② 微动开关若干 ----------
X 若干
③ LED 指示灯若干 ------④ PNP 型三极管 8550 一个
X 若干
void Timer0() interrupt 1 {
TH0 = 0x0D8; TL0 = 0x0F0; count++; }
void Ex0() interrupt 0 {
if(keyboard==1) {
m++; if(m%2==1) {
K=1;TR0=0; a=led1;b=led2;c=led3; led4=1;led1=led2=led3=0; }
谢:我家里安装了一个净水机,但是净水机放水很慢,一般需要几分 钟才能接满一壶水,人不能总等着水满吧,人走开后又怕忘了, 很苦恼,听说单片机是个很厉害的东东,不如让它给解决一下……
我:要不咱试试……
其实,谢 是我的一个师父,为人和善,是一个很慈祥的年轻人
,在我现在的工作中教会了我很多东西,好了不罗嗦了, 要不看官们该烦了,言归正传,其实我的单片机基础也就是三年半以 前在学校了解的一点皮毛而已,但我固执的认为终有一天我要成为一 名伟大的单片机工程师,也许有人说了单片机工程师有什么好伟大的, 想想,好像还真没什么好伟大的,呵呵!那就让我们爱上单片机吧,
K=0;count=11000;TR0=1;n=1;led2=1;led1=led3=led4=0; //10s }
void main()
{
K=1;led1=led2=led3=led4=0;
key=0xff;
InitT0();
InitEx0();
while(1)
{
if(K1==0)
//点动
{ DelayMs(20);
。
剧终
if(K1==0&&n==0)
{
K=0;TR0=1;led3=1;led1=led2=led4=0;while(!K1); K=1;led3=0;TR0=1; } } else switch(key) { case 0xfe:
DelayMs(20); //软件去抖动 if(key==0xfe){K=1;led1=led2=led3=led4=0;TR0=0;while(!K2); //按键弹起后再执行 keyboard=1;bantong(); } break; case 0xfd: DelayMs(20); //软件去抖动 if(key==0xfd){K=1;led1=led2=led3=led4=0; TR0=0;while(!K3) //按键弹起后再执行 keyboard=1;yitong() ;} break; } if(count==12000) { K=1;TR0=0;keyboard=0; n=led1=led2=led3=led4=0; } } }
⑤ 5V 电磁阀一个
⑥ 单片机时钟电路:晶振 12MHz、陶瓷电容 30pF;
⑦ 复位电路(上电复位):0.1uF 极性电容、4.7KΩ电阻 ⑧ 其他电阻若干。 下面是我在 protuse 中的仿真图:
(图中未画出单片机的时钟电路,复位电路,以及电磁阀的接线)
实现功能: ① 按一下半桶微动开关,谢就可以接到半桶水了。 ② 按一下一桶微动开关,谢就可以接到一桶水了。 ③ 如果想暂停一下,那就按一下暂停微动开关,在按一次就
void InitEx0() {
EA = 1; EX0= 1; IT0= 1; }
//外部中断 0 允许 //外部中断 0 下降沿触发
void bantong() {
K=0;count=11700;TR0=1;n=1;led1=1;led2=led3=led4=0; //3s }
void yitong() {
我综合了一下谢的情况: 第一:他有一个 24V 的电源。 第二:他还有一个工作电压为 24V 的电磁阀,可作为放水开关。 第三:他有时候想接一壶水,但有时候想接半壶水。 第四:他还想有暂停功能,以及点动功能。 第五:他还想要些工作状态指示灯。
…… 好吧,就这些吧,要是让他提完他的要求,我估计可能就没完
void DelayMs(unsigned int x) {
unsigned char i;
while(--x!=0) {
for(i=0;i<125;i++); } }
void InitT0() {
TMOD = 0x01; TH0 = 0x0D8; //10ms 中断一次 TL0 = 0x0F0; EA = 1; ET0 = 1; //T0 中断允许 }
else {
K=0;TR0=1; led4=0;led1=a;led2=b;led3=c; } } }
我告诉谢按我的程序你要是按接一通水或者半桶的开关,你是不可能 接到那么多水的,呵呵,不过你可以去修改这里就行:
当然下面这一句也会影响到效果的:
好了,就这些吧,我觉得我又为我们单片机大家庭争取了一员大将