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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

有大神可以幫忙翻譯一下這段單片機代碼的大致意思嗎?

[復制鏈接]
回帖獎勵 50 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次(中獎概率 30%)
跳轉到指定樓層
樓主
最近在做單片機項目,網上找了許多相似的借鑒,但是C語言程序實在難以看懂全部,想修改程序功能能以下手,希望有大佬可以幫忙看一下下面這段代碼,解釋一下每段代碼、函數是什么意思,達到什么目的

#include <REG52.H>
#define uchar unsigned char
#define uint  unsigned int
#define qiang_ledon qiang_led=1;
#define qiang_ledoff qiang_led=0;
#define biao_ledon biao_led=1;
#define biao_ledoff biao_led=0;
#define ruo_ledon ruo_led=1;
#define ruo_ledoff ruo_led=0;
#define piao_ledon piao_led=1;
#define piao_ledoff piao_led=0;
#define sgan_ledon sgan_led=1;
#define sgan_ledoff sgan_led=0;
#define jin_ledon jin_led=1;
#define jin_ledoff jin_led=0;
#define pai_ledon pai_led=1;
#define pai_ledoff pai_led=0;
unsigned char code Tab[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //數碼管顯示0~9的段碼表
unsigned char int_time;        //記錄中斷次數
unsigned char second;        //儲存秒
uint t=0,tt=0;
   sbit k1=P0^0;
   sbit k2=P0^1;
   sbit k3=P0^2;
   sbit sg=P0^3;
   sbit hk1=P0^4;
   sbit hk2=P0^5;
   sbit ledon=P0^7;
   sbit qiang_led=P2^0;
   sbit biao_led=P2^1;
   sbit ruo_led=P2^2;
   sbit piao_led=P2^3;
   sbit sgan_led=P2^4;
   sbit jin_led=P2^5;
   sbit pai_led=P2^6;
   sbit p30=P3^0;
   sbit p31=P3^1;
   sbit beepon=P2^7;
   sbit sm1=P3^6;
   sbit sm2=P3^7;
void delay2(void)
   {
  unsigned char m;
  for(m=0;m<200;m++)
        ;
   }

void delay1(int s)
   {
   int i;
   for(;s>0;s--)
   for(i=0;i<65;i++);
   }

void delay(uint i)
   {
   uchar j;
   for(i;i>0;i--)
   for(j=255;j>0;j--);
   }

void DisplaySecond(unsigned char k)
{

   sm1=0;        //P2.6引腳輸出低電平, DS6點亮
   P1=Tab[k/10];          //顯示十位
     delay2();
     delay2();
   sm1=1;
   sm2=0;       //P2.7引腳輸出低電平, DS7點亮
   P1=Tab[k%10];         //顯示個位
     delay2();
     delay2();
   P3=0xff;     //關閉所有數碼管
   P1=1;        //顯示個位
     delay2();
     delay2();
}
           
void beep()
   {
          p30=0;
    p31=0;
           t=0;
        while(1)
        {
          beepon^=1;
      delay(300);
      if(t>=80) break;
        }
        beepon=0;
        biao_led=0;
    }
         
void f_qiang()
    {         
         qiang_ledon;
         t=0;
         tt=0;        
     int_time=0;
     second=00;
         while(1)
    {        
          if(tt>=400) break;
      t=0;
          while(t<80&&tt<=400)
          {        
            p31=0;
            p30=1;        //正轉 4s
        DisplaySecond(second);
            }
          t=0;          //反轉 4s        
          while(t<80&&tt<=400)
          {
            p30=0;
            p31=1;
            DisplaySecond(second);
            }
     }
          p30=0;
          p31=0;         
     }

void f_biao()
        {
          qiang_led=0;
      biao_led=1;
          t=0;
          tt=0;
      int_time=0;
      second=00;
         while(1)
     {
           if(tt>=400) break;
           t=0;
          while(t<60&&tt<=400)
           {        
          p31=0;
                  p30=1;        //正轉3s
          DisplaySecond(second);
       }

                t=0;          //反轉3s
          while(t<60&&tt<=400)
       {
              p30=0;
                  p31=1;
                  DisplaySecond(second);
                }
       }
       p30=0;
           p31=0;
         }

void f_ruo()
    {
          qiang_led=0;
          biao_led=0;
          ruo_led=1;
          t=0;
          tt=0;
      int_time=0;
       second=00;
                while(1)
       {
                    if(tt>=400) break;
                 t=0;
               while(t<40&&tt<=400)
           {        p31=0;
                        p30=1;        //正轉2s
                DisplaySecond(second);
                }
             t=0;          //反轉 2s
               while(t<40&&tt<=400)
            {   p30=0;
                        p31=1;
                        DisplaySecond(second);
                      }
         }
                p30=0;
            p31=0;
       }

void f_piao()
        {
           qiang_ledoff;
           biao_ledoff;
           piao_ledon;
           t=0;
           tt=0;
       int_time=0;
       second=00;
                 while(1)
          {
                      if(tt>=400) break;
                   t=0;
                 while(t<40&&tt<=400)
               {        p31=0;
                        p30=1;        //正轉2s
                    DisplaySecond(second);
                   }
                   t=0;          //反轉2s
                 while(t<40&&tt<=400)
               {    p30=0;
                            p31=1;
                             DisplaySecond(second);
                       }
             }
          p30=0;
      p31=0;
          piao_ledoff;
          }

void pai_leds()
     {
            p30=0;
            p31=0;
               pai_led=1;        //排水閥燈亮 等待霍爾開關2
            while(hk2);
            if(hk2==0)  //如果閉合
            pai_led=0;        //排水燈滅
     }

void jin()
    {
            p30=0;
            p31=0;
            jin_ledon;
             while(hk1);
            if(hk1==0)
            jin_ledoff;
     }

void sgan()
    {
            sgan_ledon;         //甩干燈亮
             t=0;
        int_time=0;
        second=00;
             while(t<=400)
            {        
                            p31=0;
                        p30=1;        
                DisplaySecond(second);
                 }
        sgan_ledoff;
    }

void sgan1()
    {
           sgan_ledon;
            t=0;
       int_time=0;
       second=00;
             while(t<=400)
            {        
                           p31=0;
                   p30=1;        
               DisplaySecond(second);
                 }
        piao_ledoff;
        sgan_ledoff;
        beep();
            t=401;
    }


void f_an1()
   {  
        qiang_ledon; //方案1燈亮
        jin();  //進入強洗
        f_qiang();         //循環20S
        delay1(4000);//延時4s
        f_biao();  //循環20S
        delay1(4000);//延時4s
        f_ruo();  //循環20S
        ruo_ledoff;        
        pai_leds();
        delay1(1000); //延時1S 進入甩干
        sgan(); //甩干20s
        sgan_ledoff;
        ruo_ledoff;
        piao_ledoff;
        jin();
        delay1(1000); //延時1S 進入漂洗
        f_piao();  //循環20S
        sgan_ledoff;
        piao_ledoff;
        pai_leds();
        delay1(1000); //延時1S 進入甩干
        sgan1();//最終甩干20S
        delay(500);//延時        
        beep();
   }

void f_an2()
   {  
        biao_ledon; //方案1燈亮
        jin();
        f_biao();  //循環20S
        delay1(4000); //延時4S
        f_ruo();  //循環20S
        ruo_ledoff;
        pai_leds();
        delay1(1000); //延時1S 進入甩干
        sgan(); //甩干20s
        ruo_ledoff;
        piao_ledoff;
        jin();
        delay1(1000); //延時1S 進入漂洗
        f_piao();  //循環20S
        sgan_led=0;
        pai_leds();
        delay1(1000); //延時1S 進入甩干
        sgan();//最終甩干20s
        delay(500);//延時5s
        piao_led=0;
        beep();
   }

void f_an3()
  {  
        ruo_led=1; //方案1燈亮
        jin();
        f_ruo();  //循環20S
        ruo_ledoff;
        pai_leds();
        delay1(1000); //延時1S 進入甩干
        sgan(); //甩干20S
        ruo_ledoff;
        piao_ledoff;
        jin();
        delay1(1000); //延時1S 進入漂洗
        f_piao();  //循環20S
        sgan_led=0;
        pai_leds();
        delay1(1000); //延時1S 進入甩干
        sgan();//最終甩干20s
        delay(500);//延時5s
        piao_led=0;
        p30=0;
        beep();
   }


int main(void)
{         
  TMOD=0x01;       //方式1 16位計數器
  TH0=-50000/256;   //設定初值
  TL0=-50000%256;
  EA=1;               //開總中斷
  ET0=1;             //開定時器0中斷
  TR0=1;             //啟動定時器0
  P2=0;
  int_time=0;     //中斷次數初始化
  second=00;           //秒初始化
         while(1)
    {        
          if(k1==0)
        {         
                delay(10);
                if(k1==0)
            {
                        f_an1();
                }
        }
        if(k2==0)
        {
                delay(10);
                if(k2==0)
                {
                        f_an2();
                }
        }
        if(k3==0)
        {
            delay(10);
           if(k3==0)
            {
                    f_an3();
            }
        }

         if(sg==0)
        {
                delay(10);
                if(sg==0)
                {
                   sgan1();
                }
        }
}
        return 0;
}  


void time0() interrupt 1 using 1
   {  
     int_time ++;        //每來一次中斷,中斷次數int_time自加1
    if(int_time==20)   //夠20次中斷,即1秒鐘進行一次檢測結果采樣
      {
        int_time=0;    //中斷次數清0
        second++;    //秒加1
      }                    
   TH0=-50000/256;   //50000  =50ms中斷一次
   TL0=-50000%256;
   t++;
   tt++;
   }



洗衣機仿真.zip

131.02 KB, 下載次數: 6

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

使用道具 舉報

來自 4#
ID:328014 發表于 2021-5-17 18:37 | 只看該作者
你是while(1)大循環看不懂嗎?我幫你注釋幾行吧
while(1)//死循環
    {        
          if(k1==0)//按鍵消抖,如果不懂可以論壇搜索消抖教程:http://www.zg4o1577.cn/bbs/dpj-133523-1.html
        {         
                delay(10);//延時
                if(k1==0)////按鍵消抖
            {
                        f_an1();//執行方案1
                }
        }
回復

使用道具 舉報

沙發
ID:311846 發表于 2021-5-17 10:35 | 只看該作者
一堆注釋都看不懂?你C沒學會改毛線,洗洗睡。一堆代碼誰有這閑工夫和你扯淡,自己認真學認真看,哪個點不懂問問還差不多
回復

使用道具 舉報

板凳
ID:824490 發表于 2021-5-17 10:47 | 只看該作者
權威人物 發表于 2021-5-17 10:35
一堆注釋都看不懂?你C沒學會改毛線,洗洗睡。一堆代碼誰有這閑工夫和你扯淡,自己認真學認真看,哪個點不 ...

霸氣!
確實如此,不要一來就是一張圖、一份代碼,讓人家幫你?幫是情分,不幫是本分,畢竟不是在學校,網友也不是你的老師,每個人都是忙里偷閑地上網看看,
應該是把你遇到的問題、你的思路發上來,這樣大家才能更有效在幫你。
回復

使用道具 舉報

5#
ID:919394 發表于 2021-5-17 18:49 | 只看該作者
權威人物 發表于 2021-5-17 10:35
一堆注釋都看不懂?你C沒學會改毛線,洗洗睡。一堆代碼誰有這閑工夫和你扯淡,自己認真學認真看,哪個點不 ...

謹遵教誨。小白剛接觸單片機,下次注意
回復

使用道具 舉報

6#
ID:919394 發表于 2021-5-17 18:53 | 只看該作者
51hei團團 發表于 2021-5-17 18:37
你是while(1)大循環看不懂嗎?我幫你注釋幾行吧
while(1)//死循環
    {        

懂了 謝謝老哥
回復

使用道具 舉報

7#
ID:919394 發表于 2021-5-17 19:05 | 只看該作者
名字不是重點 發表于 2021-5-17 10:47
霸氣!
確實如此,不要一來就是一張圖、一份代碼,讓人家幫你?幫是情分,不幫是本分,畢竟不是在學校, ...

明白了,謝謝老哥指點,下次一定改正
回復

使用道具 舉報

8#
ID:743654 發表于 2021-5-18 08:49 | 只看該作者
確實不要做伸手黨,不懂自己先查資料,哪里薄弱補哪里,C語言是基礎。
遇到問題解決問題,這樣才能提高!
回復

使用道具 舉報

9#
ID:919834 發表于 2021-5-18 09:34 | 只看該作者
我建議弄個程序流程圖吧。你這個照搬還不懂的。有點難搞。一個功能一個模塊。這樣就清晰了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产色综合久久不卡蜜臀 | 九九热视频这里只有精品 | 亚洲电影第三页 | 在线免费亚洲视频 | 91免费在线看 | 99精品99 | 国产一区二区三区免费观看视频 | 日本久久精品视频 | 蜜桃av人人夜夜澡人人爽 | 国产精品一区在线观看 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 青青草原精品99久久精品66 | 国产一级电影在线 | 国产精品美女久久久 | 国产九九精品 | 亚洲精品久久 | 国产一区二区在线视频 | 国产片网站| 日本字幕在线观看 | 视频一区在线观看 | 免费看国产片在线观看 | 免费黄色片视频 | 亚洲综合久久久 | 色资源站 | 国产成人免费 | 毛片一级片| 激情五月婷婷在线 | 国产黄色在线观看 | 日日干天天干 | 一区二区福利视频 | 日本 欧美 国产 | 一区二区三区在线免费观看 | 精品在线观看一区 | 亚洲网站免费看 | 免费视频一区二区三区在线观看 | 欧美精品一区二区免费 | 国产剧情一区二区三区 | 国产精品1| 综合伊人 | 欧美三级三级三级爽爽爽 | 中文字幕一区二区三区精彩视频 |