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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3836|回復: 6
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
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);
        
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:328014 發表于 2019-5-20 02:01 | 只看該作者
電路呢?
回復

使用道具 舉報

板凳
ID:522450 發表于 2019-5-20 08:41 | 只看該作者



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

使用道具 舉報

地板
ID:522450 發表于 2019-5-20 21:55 | 只看該作者
什么情況,我的帖子都沒有人理啊,郁悶了。。。
回復

使用道具 舉報

5#
ID:158375 發表于 2019-5-21 12:56 | 只看該作者
你需要一些標志,根據標志來運行。。。。。。
回復

使用道具 舉報

6#
ID:511890 發表于 2019-5-21 15:35 | 只看該作者
水泵有單獨的驅動器么,沒有的話要改下電路。
至于LED單獨閃爍。講LED等閃爍單獨做成一個方法函數。要用的時候調用函數就行了。
回復

使用道具 舉報

7#
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人国产精品久久久 | 91色综合 | 成人免费视频网站在线看 | 国产精品毛片无码 | 欧美三区在线观看 | 成人免费大片黄在线播放 | 亚洲精品乱码久久久久久按摩观 | 日本成人综合 | 久久国产成人 | 免费中文字幕 | 999re5这里只有精品 | 亚洲一区二区久久 | 国产乱码精品一区二三赶尸艳谈 | 精品久久久久久亚洲精品 | 免费久久久 | 国产成人精品一区二区三区在线观看 | 亚洲精品中文字幕在线观看 | 一区二区三区视频在线 | 日韩国产精品一区二区三区 | 亚洲视频在线免费观看 | 在线看片网站 | 午夜电影网站 | 欧美一级黄色片 | www.av7788.com| 最新国产在线 | 青青草亚洲| 日本精品一区二区三区在线观看视频 | 91久久久久久久 | 国产美女视频黄a视频免费 国产精品福利视频 | 亚洲不卡在线视频 | 国产综合精品 | 一区二区三区视频 | 99精品视频在线观看免费播放 | 精品国产乱码一区二区三区a | 日韩欧美在线视频播放 | 天天天天操| 99资源| 亚洲视频在线观看免费 | 日韩在线免费视频 | 欧美国产精品一区二区三区 | 国产精品69av|