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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4168|回復(fù): 6
收起左側(cè)

求解釋一下豆?jié){機(jī)的Proteus仿真單片機(jī)源碼每一步的意思,以及4個(gè)按鍵的作用

  [復(fù)制鏈接]
ID:208751 發(fā)表于 2017-6-11 16:02 | 顯示全部樓層 |閱讀模式
我找到一個(gè)豆?jié){機(jī)的仿真源碼,但是源碼沒有幾個(gè)注釋,我根本看不懂,求大神幫忙翻譯一下每句的意思,我急用呀,本人實(shí)在太小白了,根本看不懂幾句代碼。

豆?jié){機(jī)電路原理圖

豆?jié){機(jī)電路原理圖

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar  unsigned char
  4. #define uint  unsigned int
  5. sbit M0=P3^0;   //八路NPN達(dá)林頓連接晶體管連接6線步進(jìn)電機(jī)
  6. sbit M1=P3^1;
  7. sbit M2=P3^2;
  8. sbit M3=P3^3;
  9. sbit sw0=P3^6;   //K1開始
  10. sbit sw1=P3^7;   //K2
  11. sbit key0=P1^0;   //K3
  12. sbit key1=P1^1;    //K4
  13. sbit f=P3^4;       //蜂鳴器
  14. uchar Speed=1;  //分
  15. uchar m;
  16. uchar t=0;
  17. uchar n=0;
  18. uchar Date=0;
  19. uchar Ledplay[6];
  20. uchar bn=0;
  21. uchar code  SEG7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  22. 0x7f,0x6f,0x38,0x77,0x40,0x00};
  23. uchar code  Scan_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  24. uchar data  Dis_buf[]={0,0,10,10,10,10};
  25. uchar z;
  26. void Delayxms(uint t)        //延時(shí)ms            
  27. {
  28.     unsigned char i,j,k;
  29.    for(k=0;k<t;k++)
  30.   {
  31.            _nop_();
  32.                    _nop_();
  33.                 _nop_();
  34.            i = 11;
  35.            j = 190;
  36.       do
  37.           {
  38.                    while (--j);
  39.            } while (--i);
  40.    }               
  41. }
  42. void Delay1us(uchar t)        //延時(shí)1us            
  43. {
  44.     uchar i;
  45.    for(i=0;i<t;i++)
  46.   {
  47.            _nop_();
  48.            _nop_();
  49.            _nop_();         
  50.    }               
  51. }
  52. void display(void)                        //數(shù)碼管顯示時(shí)間
  53. {                                                
  54.       uchar i;              
  55.      for(i=0;i<6;i++)
  56.     {
  57.          P2=0xff;               //全部數(shù)碼管位選失能
  58.                  P0=SEG7[Dis_buf[i]];        //第i個(gè)數(shù)碼管顯示
  59.                  P2= Scan_bit[i];
  60.                  Delayxms(1);
  61.     }                                       
  62. }

  63. void Timer0_init(void)  //計(jì)時(shí)器
  64. {
  65.     TMOD=0x51;
  66.         TH0=(65535-50000)/256;
  67.         TL0=(65535-50000)%256;
  68.         EA=1;
  69.         ET0=1;
  70.         TR0= 1;
  71. }
  72. uchar cnt=100;        //秒
  73. void Timer0_int(void) interrupt 1 using        1   //定時(shí)中斷
  74. {
  75.     t++;
  76.         TH0=(65535-50000)/256;
  77.         TL0=(65535-50000)%256;
  78.         if(t==20)
  79.         {
  80.            t=0;
  81.            Date=n;
  82.            n=0;
  83.            cnt--;
  84.            if(cnt==0)
  85.            {
  86.              while(1)
  87.                  {
  88.                      f=0;
  89.                          f=1;
  90.                  }
  91.                   
  92.            }
  93.         }
  94.         if(key0==0)  //檢測K3按下
  95.         {
  96.            Delayxms(10);  //延時(shí)10ms
  97.            if(key0==0)   
  98.            {
  99.               Speed++;
  100.                   if(Speed>20)
  101.                   {
  102.                     Speed=20;
  103.                   }
  104.            }
  105.            while(key0==0);
  106.         }
  107.         if(key1==0)    //檢測K4按下
  108.         {
  109.            Delayxms(10);
  110.            if(key1==0)
  111.           {
  112.              Speed--;
  113.                  if(Speed==0)
  114.                  {
  115.                     Speed=1;
  116.                  }
  117.           }
  118.           while(key1==0);
  119.         }
  120. }        
  121. void delay()                     
  122. {  
  123.     uchar i=5+Speed;
  124.     while(--i!=0)
  125.   {
  126.      Dis_buf[0]=13;
  127.          Dis_buf[1]=cnt%10;
  128.          Dis_buf[2]=cnt/10;
  129.          Dis_buf[3]=12;
  130.      Dis_buf[4]=Speed%10;
  131.          Dis_buf[5]=Speed/10;
  132.          display();
  133.   }                          
  134. }
  135. void R_rotation()
  136. {
  137.    M3=0;
  138.    M0=1;
  139.    delay();
  140.    n++;
  141.    M0=0;
  142.    M1=1;
  143.    delay();
  144.    n++;
  145.    M1=0;
  146.    M2=1;
  147.    delay();
  148.    n++;
  149.    M2=0;
  150.    M3=1;
  151.    delay();
  152.    n++;
  153. }
  154. /*void F_rotation()
  155. {
  156.    M0=0;
  157.    M3=1;
  158.    delay();
  159.    n++;
  160.    M3=0;
  161.    M2=1;
  162.    delay();
  163.    n++;
  164.    M2=0;
  165.    M1=1;
  166.    delay();
  167.    n++;
  168.    M1=0;
  169.    M0=1;
  170.    delay();
  171.    n++;
  172. }*/
  173. void main()
  174. {  
  175.    int flag = 0;
  176.    Timer0_init();  //初始化
  177.         while(1)
  178.         {
  179.                 if(flag==1)
  180.                         R_rotation();
  181.                 if(sw1==0)                //檢測K2是否按下               
  182.                 {
  183.                         cnt=10;
  184.                         flag=1;
  185.                 }
  186.                 if(sw0==0)                //檢測K1是否按下               
  187.                 {
  188.                         cnt=20;
  189.                         flag=1;
  190.                 }
  191.         }
  192. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-6-12 20:28 | 顯示全部樓層
冗長的程序!還沒人解答?
回復(fù)

使用道具 舉報(bào)

ID:472242 發(fā)表于 2019-2-9 04:28 | 顯示全部樓層
沒那么復(fù)雜,主要功能是控制馬達(dá)正反轉(zhuǎn),加速與減速
下面的是調(diào)速,轉(zhuǎn)的方向也屏蔽了一個(gè),剩下的是數(shù)碼管顯示及延時(shí),很簡單
void Timer0_int(void) interrupt 1 using        1   //定時(shí)中斷
{
    t++;
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        if(t==20)
        {
           t=0;
           Date=n;
           n=0;
           cnt--;
           if(cnt==0)
           {
             while(1)
                 {
                     f=0;
                         f=1;
                 }
                  
           }
        }
        if(key0==0)  //檢測K3按下
        {
           Delayxms(10);  //延時(shí)10ms
           if(key0==0)   
           {
              Speed++;
                  if(Speed>20)
                  {
                    Speed=20;
                  }
           }
           while(key0==0);
        }
        if(key1==0)    //檢測K4按下
        {
           Delayxms(10);
           if(key1==0)
          {
             Speed--;
                 if(Speed==0)
                 {
                    Speed=1;
                 }
          }
          while(key1==0);
        }
}        

評分

參與人數(shù) 6黑幣 +170 收起 理由
zhengchong60 + 15
sheng7533967 + 15
Trump1438 + 35
#include51.h + 35
shuisheng + 35
jinsheng7533967 + 35

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:936659 發(fā)表于 2021-6-11 20:24 | 顯示全部樓層
sbitkey1=P2^0;        //接口定義
sbitkey2=P2^1;
sbitkey3=P2^2;
sbitbuzzer=P1^4;

sbitrelayF=P1^0;
sbitrelayJ=P1^1;
unsignedcharReadTempFlag=0;//定義讀時(shí)間標(biāo)志
inttemp1;                //溫度讀取值
floattemperature;//實(shí)際溫度

unsignedlongtime_20ms=0;                        //定時(shí)計(jì)數(shù)

unsignedchari;

xdataunsignedchardis0[16];//數(shù)據(jù)暫存
xdataunsignedchardis1[16];//數(shù)據(jù)暫存
xdataunsignedchardis2[16];//數(shù)據(jù)暫存

unsignedintsetR=5;//設(shè)置溫度
unsignedintsetF1=5;//設(shè)置濕度
unsignedintsetF2=5;

bitstartFlag=0;//開始運(yùn)行
unsignedinttimeLater=0;//初始化時(shí)間
unsignedcharstep=0;//運(yùn)行步驟

bitdisFlag=0;//顯示標(biāo)志
unsignedcharSetFlag=0;//設(shè)置標(biāo)志

voidInit_Timer0(void);//函數(shù)命令
voidCheckKey(void);
voiddealYunXing(void);

voidmain(void)
{
        Init_Timer0();//定時(shí)器0初始化

        relayF=0;        //繼電器和蜂鳴器上電動作下方便檢測硬件
        relayJ=0;
        buzzer=0;
        DelayMs(200);//延時(shí)有助于穩(wěn)定
        relayF=1;
        relayJ=1;
        buzzer=1;

        LCD_Init();//初始化液晶
        DelayMs(20);//延時(shí)有助于穩(wěn)定
        LCD_Clear();//清屏

        while(1)//主循環(huán)
        {       
                CheckKey();//按鍵處理
                dealYunXing();        //運(yùn)行過程
                if(ReadTempFlag==1)                //讀取溫度標(biāo)志
                {
                        ReadTempFlag=0;
                        temp1=ReadTemperature();        //讀取溫度
                        temperature=(float)temp1*0.0625;        //溫度值轉(zhuǎn)換
                        sprintf(dis0,"T:%4.1fC",temperature);
                        LCD_Write_String(0,0,dis0);//顯示時(shí)間及溫度
                }

                if(disFlag==1)
                {
                        disFlag=0;
                        sprintf(dis1,"J%02dA%02dB%02d",(int)setR,(int)setF1,(int)setF2);
                        LCD_Write_String(0,1,dis1);        //初始化顯示
                       
                        if(SetFlag==0)//按鍵設(shè)置標(biāo)志
                        {
                                LCD_Write_Char(0,1,'');LCD_Write_Char(4,1,'');LCD_Write_Char(8,1,'');//更新顯示標(biāo)志
                        }
                        elseif(SetFlag==1)//按鍵設(shè)置標(biāo)志
                        {
                                LCD_Write_Char(0,1,'S');LCD_Write_Char(4,1,'');LCD_Write_Char(8,1,'');//更新顯示標(biāo)志
                        }                       
                        elseif(SetFlag==2)//按鍵設(shè)置標(biāo)志
                        {
                                LCD_Write_Char(0,1,'');LCD_Write_Char(4,1,'S');LCD_Write_Char(8,1,'');//更新顯示標(biāo)志
                        }
                        elseif(SetFlag==3)//按鍵設(shè)置標(biāo)志
                        {
                                LCD_Write_Char(0,1,'');LCD_Write_Char(4,1,'');LCD_Write_Char(8,1,'S');//更新顯示標(biāo)志
                        }

                        if(step==0)        //查看運(yùn)行步驟
                        {       
                                sprintf(dis2,"STP-%2.1f",(float)timeLater/10);        //顯示                               
                        }
                        elseif(step==1)                //查看運(yùn)行步驟
                        {       
                                sprintf(dis2,"JR-%2.1f",(float)timeLater/10);        //顯示                                                                                               
                        }
                        elseif(step==2)                //查看運(yùn)行步驟
                        {       
                                sprintf(dis2,"FS1-%2.1f",(float)timeLater/10);        //顯示                                                                                                       
                        }
                        elseif(step==3)        //查看運(yùn)行步驟
                        {       
                                sprintf(dis2,"JR-%2.1f",(float)timeLater/10);        //顯示                                                                                               
                        }                                       
                        elseif(step==4)                //查看運(yùn)行步驟
                        {       
                                sprintf(dis2,"FS2-%2.1f",(float)timeLater/10);        //顯示                                                                                       
                        }
                        elseif(step==5)                //查看運(yùn)行步驟
                        {       
                                sprintf(dis2,"JR-%2.1f",(float)timeLater/10);        //顯示                                                                                               
                        }
                        LCD_Write_String(9,0,dis2);//顯示
                                               
                }
        }
}

voidCheckKey(void)
{
        staticunsignedcharrekey=0;
        if((key1==0)||(key2==0)||(key3==0))                //檢測到按鍵按下
        {
                DelayMs(10);//小抖動
                if(rekey==0)
                {
                        if(key1==0)//檢測是否按下
                        {
                                rekey=1;
                                SetFlag++;//設(shè)置標(biāo)志
                                if(SetFlag>=4)SetFlag=0;
                        }       
                        elseif(key2==0)//設(shè)置值鍵
                        {
                                rekey=1;
                                if(SetFlag==1)//處于設(shè)置1
                                {
                                        if(setF1>0)
                                        {setR=setR-1;}
                                }
                                elseif(SetFlag==2)//處于設(shè)置2
                                {
                                        if(setF1>0)
                                        {setF1=setF1-1;}
                                }
                                elseif(SetFlag==3)//處于設(shè)置3
                                {
                                        if(setF2>0)
                                        {setF2=setF2-1;}
                                }                                                                               
                        }
                        elseif(key3==0)//設(shè)置值鍵
                        {
                                rekey=1;
                                if(SetFlag==1)//處于設(shè)置1
                                {
                                        if(setR<10)
                                        {setR=setR+1;}
                                }
                                elseif(SetFlag==2)//處于設(shè)置2
                                {
                                        if(setF1<10)
                                        {setF1=setF1+1;}
                                }
                                elseif(SetFlag==3)//處于設(shè)置3
                                {
                                        if(setF2<10)
                                        {setF2=setF2+1;}
                                }
                                else
                                {
                                        startFlag=1;//開始運(yùn)行
                                        timeLater=setR*10;//初始化時(shí)間
                                        step=1;//運(yùn)行步驟

                                        relayF=1;
                                        relayJ=0;

                                }                                                               
                        }
                }
        }
        else
        {
                rekey=0;//防止重復(fù)檢測到按鍵
        }
}

voiddealYunXing(void)
{
        if(startFlag==1)//啟動過程中
        {
                if(timeLater==0)
                {
                        buzzer=0;//報(bào)警
                        DelayMs(100);
                        buzzer=1;
                        if(step==1)
                        {       
                                step=2;//運(yùn)行步驟
                                timeLater=setF1*10;//初始化時(shí)間       
                                        relayF=0;//粉碎
                                        relayJ=1;                                                                                       
                        }
                        elseif(step==2)
                        {       
                                step=3;//運(yùn)行步驟
                                timeLater=setR*10;//初始化時(shí)間
                                relayF=1;//粉碎
                                relayJ=0;//加熱                                                                                                               
                        }
                        elseif(step==3)
                        {       
                                step=4;//運(yùn)行步驟
                                timeLater=setF2*10;//初始化時(shí)間       
                                relayF=0;//粉碎
                                relayJ=1;                                                                                                       
                        }                                       
                        elseif(step==4)
                        {       
                                step=5;//運(yùn)行步驟
                                timeLater=setR*10;//初始化時(shí)間
                                relayF=1;//粉碎
                                relayJ=0;//加熱                                                                                               
                        }
                        elseif(step==5)
                        {       
                                step=0;//運(yùn)行步驟
                                timeLater=0;//初始化時(shí)間       
                                startFlag=0;//開始標(biāo)志清空       
                                relayF=1;//粉碎
                                relayJ=1;//加熱                                                                               
                        }               
                }       
        }
}

voidInit_Timer0(void)
{
        TMOD|=0x01;        //使用模式1,16位定時(shí)器,使用"|"符號可以在使用多個(gè)定時(shí)器時(shí)不受影響               
        TH0=(65536-20000)/256;                //重新賦值20ms
        TL0=(65536-20000)%256;
        EA=1;//總中斷打開
        ET0=1;//定時(shí)器中斷打開
        TR0=1;//定時(shí)器開關(guān)打開
}


voidTimer0_isr(void)interrupt1
{
        TH0=(65536-20000)/256;                //重新賦值20ms
        TL0=(65536-20000)%256;
        time_20ms++;

        time_20ms++;
        if(time_20ms%5==0)
        {
                disFlag=1;
                if(timeLater>0)timeLater--;
                if(time_20ms%50==0)
                {
                        ReadTempFlag=1;                //定時(shí)發(fā)送數(shù)據(jù)
                }
        }
}
回復(fù)

使用道具 舉報(bào)

ID:149799 發(fā)表于 2021-6-12 09:10 | 顯示全部樓層
zhangzihao1111 發(fā)表于 2021-6-11 20:24
sbitkey1=P2^0;        //接口定義
sbitkey2=P2^1;
sbitkey3=P2^2;

詳細(xì)解釋啊,謝謝你。
回復(fù)

使用道具 舉報(bào)

ID:398094 發(fā)表于 2021-6-12 11:06 | 顯示全部樓層
按不同按鍵工作時(shí)間不一樣
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本字幕在线观看 | 久久91av| 少妇久久久久 | 成人免费视频网站在线看 | 男人久久天堂 | 日韩一区二区在线播放 | 精品99久久 | 天堂一区二区三区 | 7777精品伊人久久精品影视 | 日本精品久久 | 日韩2020狼一二三 | 在线观看日韩 | 精品无码久久久久久国产 | 日韩在线播放视频 | 久久亚洲高清 | av免费网址 | 综合久久久久久久 | 久久er99热精品一区二区 | a精品视频| 水蜜桃亚洲一二三四在线 | 亚洲一区三区在线观看 | 人人鲁人人莫人人爱精品 | 日韩在线播放视频 | 精品视频免费在线 | 精品国产一区二区三区av片 | 人人爽人人草 | 中文字幕在线观看av | 黄色片视频网站 | 日本黄色高清视频 | 麻豆a级片| 免费观看色| 福利av在线 | 亚洲日本免费 | 国产日韩亚洲欧美 | 成人免费观看视频 | 国产一二三区电影 | 亚洲欧美日韩在线不卡 | 亚洲精品久久久9婷婷中文字幕 | 亚洲一区二区在线视频 | 污片在线免费观看 | 久久久高清 |