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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

自學(xué)51單片機(jī) 按鍵能控制pwm調(diào)速了,那么如何用按鍵多個(gè)功能呢,求指點(diǎn),附代碼

[復(fù)制鏈接]
ID:730961 發(fā)表于 2020-5-9 17:34 | 顯示全部樓層 |閱讀模式
1589016293.png


這是我的原理圖,四個(gè)繼電器常開(kāi),常閉,IO口控制,第一個(gè)按鍵想實(shí)現(xiàn)按一下開(kāi),按一下關(guān),長(zhǎng)按加速,松開(kāi)保持這個(gè)速度不變,在長(zhǎng)按減速的功能,第二個(gè)按鍵按下反轉(zhuǎn),第三個(gè)按下停止,我現(xiàn)在開(kāi),關(guān),反轉(zhuǎn),停止寫出來(lái)了,但是長(zhǎng)按加速,減速處理不過(guò)來(lái),通過(guò)pwm  mos管來(lái)控制,就有些搞不清楚了,我也寫了代碼,各位大神們指點(diǎn)一下


#include <reg51.h>

typedef unsigned char u8;
typedef unsigned int  u16;
unsigned char Count,num;                //全局變量

sbit ke = P1^0;                                   //定義管腳
sbit k2 = P1^1;
sbit k3 = P1^2;
sbit J1 = P0^0;
sbit J2 = P0^1;
sbit J3 = P0^2;
sbit J4 = P0^3;
sbit pwm= P0^4;
bit flay;

void delay(u16 i)                          //延時(shí)函數(shù)
{
   while(i--);
}

void delayu (u16 x)         //精確延時(shí)函數(shù)
{
   u16 i,j;
   for(i=x;i>0;i--)
    for(j=120;j>0;j--);
}

void  inversion()
{
   u8 i;
   u8 dat;                                                        //定義一個(gè)變量         
   if(ke==0)                                                //判斷開(kāi)關(guān)是否按下
   {
         delay(1000);                                        //消抖
         if(ke==0)                                                //再次判斷按鍵是否按下
         {
                i++;
                dat=1;                                                //按鍵按下 變量就加一次
                if(i>=2)                                   //判斷變量是否大于或者等于2
                {
                i=0;
                }                                           //變量等于0
         while(!ke);                                   //按鍵松
     }
    switch(i)                                          //掃描
        {
         
          case 0:J1=1;J2=1;J3=1;J4=1;break;   //第一此掃描
          case 1:J1=1;J2=0;J3=0;J4=1;break;   //第二次掃描
         }
                if(ke==0)                                                 //判斷按鍵是否按下
                {
                if(num>Count)                  //判斷 周期跟占空比開(kāi)關(guān)pwm
          pwm=0;
             else pwm=1;
             Count++;
                 
             if(Count>=100)                                        //占空比清空
               {
                   Count =0;
                   flay=~flay;                                   //標(biāo)志位
                   }
                   if(flay)
                   {
                          while(!ke)                                //判斷按鍵是否真的按下,
                          {
                                 if(num<100)                    //當(dāng)大于100,
                                 num ++;
                                 delayu(50);
                          }
                   }
                     else                                           //反之則
                     {
                           while(!ke)
                           {
                                  if(num>0)
                                          num--;
                                          delayu(50);
                           }
                     }
                }
                             
   }
         
   if(k2==0)                                                 //按鍵是否按下,消抖
   {
      delay(1000);
        if(k2==0)                                                 //開(kāi)關(guān)繼電器
        {
          J1 = 0;
          J2 = 1;
          J3 = 1;
          J4 = 0;
        }
        while(!k2);
   }                                                                   //按鍵是否觸碰,
   if(k3==0)
   {
         delay(1000);
         if(k3==0)                                                   //繼電器全關(guān)
         {
           J1 = 1;
           J2 = 1;
           J3 = 1;
           J4 = 1;
         }
   }
}

void InitIimer0()   //定時(shí)函數(shù)
{
TMOD =0X02;  //8位重裝模式
TH0  =163;   //初始值  加90的溢出值
TL0  =163;
EA =  1;
ET0 = 1;
TR0 = 1;
}
        
void main()
{
    J1 = 1;                                  //繼電器初始閉合
        J2 = 1;
        J3 = 1;
        J4 = 1;
    Count=0;
        num=0;
    flay=0;
        InitIimer0();
        while(1)
        {
         inversion();
        }
        
}


void Timer0Interrupt() interrupt 1
{
   TH0 =163;
   TL0 =163;
    num++;  //進(jìn)入中斷,時(shí)間加一,占空比加一
        Count++;
        

}

回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2020-5-9 19:08 | 顯示全部樓層
不用那么多繼電器,一套驅(qū)動(dòng)電路加多個(gè)按鍵就能實(shí)現(xiàn)。
回復(fù)

使用道具 舉報(bào)

ID:730961 發(fā)表于 2020-5-10 16:14 | 顯示全部樓層
xuyaqi 發(fā)表于 2020-5-9 19:08
不用那么多繼電器,一套驅(qū)動(dòng)電路加多個(gè)按鍵就能實(shí)現(xiàn)。

你的意思是用一套298驅(qū)動(dòng)電路來(lái)控制,不需要繼電器嘛?
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2020-5-10 17:03 | 顯示全部樓層
小白學(xué)51i 發(fā)表于 2020-5-10 16:14
你的意思是用一套298驅(qū)動(dòng)電路來(lái)控制,不需要繼電器嘛?

如果是小直流電機(jī),是這個(gè)意思。
回復(fù)

使用道具 舉報(bào)

ID:748499 發(fā)表于 2020-5-10 17:52 來(lái)自手機(jī) | 顯示全部樓層
這個(gè)加速,減速的也比較簡(jiǎn)單,,我曾經(jīng)也寫過(guò)一個(gè),不過(guò)不是長(zhǎng)按,是按一下加速,,按一下減速。pwm波占空比改變了,你這樣整體簡(jiǎn)單的加減是不對(duì)的。我記不清怎么寫的了,你好像還要設(shè)置一個(gè)變量當(dāng)減(或者減)之后要就和count一樣清零,,否則循環(huán)幾次之后的周期也會(huì)改變。
回復(fù)

使用道具 舉報(bào)

ID:730961 發(fā)表于 2020-5-10 21:30 | 顯示全部樓層
天下歸晉 發(fā)表于 2020-5-10 17:52
這個(gè)加速,減速的也比較簡(jiǎn)單,,我曾經(jīng)也寫過(guò)一個(gè),不過(guò)不是長(zhǎng)按,是按一下加速,,按一下減速。pwm波占空 ...

那就和我的定義沖突了,我短按就是開(kāi)關(guān)功能,長(zhǎng)按是加減,還要保持不變
回復(fù)

使用道具 舉報(bào)

ID:730961 發(fā)表于 2020-5-10 21:31 | 顯示全部樓層
xuyaqi 發(fā)表于 2020-5-10 17:03
如果是小直流電機(jī),是這個(gè)意思。

好的,感謝,主要我想學(xué)習(xí)一些怎么實(shí)現(xiàn)長(zhǎng)短按鍵pwm調(diào)速,程序的思路
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品一区二区三区 | 亚洲欧美一区二区三区国产精品 | 99免费视频 | 亚洲国产一区二区三区在线观看 | 每日更新av | 在线视频一区二区三区 | 国产一区二区a | 久久一级免费视频 | 欧美精品一区二区三区在线播放 | 日韩毛片免费看 | 欧美激情综合色综合啪啪五月 | 国产91在线播放精品91 | 国产资源视频 | 国产美女一区二区 | 久久久性色精品国产免费观看 | 国产精品久久久久久网站 | 午夜合集 | 欧美日韩成人影院 | 91免费福利在线 | 在线免费观看成人 | 欧美极品一区二区 | 欧美日韩福利 | 日批av| 国产精品福利网站 | 亚洲精品一区二区 | 亚洲成人99 | 国产精品视频免费观看 | 黄色骚片 | 久久91 | 成人在线小视频 | 欧美日韩看片 | 久久69精品久久久久久久电影好 | 999国产精品视频 | 欧美日韩一区二区三区在线观看 | 亚洲区一区二区 | 中文字幕亚洲一区二区三区 | 美国黄色毛片 | 福利一区二区在线 | 污视频免费在线观看 | 波多野结衣精品 | 亚洲欧美激情视频 |