欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1836|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

求大神幫忙提供一個51單片機(jī)的按鍵的程序設(shè)計思路(新手)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:655120 發(fā)表于 2020-2-23 11:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
想用51單片機(jī)寫一個按鍵程序,當(dāng)按鍵按下去時(長時間按住)執(zhí)行一個函數(shù),當(dāng)按鍵松開時執(zhí)行另一個函數(shù)。PS:要有實時性,因為一共有八個按鍵(要用51單片機(jī)做一個小車的遙控器,想用按鍵實現(xiàn):當(dāng)按鍵按住是小車一直走,當(dāng)按鍵松開時小車停止。)拜托各位大神了,實在是寫不出來了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:648281 發(fā)表于 2020-2-23 13:03 | 只看該作者
你好!
你說的個功能可以實現(xiàn),小車應(yīng)該是無線的吧,用的什么無線模塊
回復(fù)

使用道具 舉報

板凳
ID:609989 發(fā)表于 2020-2-23 13:34 | 只看該作者
//可以參照下,因為沒有上班沒給你調(diào)試,你自己調(diào)試下。
void key()
{
        sbit key1   =  P2^0;//按鍵1
        sbit key2   =  P2^1;
        .....                                //幾個按鍵只要IO夠就行
        sbit status =  P1^0;//狀態(tài)指示
        bit flag;
        int f;
        while(1)
        {
                f=1;
                switch (f)
                {
                        case 1:
                        {       
                                if(key1==0&&key2)                //你需要的功能可以繼續(xù)往下寫
                                        {
                                                delayms(20);                //防抖
                                                if(key1==0&&key2)
                                                {
                                                        z=2;
                                                }
                                        }
                                if(key2==0&&key1)               
                                        {
                                                delayms(20);
                                                if(key2==0&&key1)
                                                {
                                                        z=3;
                                                }
                                        }
                        }break;       
                        case 2:
                        {
                                delayms(500);
                                status=0;                //打開
                                delayms(500);
                                z=1;                        //返回第一步繼續(xù)等待
                        }break;
                        case 3:
                        {
                                delayms(500);
                                status=1;                //關(guān)閉
                                delayms(500);       
                                z=1;                     //同理返回第一步繼續(xù)等待
                        }break;
                }
        }
}
回復(fù)

使用道具 舉報

地板
ID:94031 發(fā)表于 2020-2-23 13:47 | 只看該作者
void main()
{
  
        while(1)
        {

                讀鍵() ;//讀鍵
                if(鍵值==前進(jìn)){前進(jìn)();}
                if(鍵值==后退){后退();}
                。
                。
                。

                else{停();}
        }
}
回復(fù)

使用道具 舉報

5#
ID:655120 發(fā)表于 2020-2-24 07:36 | 只看該作者
51hei**1140 發(fā)表于 2020-2-23 13:03
你好!
你說的個功能可以實現(xiàn),小車應(yīng)該是無線的吧,用的什么無線模塊

無線數(shù)傳模塊,大神可知道應(yīng)該怎么寫這個程序嗎?
回復(fù)

使用道具 舉報

6#
ID:655120 發(fā)表于 2020-2-24 09:17 | 只看該作者
baiyun1234 發(fā)表于 2020-2-23 13:34
//可以參照下,因為沒有上班沒給你調(diào)試,你自己調(diào)試下。
void key()
{

謝謝大神,還請大神講講這個程序,沒太看懂(新手小白)我想實現(xiàn)的功能是一個按鍵按下去執(zhí)行小車前進(jìn)這個函數(shù),松開時執(zhí)行小車停止這個函數(shù),而且按鍵比較多,因為這個按鍵控制小車所以想實時性好一點(不知道是不是要用中斷,還有就是程序的邏輯沒想出來),再次謝謝大神了!
回復(fù)

使用道具 舉報

7#
ID:601478 發(fā)表于 2020-2-24 10:26 | 只看該作者
void key_scan()
{
  static uchar a;
  if( key1 == 0)  {a++;}
  else if(key2 == 0) {a++;}
  else {a = 0;}
  if(xx<a)
  {
   if(key1 == 0) {key =1;}
   else if(key2 == 0) {key =2;}
   else {key = 0;}
  }
}
框架大概這樣吧,把掃描放中斷里,消抖效果根據(jù)自己的手感改時間就行,可以改一改看能不能用,我也是新手,不能保證好用
回復(fù)

使用道具 舉報

8#
ID:462827 發(fā)表于 2020-2-25 01:01 | 只看該作者
用狀態(tài)機(jī)的機(jī)制就行了,按鍵改變狀態(tài)值,由主執(zhí)行結(jié)構(gòu)(循環(huán)或定時器中斷)來動作。
回復(fù)

使用道具 舉報

9#
ID:701320 發(fā)表于 2020-3-2 18:57 | 只看該作者
這個是按鍵控制流水燈程序,可以看看框架。希望對你有幫助。
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit key1 =P3^0; //按鍵1
sbit key2 =P3^1; //按鍵2
sbit key3 =P3^2; //按鍵3
uchar flag1=0,flag2=0,flag3=0;
void delay_ms(uint z)
{
     uint i,j;
     for(i=0;i<z;i++)
     for(j=0;j<110;j++);
}
void O_to_E() //1,3,5,7與2,4,6,8交替閃爍
{
     P2=0Xaa;
     delay_ms(200);
     P2=~0Xaa;
     delay_ms(200);
}
void key_scan()    //鍵盤掃描
{
     if(!key1)
     {
          delay_ms(10); //延時消抖
          if(!key1)
          flag1=1;
     }
     if(!key2)
     {
          delay_ms(10); //延時消抖
          if(!key2)
           flag2=1;
         }
     if(!key3)
     {
          delay_ms(10); //延時消抖
          if(!key3)
           flag3=1;
     }
}
void main()
{
     uchar i;
     while(1)
     {
            key_scan();
            if(flag1)                               //按鍵一按下?               
            {
                   for(i=0;i<8;i++)            //從左至右亮,每次一盞            
                   {
                            P2=~(0x80>>i);
                            delay_ms(100);
                            key_scan();                 //按鍵掃描   
                            if(flag2||flag3){flag1=0;break;}        //如果有其它按鍵按下響應(yīng)其它按鍵
                   }
             }
             if(flag2)                                //按鍵一按下?                  
             {
                    for(i=0;i<8;i++)             //從右至左亮,每次一盞  
                   {
                            P2=~(0x01<<i);
                            delay_ms(100);
                            key_scan();
                            if(flag1||flag3){flag2=0;break;}
                   }
             }
              if(flag3)
             {
                   O_to_E();                             //奇偶交替閃爍
                   key_scan();
                   if(flag1||flag2)flag3=0;
              }
        }
}
回復(fù)

使用道具 舉報

10#
ID:701321 發(fā)表于 2020-3-2 19:33 | 只看該作者
八個按鍵的c程序最好有程序說明
回復(fù)

使用道具 舉報

11#
ID:701539 發(fā)表于 2020-3-3 09:51 | 只看該作者
區(qū)別不大,pwm是一種調(diào)制方式而已,被控制的系統(tǒng)接受什么樣的pwm會有什么反應(yīng)是由被控制的系統(tǒng)決定的,我們只要看懂手冊輸出對應(yīng)的pwm波就行
回復(fù)

使用道具 舉報

12#
無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表