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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

各位指點一下,單片機怎么樣實現按鍵功能的程序,時序問題,還是什么?

[復制鏈接]
跳轉到指定樓層
樓主
50黑幣

這是我的原理圖,四個繼電器常開,常閉,IO口控制,第一個按鍵想實現按一下開,按一下關,長按加速,松開保持這個速度不變,在長按減速的功能,第二個按鍵按下反轉,第三個按下停止,我現在開,關,反轉,停止寫出來了,但是長按加速,減速處理不過來,通過pwm  mos管來控制,就有些搞不清楚了,我也寫了代碼,各位大神們指點一下


#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)                          //延時函數
{
   while(i--);
}

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

void  inversion()
{
   u8 i;
   u8 dat;                                                        //定義一個變量         
   if(ke==0)                                                //判斷開關是否按下
   {
         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)                  //判斷 周期跟占空比開關pwm
          pwm=0;
             else pwm=1;
             Count++;
                 
             if(Count>=100)                                        //占空比清空
               {
                   Count =0;
                   flay=~flay;                                   //標志位
                   }
                   if(flay)
                   {
                          while(!ke)                                //判斷按鍵是否真的按下,
                          {
                                 if(num<100)                    //當大于100,
                                 num ++;
                                 delayu(50);
                          }
                   }
                     else                                           //反之則
                     {
                           while(!ke)
                           {
                                  if(num>0)
                                          num--;
                                          delayu(50);
                           }
                     }
                }
                             
   }
         
   if(k2==0)                                                 //按鍵是否按下,消抖
   {
      delay(1000);
        if(k2==0)                                                 //開關繼電器
        {
          J1 = 0;
          J2 = 1;
          J3 = 1;
          J4 = 0;
        }
        while(!k2);
   }                                                                   //按鍵是否觸碰,
   if(k3==0)
   {
         delay(1000);
         if(k3==0)                                                   //繼電器全關
         {
           J1 = 1;
           J2 = 1;
           J3 = 1;
           J4 = 1;
         }
   }
}

void InitIimer0()   //定時函數
{
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++;  //進入中斷,時間加一,占空比加一
        Count++;
        

}

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

使用道具 舉報

沙發
ID:732506 發表于 2020-5-11 05:09 | 只看該作者
控制邏輯不清,至少要顯示上一次按時是加速還是減速,否則按的人也不知道按下后是加速還是減速。另外關和停止有何區別未說明。
回復

使用道具 舉報

板凳
ID:230975 發表于 2020-5-13 11:28 | 只看該作者
電機最好能用電機驅動芯片,驅動。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩久久久久 | 精品久久久久国产免费第一页 | 一区二区高清不卡 | 蜜臀久久99精品久久久久野外 | 欧美一区二区大片 | 一区二区在线 | 影音先锋成人资源 | 黄色高清视频 | 国产欧美精品 | 在线视频一区二区三区 | 放个毛片看看 | 青青久久| 国产小网站 | 日韩中文字幕一区 | 国产十日韩十欧美 | 欧美精品久久久 | 欧美黄色片| 精品国产乱码久久久久久蜜退臀 | 91最新在线视频 | 麻豆精品国产91久久久久久 | 亚洲精品中文字幕av | 日韩一区二区在线播放 | 91精品国产手机 | 欧美va大片 | 国产成人高清在线观看 | 久久久久久国产免费视网址 | 国产成人综合av | 国产精品久久久久久久久 | 国产精品久久 | 嫩草视频在线 | 日韩精品一区中文字幕 | 欧美a在线看 | 亚洲一区 中文字幕 | 久热久热| 国产jizz女人多喷水99 | 精品国产精品 | 91香蕉视频在线观看 | 久草在线中文888 | 亚洲精品久久久久久久久久久 | 国产在线观看一区二区三区 | 成人精品一区二区 |