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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新人求助關于單片機暫停鍵的問題

  [復制鏈接]
跳轉到指定樓層
樓主
ID:326331 發表于 2018-5-29 20:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 xiaomanong 于 2018-5-30 21:37 編輯

     我想請教一下大家,我的代碼具體要怎樣修改才能實現下圖的“暫停鍵”的暫停(第一次按下)和繼續播放(第二次按下)功能?我已經嘗試網上的好多種方法了,但是都不行。要不就是按下停止播放但是手一放開就繼續播放了;要不就是能暫停但是退不出來,再按其他鍵也沒反應;要不就是直接又初始化了,都沒能達到暫停/播放的功能。
     表達能力不太好, 文字也比較多,大家辛苦了。謝謝大家
   電子板如下

代碼
   
     if(K2==0){//K2為暫停鍵
     mydelay(50);
    m++;
    if(m==2)
    m=0;}
     if(m%2==0){
    BeepIO=1;
     }
      else
           BeepIO=0;
    // return;
      while(m%2){
      if(K2==0){
      mydelay(50);
      m++;
      BeepIO=1;}
      else
      BeepIO=0;
      }

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

使用道具 舉報

沙發
ID:111634 發表于 2018-5-30 06:49 | 只看該作者
本帖最后由 zl2168 于 2018-5-30 06:53 編輯

我有一個案例,一鍵三用,可用于你參考。不要把冗長程序貼上來,別人吃飽飯不會看的,要緊的是自己下功夫。
實例93  99.9秒秒表

Proteus仿真一下,確認有效。 實例95 99.9秒秒表.rar (38.86 KB, 下載次數: 33)
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,書中電路和程序設計有詳細說明,電路與程序真實可靠可信可行,程序語句條條有注解。
回復

使用道具 舉報

板凳
ID:61765 發表于 2018-5-30 08:40 | 只看該作者
做硬件抖動處理沒
回復

使用道具 舉報

地板
ID:164602 發表于 2018-5-30 09:12 | 只看該作者
程序太長,沒有時間看,但你的問題我明白了:播放音樂時,怎么按鍵暫停和繼續播放。
我做過這事兒,方法是:
第一:搞懂音樂播放函數的每條語句,重點是讀懂哪些語句在讀取音樂數據,數據指針是哪些變量——這是最關鍵的一環,沒有這一步,其它的都不談了。
第二:不能用一般的按鍵操作,要用外部中斷。這樣才能適時打斷原來程序,控制音樂的播放。
第三:在中斷服務函數中,設置狀態變量——判斷按鍵的奇偶,奇次暫停,偶次播放;保存環境——音樂數據讀取到哪里了;設置播放函數的執行條件——如:為1才播放,為0則不播放。
第四:在音樂播放函數中,使用中斷中的設置,控制音樂播放函數的執行或暫停。
回復

使用道具 舉報

5#
ID:341113 發表于 2018-5-30 09:44 | 只看該作者
你看一下我的

秒計數器原理圖.rar

40.91 KB, 下載次數: 45

回復

使用道具 舉報

6#
ID:241128 發表于 2018-5-30 09:47 | 只看該作者
你把這段代碼注釋掉:
if(K2==0){//K2為暫停鍵
     mydelay(50);
    m++;
    if(m==2)
    m=0;}
     if(m%2==0){
    BeepIO=1;
     }
      else
           BeepIO=0;
然后換成下面這個試試:
if(K2==0){ BeepIO^=BeepIO}
回復

使用道具 舉報

7#
ID:326331 發表于 2018-5-30 10:18 來自手機 | 只看該作者
zl2168 發表于 2018-5-30 06:49
我有一個案例,一鍵三用,可用于你參考。不要把冗長程序貼上來,別人吃飽飯不會看的,要緊的是自己下功夫。 ...

好的,謝謝你。
回復

使用道具 舉報

8#
ID:326331 發表于 2018-5-30 15:14 | 只看該作者
fzhlpp 發表于 2018-5-30 09:47
你把這段代碼注釋掉:
if(K2==0){//K2為暫停鍵
     mydelay(50);

還是不行呢。
回復

使用道具 舉報

9#
ID:326331 發表于 2018-5-30 15:17 | 只看該作者
亣靨 發表于 2018-5-30 08:40
做硬件抖動處理沒

做了的。
回復

使用道具 舉報

10#
ID:326331 發表于 2018-5-30 15:18 | 只看該作者
HC6800-ES-V2.0 發表于 2018-5-30 09:12
程序太長,沒有時間看,但你的問題我明白了:播放音樂時,怎么按鍵暫停和繼續播放。
我做過這事兒,方法是 ...

好的,超級感謝。
回復

使用道具 舉報

11#
ID:241128 發表于 2018-5-30 16:28 | 只看該作者
同時也要把下面的那段去掉:
while(m%2){
      if(K2==0){
      mydelay(50);
      m++;
      BeepIO=1;}
      else
      BeepIO=0;
      }
這段跟上段是一樣的,不知道你弄個m變量做什么用。你實際操作的時候是不是有時能暫停有時暫停不了....
回復

使用道具 舉報

12#
ID:241128 發表于 2018-5-31 09:11 | 只看該作者
本帖最后由 fzhlpp 于 2018-5-31 10:18 編輯

if(K2==0)                         //1.按鍵確定按下后執行下面延時
         {
             mydelay(50);         //2.延時結束后執行下面m+1
             m++;                         //3.這條語句執行完后m的值應該為1(一般初始化變量為0,這個值要看樓主初始化的值)
             if(m==2)                 //4.執行到這里時因為m=1,所以不會執行他下面的那條語句
             m=0;                         //5.這里不會被執行
         }
if(m%2==0)                           //6.然后程序執行到這里,因為現在的m=1,1除以2的余數不為0,那么這條語句的條件不成立它里面的語句不被執行
         {
             BeepIO=1;                 //7.這里不會被執行
     }
     else                                   //8.上面的不成立那么就執行這條語句下面的BeepIO=0;
        BeepIO=0;                    //9.程序運行到這里執行這條語句,應該就是樓主的暫停吧
     while(m%2)                         //10.然后程序往下走到這里,因為m%2不為0,所以執行循環里面的語句
         {
              if(K2==0)                // 11.再次判斷按鍵是不是還是按下的
          {
              mydelay(50);         //12.如果按鍵還是按下的那么這條延時就執行了
              m++;                     //13.如果按鍵按下的那么這條語句也執行了,執行完這條語句后m=2
              BeepIO=1;             //14.如果按鍵按下的那么這條語句也執行了,執行完這條語句,播放又啟動了
          }
              else                     //15.上面的按鍵判斷成立下面的就不會執行了
             BeepIO=0;
     }


如果我上面的分析正確的話,不難發現實際操作的時候按下按鍵始終都在播放沒有暫停,當然程序是有暫停執行過,看我第9條注釋 。
         只不過暫停后馬上又播放了,樓主可以把延時函數的時間加長看看就能證實這點。按鍵按住的時間不同暫停和播放的出現概率不同。
         歡迎拍磚...

回復

使用道具 舉報

13#
ID:241128 發表于 2018-5-31 09:20 | 只看該作者
本帖最后由 fzhlpp 于 2018-5-31 10:20 編輯

把你上面的全部刪掉用下面的代換,你可能是在按鍵釋放這塊沒做處理,所以出現隨機執行功能問題。


static char key_state = 0;//這個放在你按鍵掃描函數里開始的地方
if(K2==0)
{
key_state = 1;
BeepIO^=BeepIO;
}
else  key_state = 0;//按鍵釋放
回復

使用道具 舉報

14#
ID:341944 發表于 2018-5-31 09:31 來自手機 | 只看該作者
第一:搞懂音樂播放函數的每條語句,重點是讀懂哪些語句在讀取音樂數據,數據指針是哪些變量——這是最關鍵的一環,沒有這一步,其它的都不談了。 第二:不能用一般的按鍵操作,要用外部中斷。這樣才能適時打斷原來程序,控制音樂的播放。 第三:在中斷服務函數中,設置狀態變量——判斷按鍵的奇偶,奇次暫停,偶次播放;保存環境——音樂數據讀取到哪里了;設置播放函數的執行條件——如:為1才播放,為0則不播放。 第四:在音樂播放函數中,使用中斷中的設置,控制音樂播放函數的執行或暫停。
回復

使用道具 舉報

15#
ID:320754 發表于 2018-5-31 09:33 | 只看該作者
這個感覺還是用中斷處理按鍵比較好,設成上升或下降沿觸發
回復

使用道具 舉報

16#
ID:191910 發表于 2018-5-31 09:35 | 只看該作者
你可以做一個中間變量,當狀態反轉后,再去處理控制管腳
static unsigned char key_state = 0;
if(K2==0)
{
   while(K2==0);
   key_state =!key_state ;
}
if(key_state == 1)
BeepIO = 1;
else
BeepIO = 0;
回復

使用道具 舉報

17#
ID:326331 發表于 2018-6-1 11:13 | 只看該作者
dengyifenzhong 發表于 2018-5-31 09:35
你可以做一個中間變量,當狀態反轉后,再去處理控制管腳
static unsigned char key_state = 0;
if(K2==0) ...

已經解決了,謝謝你。
回復

使用道具 舉報

18#
ID:326331 發表于 2018-6-1 11:14 | 只看該作者
lvyou223 發表于 2018-5-31 09:33
這個感覺還是用中斷處理按鍵比較好,設成上升或下降沿觸發

嗯嗯,已經解決了,謝謝你
回復

使用道具 舉報

19#
ID:326331 發表于 2018-6-1 11:17 | 只看該作者
fzhlpp 發表于 2018-5-31 09:11
if(K2==0)                         //1.按鍵確定按下后執行下面延時
         {
             mydelay(50);         //2.延時結束后執行下面m+1

哇哇,感動,你的講解和分析太細致全面了,謝謝你哦,我已經解決了。嘻嘻嘻,開心。
回復

使用道具 舉報

20#
ID:326331 發表于 2018-6-1 11:20 | 只看該作者
問題已經解決了,開心,超級感謝大家的幫助,感動筆芯
回復

使用道具 舉報

21#
ID:326331 發表于 2018-6-1 11:25 | 只看該作者
fzhlpp 發表于 2018-5-31 09:20
把你上面的全部刪掉用下面的代換,你可能是在按鍵釋放這塊沒做處理,所以出現隨機執行功能問題。

壇友互動那里我還沒有權限回復你的消息,問題已經解決了,超級感謝
回復

使用道具 舉報

22#
ID:269211 發表于 2018-6-3 16:19 | 只看該作者
用定時器就可以了,按1次TR=0,再按1次 TR=1
回復

使用道具 舉報

23#
ID:344079 發表于 2018-6-3 16:51 | 只看該作者
這里有好多大神 相信你的問題能得到解決
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清久久 | 亚洲成av人片在线观看无码 | 亚洲福利一区 | 国产在线一区二区 | h片免费看 | a免费视频 | 国产一区二区三区在线 | 精品av| 亚洲精品高清视频 | 色婷婷久久久久swag精品 | 国产99视频精品免费播放照片 | 亚洲第一中文字幕 | 国产一区二区a | 欧洲一区二区三区 | 成人一区二区三区 | 日韩免费视频一区二区 | 日韩精品一区二区三区中文在线 | 中文日韩字幕 | 日韩在线小视频 | 亚洲精品一区二区三区在线 | 亚洲欧洲一区二区 | 久久久国产一区二区三区四区小说 | 日韩不卡视频在线观看 | 国产一级片一区二区三区 | 欧美xxxx性| 国产精品久久久久一区二区三区 | 精品视频一区在线 | 黄网免费看 | 久久精品在线免费视频 | 亚洲精品二区 | 精品欧美在线观看 | 日韩精品一区二区三区在线观看 | 国产福利网站 | 午夜精品在线观看 | 男女啪啪高潮无遮挡免费动态 | 天堂av资源 | 91精品国产91久久综合桃花 | 国产免费视频 | 欧美高清成人 | 热久久性| 久久成人精品视频 |