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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3302|回復: 5
收起左側

單片機STC8G1K08A單鍵依次點亮7種亮燈模式后,第8次循環有時能跳出有時不能跳出循環

[復制鏈接]
ID:957836 發表于 2021-10-24 17:02 | 顯示全部樓層 |閱讀模式
單片機STC8G1K08A
單鍵每按下一次就點亮一種模式,依次點亮7種亮燈模式后,第8次循環點亮前7種模式,但按下按鍵有時能跳出有時不能跳出第8種模式。

#include <stc8.h>
sbit      K=P5^5;         


void  delay (unsigned int i)
        {
                 unsigned int k,m;
                        for(m=0;m<9000;m++);
                                for(k=0;k<i;k++);
        }     


void port_mode()
        {
                P3M1=0X00;P3M0=0X00;P5M1=0X00;P5M0=0X00;
        }
       
void main()
        {   
                unsigned char i=0;        
                                       
                                        port_mode();
                                        P5=0XE0;
                                        P3=0X00;
                                        while(1)
                 {
                                        if(K==0)   
                                        {
                                                                delay(1200);     
                                                                if(K==0)         
                                                                {   
                                                                 while(!K);  
                                                                 delay(1200);
                                                                 if(++i==9)i=1;                                                                                           
                                                                }  
                                        }
                                         switch(i)            
                                        {
                                                         case  1:P3=0x02;break;
                                                         case  2:P3=0x04;break;
                                                         case  3:P3=0x08;break;
                                                         case  4:P3=0x06;break;
                                                         case  5:P3=0x0a;break;
                                                         case  6:P3=0x0c;break;
                                                         case  7:P3=0x0e;break;
                                                         case  8:                    
                                                                     P3=0x02;            
                                                                     delay(50000);                     
                                                                     P3=0x04;  
                                                                     delay(50000);                     
                                                                     P3=0x08;
                                                                     delay(50000);                     
                                                                     P3=0x06;
                                                                     delay(50000);                     
                                                                     P3=0x0a;
                                                                     delay(50000);
                                                                     P3=0x0c;
                                                                     delay(50000);                                                    
                                                                    P3=0x0e;
                                                                    delay(50000);break;
                                                                 
                                                        default:P3=0X00;break;
                                        }
                                                 
                        }   
        }

回復

使用道具 舉報

ID:973695 發表于 2021-10-24 21:58 | 顯示全部樓層
delay(1200);     是用執行空操作的方式來延時,所以很容易出現檢測不到按鍵動作 。要解決的話只能用外部中斷來捕捉按鍵動作。
回復

使用道具 舉報

ID:957836 發表于 2021-10-24 22:03 | 顯示全部樓層
謝謝回復,我再按您給的提示嘗試一下。
回復

使用道具 舉報

ID:213173 發表于 2021-10-24 22:17 | 顯示全部樓層
因為按鍵第8次進入流水燈期間按鍵無效,流水燈結束時按鍵難以及時操作,鍵值 i 沒有改變,所以繼續進入流水燈。要在流水燈結束時鍵值清0。
  1. #include <stc8.h>

  2. sbit      K=P5^5;         
  3.   
  4. void delay(unsigned int k)                //@11.0592MHz
  5. {
  6.         unsigned char i, j;
  7.         while (--k)
  8.         {
  9.                 i = 15;
  10.                 j = 90;
  11.                 do
  12.                 {
  13.                         while (--j);
  14.                 } while (--i);
  15.         }
  16. }

  17. void port_mode()
  18. {
  19.         P3M1=0X00;
  20.         P3M0=0X00;
  21.         P5M1=0X00;
  22.         P5M0=0X00;
  23. }

  24. void main()
  25. {   
  26.         unsigned char i=0;        
  27.         port_mode();
  28.         P5=0XE0;
  29.         P3=0X00;
  30.         while(1)
  31.         {
  32.                 if(K==0)   
  33.                 {
  34.                         delay(20);     
  35.                         if(K==0)         
  36.                         {   
  37.                                 if(++i==9)i=1;
  38.                                 while(!K);
  39.                         }  
  40.                 }
  41.                 switch(i)            
  42.                 {
  43.                         case  1:P3=0x02;break;
  44.                         case  2:P3=0x04;break;
  45.                         case  3:P3=0x08;break;
  46.                         case  4:P3=0x06;break;
  47.                         case  5:P3=0x0a;break;
  48.                         case  6:P3=0x0c;break;
  49.                         case  7:P3=0x0e;break;
  50.                         case  8:                    
  51.                                         P3=0x02;
  52.                                         delay(1000);
  53.                                         P3=0x04;
  54.                                         delay(1000);
  55.                                         P3=0x08;
  56.                                         delay(1000);
  57.                                         P3=0x06;
  58.                                         delay(1000);
  59.                                         P3=0x0a;
  60.                                         delay(1000);
  61.                                         P3=0x0c;
  62.                                         delay(1000);
  63.                                         P3=0x0e;
  64.                                         delay(1000);
  65.                                         i=0;break;
  66.                         default:P3=0X00;break;
  67.                 }
  68.         }   
  69. }
復制代碼



回復

使用道具 舉報

ID:123289 發表于 2021-10-25 16:44 | 顯示全部樓層
可能的原因:
1、按鍵防彈動未做洽當。
2、延時程序占用CPU時間。(在此時間里你按鍵了,但程序死在延時當中,還未出來呢)
解決建議:
1、按鍵用中斷方式識別。
2、延時用定時器做(設立一個延時標記,在定時器中看到標記就對其它計時,到時后清除它或設置一個你希望的東東,供你延時判斷用)。
3、主程序延時處理時,只判斷看延時標記,有則執行你想做的事,無則立即退出。這樣既辦了事,又不耽誤時間。
回復

使用道具 舉報

ID:959346 發表于 2021-10-25 17:46 | 顯示全部樓層
在執行CASE 8部分,有很長的延時,沒有辦法檢測到按鍵。一直到這部分執行完,再次跑到按鍵檢測,才能檢測按鍵,只有在這時檢測到按鍵了,才能退出。所以1一直按著不放,等到按鍵檢測那;2在剛退出case 8操作時,按鍵按下,剛好可以檢測到,而由于這個檢測時間比case 8操作的時間小很多,所以有時靈有時不靈
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九色 在线 | 成年人免费在线视频 | 免费性视频 | 午夜av一区二区 | 中文字幕视频在线观看 | 99精品一级欧美片免费播放 | 久久性色 | 国产激情一区二区三区 | 亚洲精品一区中文字幕乱码 | 亚洲黄色av网站 | 91成人免费电影 | 亚洲成人日韩 | 99热欧美 | 日韩欧美在线免费观看 | 请别相信他免费喜剧电影在线观看 | 三级视频久久 | 亚洲精品美女在线观看 | 丝袜一区二区三区 | 欧美激情综合色综合啪啪五月 | 在线不卡一区 | 精品视频一区在线 | 日韩在线中文字幕 | 日本三级线观看 视频 | 中文字幕在线视频观看 | 国产欧美日韩综合精品一区二区 | 国产成人亚洲精品自产在线 | 久久久美女 | 日韩在线小视频 | 亚洲一区二区在线视频 | 天天干.com| 日本在线免费看最新的电影 | 99福利视频 | 在线观看亚 | 欧美精品一区三区 | av天天看| 国产精品亚洲综合 | 国产精品毛片一区二区在线看 | 91一区二区三区在线观看 | 男人天堂社区 | 国产九九av | 国产福利资源在线 |