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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

                else{停();}
        }
}
回復

使用道具 舉報

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

無線數傳模塊,大神可知道應該怎么寫這個程序嗎?
回復

使用道具 舉報

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

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

使用道具 舉報

7#
ID:601478 發表于 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;}
  }
}
框架大概這樣吧,把掃描放中斷里,消抖效果根據自己的手感改時間就行,可以改一改看能不能用,我也是新手,不能保證好用
回復

使用道具 舉報

8#
ID:462827 發表于 2020-2-25 01:01 | 只看該作者
用狀態機的機制就行了,按鍵改變狀態值,由主執行結構(循環或定時器中斷)來動作。
回復

使用道具 舉報

9#
ID:701320 發表于 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;}        //如果有其它按鍵按下響應其它按鍵
                   }
             }
             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;
              }
        }
}
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲天堂999 | 亚洲高清视频一区二区 | 国产午夜精品久久久久免费视高清 | 日韩精品一区在线观看 | 在线不卡视频 | 亚洲国产一区在线 | 一级黄色录像片子 | 91在线免费观看网站 | 一区二区三区亚洲 | 久久久久久久久久久蜜桃 | 国产一在线观看 | 九九精品网 | 蜜桃黄网| 日韩在线免费播放 | 精品视频一区二区三区 | 99pao成人国产永久免费视频 | 欧美一区二区三区四区五区无卡码 | 国产91视频一区二区 | 色婷婷综合久久久中字幕精品久久 | 国产激情小视频 | 色综合久久天天综合网 | 99精品电影| 夜夜骑首页 | 日韩精品在线网站 | 偷拍自拍在线观看 | 欧美精品一二三 | 久久精品视频免费看 | 精品无码久久久久国产 | 日韩免费福利视频 | 黄色成人国产 | 91看片网 | 亚洲欧美日韩精品久久亚洲区 | 超碰av免费| 国产精品久久久久一区二区 | 欧美日韩亚洲系列 | 精品久 | 国产一区二区三区在线观看免费 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 国产精品免费观看 | 欧美日韩国产一区二区 | 欧美日韩不卡 |