久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3869|回復: 6
收起左側

單片機凈水器的程序,新手,搞得無法運行,大家指點一下吧

[復制鏈接]
ID:522450 發表于 2019-5-19 18:11 | 顯示全部樓層 |閱讀模式
20黑幣
第一次自己琢磨著寫程序,估計差得比較遠

請大神們指導一下,謝謝

我覺得在架構上有為,倒不是細節的問題,我理解得太淺了

現在感覺最大的問題是,機器如果進入一個狀態,怎么樣能讓它在保持運行狀態的同時循環閃動led,總感覺這兩個沒法各自運行

因為運行狀態是一個賦值就結束了,而led的閃動需要不斷循環改變輸出的,這里總有抓不住的感覺

所以,請大家不吝賜教吧,謝謝


單片機源程序如下:
/*Main.c file generated by New Project wizard
*
* Created:   4 17 2019
* Processor: 89C52
* Compiler:  Keil for 89C52
****/

#include <reg52.h>
#include <stdio.h>
#include "main.h"
#include "delay.h"
void machine();
sbit LOW=P2^0;   //低壓開關
sbit HIGH=P2^1;   //高壓開關
sbit LED1=P1^0;  //沖洗指示燈
sbit LED2=P1^1;   //水滿指示燈
sbit LED3=P1^2;    //缺水指示燈
sbit LED4=P1^3;    //故障指示燈
sbit LED5=P1^4;     //制水指示燈
sbit run=P1^5;     //泵+進水閥
sbit flow=P1^6;    //排水閥
sbit dula=P2^6;
sbit wela=P2^7;
void display(uchar,uchar,uchar,uchar);
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

uchar num1,num2,qian,bai,shi,ge,shine,LED,status;
uint num,numx,aa;

void main()
{
                                TMOD=0X11;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;

              num=0;
        
         
            if(LOW==0)    //開機檢測有無自來水
                        delay_ms(10);  //延時去抖
                        if(LOW==0)
                        {
                                status=1;        //有水,沖洗
                                aa=0;
                          delay_ms(18000);  //沖洗延時18秒
                         }
                        
                while(1)
                        {
                          display (qian,bai,shi,ge);
        
                                machine();
                                 
                         if(HIGH==0&LOW==0)   //水桶沒滿,不缺水,則進入制水
                           {
                                 status=5;
                                 numx=aa;
                                 TR1=1;    //這個計時器打開,計算制水運行時間,水滿待機狀態就不計時了--這里后續還得增加濾芯使用時間的計量
                                 //num=0;
                                 
                                                  if(num==2160)  //連續6小時制水進入故障
                                                        {
                                                                num=0;
                                  status=4;
                                                         }
                                   
                                                  if(numx==2160)//累計6小時制水沖洗一次,或從頭開始執行也可以
                                                  {
                                                    numx=0;
                                                          status=1;
                                                  }                                 
                            }
                            else if(LOW==1) //缺水狀態
                        
                             status=3;
                                         
                                        else if(HIGH==1)  //高壓動作,水滿,同時清零連續制水6小時的計時數據,關閉累計制水的計時器,但是把計時數據保存起來
                                 {
                            num=0;
                                        aa=numx;
                                        TR1=0;
                            status=2;        
                    }
                        
                                 
          }
         
        }

        void machine()
        {
           while(status==1)//沖洗狀態,水泵和排水閥門打開
                 {
                   run=0;
                         flow=0;
                          if(num1==0)
                                        LED1=~LED1;         
                 }
                 while(status==2)//水滿,待機狀態,水泵、排水閥門全部關閉
                 {
                    run=1;
                          flow=1;
                          if(num1==0)
                          LED2=~LED2;
                 }
                 while(status==3)//缺水,待機,水泵和排水閥全部關閉
                 {
                    run=1;
                          flow=1;
                          if(num1==0)
                          LED3=~LED3;
                 }
                 while(status==4)//故障,就是連續制水沒有水滿狀態,如果中間有過水滿待機,則這個故障計時清零重新計算,后續還會增加一個常開觸點,閉合后也會進入故障待機狀態
                 {
                    run=1;
                         flow=1;
                          if(num1==0)
                          LED4=~LED4;
                 }
                 while(status==5)//正常制水,水泵打開,排水閥關閉
                 {
                    run=0;
                          flow=1;
                         if(num1==0)
                          LED5=~LED5;
                 }
        }

   void T0_time() interrupt 1
      {
            TH0=(65536-45872)/256;
            TL0=(65536-45872)%256;
            num1++;
                                if(num1==10)
                                {
                                        num1=0;
                                }
           }

    void T1_time() interrupt 3
         {
               TH1=(65536-45872)/256;
         TL1=(65536-45872)%256;
               num2++;
                     if(num2==200)  //每個中斷是50毫秒,200個中斷是10秒
                                  {
                                        num2=0;
                                        numx++;
                                  num++;
                                        qian=numx/1000;
                                                bai=numx%1000/100;
                                                 shi=numx%100/10;
                                                   ge=numx%10;
                                  }
                }
        void display(char qian,uchar bai,uchar shi,uchar ge)//這里想監視一下時間的,實際運行時不需要這些顯示
{

        dula=1;
        P0=table[qian];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delay_ms(3);
        
        dula=1;
        P0=table[bai];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay_ms(3);
        
        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delay_ms(3);
        
        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xf7;
        wela=0;
        delay_ms(3);
        
}



回復

使用道具 舉報

ID:328014 發表于 2019-5-20 02:01 | 顯示全部樓層
電路呢?
回復

使用道具 舉報

ID:522450 發表于 2019-5-20 08:41 | 顯示全部樓層

113556en2d3vy8ddcjxpjg.png

大致的原理圖,外圍的部件沒有畫出來,就是驅動水泵和排水電磁閥的部分沒有畫出來,大致的原理就是這個樣子
回復

使用道具 舉報

ID:522450 發表于 2019-5-20 21:55 | 顯示全部樓層
什么情況,我的帖子都沒有人理啊,郁悶了。。。
回復

使用道具 舉報

ID:158375 發表于 2019-5-21 12:56 | 顯示全部樓層
你需要一些標志,根據標志來運行。。。。。。
回復

使用道具 舉報

ID:511890 發表于 2019-5-21 15:35 | 顯示全部樓層
水泵有單獨的驅動器么,沒有的話要改下電路。
至于LED單獨閃爍。講LED等閃爍單獨做成一個方法函數。要用的時候調用函數就行了。 084054wdodvozqovidoct4.png
回復

使用道具 舉報

ID:447439 發表于 2022-5-5 22:34 | 顯示全部樓層
幻劍心 發表于 2019-5-21 15:35
水泵有單獨的驅動器么,沒有的話要改下電路。
至于LED單獨閃爍。講LED等閃爍單獨做成一個方法函數。要用的 ...

真是大佬,太牛了。真細致。這種凈水器的電機一般都由MCU控制繼電器。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产高清高潮精品美女 | 成人在线看片 | 中文字幕国产 | 国产在线精品免费 | 亚洲一区二区在线播放 | 伊人久久免费 | 久久精品免费观看 | 国产成人精品av | 91国在线观看 | 黑人精品 | 欧美一区二区三区精品 | 在线不卡av| 午夜国产一区 | 亚洲久草视频 | 亚洲中午字幕 | 国产精品久久久久久久久久久久午夜片 | 欧美日韩在线一区二区 | 亚洲品质自拍视频 | 黄色免费av | 国产不卡一区 | 欧美女优在线观看 | 成年人网站国产 | 日韩av成人在线 | 播放一级黄色片 | 久久久久亚洲av毛片大全 | 亚洲一区二区三区四区在线观看 | 黄色片视频 | 中文字幕av免费 | 国产成人免费 | 午夜精品网站 | 97视频在线免费 | 国产专区免费 | 欧美www在线观看 | 欧美一区二区在线免费观看 | 中文字幕一区二区三区精彩视频 | 香蕉视频91| 黄 色 毛片免费 | 日韩成人一区 | 久久精品网 | 欧美日韩在线观看视频网站 | 香蕉久久a毛片 |