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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機程序 卡在K2按鍵可以進行模式加一這一步和K3的模式減一這一步

查看數: 2364 | 評論數: 12 | 收藏 1
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2023-10-29 08:42

正文摘要:

我的問題就卡在K2按鍵可以進行模式加一這一步和K3的模式減一這一步,我不知道到這里我應該如何將我之前編好的那八個模式導進去,因為我把它們都封裝成函數,請大佬們給點提示,孩子真的寫不出來了。沒有任何思路 ...

回復

ID:332444 發表于 2023-11-8 10:41
今天遇到一個有趣的32燈流水及按鍵復用,題主電路。

我的電路。


ID:1096616 發表于 2023-11-4 09:11
changhz 發表于 2023-10-29 20:11
程序修改可以了,不過效率太低了,要用定時器才行。
#include
#define uchar unsigned  char

很不錯的想法,給我一種新思路了
ID:1096616 發表于 2023-11-4 09:10

嗯嗯,明白了
ID:1096616 發表于 2023-11-4 09:10
wulin 發表于 2023-10-30 09:11
這就是一個花樣流水燈的程序,給你改好了。

太厲害了,就是要這種效果,原來還可以這樣子實現
ID:213173 發表于 2023-10-31 16:33
殿堂之上 發表于 2023-10-31 12:20
1、主循環中的j是啥作用
2、按鍵中count為啥取10,是掃描10次消抖
3、沒用中斷,主循環時間長會丟鍵嗎
...

沒有用定時器,在主循環中用delayms(1);使主循環周期大約1ms,按鍵掃描10次消抖,j計數250ms,控制流水燈移動速度。
ID:1095802 發表于 2023-10-31 12:20
wulin 發表于 2023-10-30 09:11
這就是一個花樣流水燈的程序,給你改好了。

1、主循環中的j是啥作用
2、按鍵中count為啥取10,是掃描10次消抖
3、沒用中斷,主循環時間長會丟鍵嗎
能說明下嗎,沒看明白,有點像用狀態機原理
ID:213173 發表于 2023-10-30 09:11
深層次 發表于 2023-10-29 17:57
那我應該怎么去寫比較好呢?這個的K2和K3思路是什么?

這就是一個花樣流水燈的程序,給你改好了。
  1. #include <reg52.h>
  2. #define uchar unsigned  char
  3. #define uint unsigned int
  4. sbit key0=P0^0;
  5. sbit key1=P0^1;
  6. sbit key2=P0^2;
  7. sbit key3=P0^3;
  8. uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED從低位往高位移
  9. uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED從高位往低位移
  10. uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED從1個亮到8個都點亮(從低位往高位)
  11. uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED從1個亮到8個都點亮(從高位往低位)
  12. uchar code table4[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//LED從8個全亮到一個都不亮(從低位往高位)
  13. uchar code table5[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//LED從8個全亮到一個都不亮(從高位往低位)
  14. uchar code table6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};//LED從低位往高位移(最低位始終為0)
  15. uchar code table7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};//LED從高位往低位移(最高位始終為0)

  16. uchar keyflag=0;//按鍵標志位

  17. void keyscan();//按鍵檢測函數
  18. void delayms(uint xms);


  19. void main()
  20. {
  21.         uchar i,j;

  22.         while(1)
  23.         {
  24.                 keyscan();
  25.                 if(++j>=250)
  26.                 {
  27.                         j=0;
  28.                         switch(keyflag)
  29.                         {
  30.                                 case 0:P1=0xff; break;
  31.                                 case 1:P1=0x00; break;
  32.                                 case 2:P1=table0[i]; break;
  33.                                 case 3:P1=table1[i]; break;
  34.                                 case 4:P1=table2[i]; break;
  35.                                 case 5:P1=table3[i]; break;
  36.                                 case 6:P1=table4[i]; break;
  37.                                 case 7:P1=table5[i]; break;
  38.                                 case 8:P1=table6[i]; break;
  39.                                 case 9:P1=table7[i]; break;
  40.                         }
  41.                         i=++i%8;
  42.                 }
  43.                 delayms(1);
  44.         }  
  45. }

  46. void delayms(uint xms)
  47. {
  48.         uint i,j;
  49.         for(i=0;i<xms;i++)
  50.                 for(j=0;j<120;j++);
  51. }
  52. void keyscan()
  53. {
  54.         static uchar count=0;
  55.         static bit sign=0;
  56.         uchar temp;
  57.         temp=P0&0x0f;
  58.         if(temp!=0x0f)//檢測有按鍵按下
  59.         {
  60.                 if(++count==10 && temp!=0x0f && !sign)
  61.                 {
  62.                         sign=1;//自鎖
  63.                         switch(temp)
  64.                         {
  65.                                 case 0x0e: keyflag=1; break;
  66.                                 case 0x0d: if(keyflag<9)keyflag++; break;
  67.                                 case 0x0b: if(keyflag>1)keyflag--; break;
  68.                                 case 0x07: keyflag=0; break;
  69.                         }
  70.                 }
  71.         }
  72.         else//松手
  73.         {
  74.                 count=0;
  75.                 sign=0;
  76.         }
  77. }
復制代碼

ID:161164 發表于 2023-10-29 21:15
深層次 發表于 2023-10-29 17:57
那我應該怎么去寫比較好呢?這個的K2和K3思路是什么?

給你一個例子
  1. void disp1()                        //狀態1 低位到高位依次亮
  2. {
  3.         static uchar i = 0;
  4.         static uint delay = 500;
  5.         if(delay++>=500)
  6.         {
  7.                 delay = 0;
  8.                 P1=table0[i];
  9.                 i++;
  10.                 if(i>=8)i=0;
  11.         }
  12.         delayms(1);
  13. }
復制代碼
ID:180919 發表于 2023-10-29 20:11
程序修改可以了,不過效率太低了,要用定時器才行。
#include <reg52.h>
#define uchar unsigned  char
#define uint unsigned int
sbit key0=P0^0;
sbit key1=P0^1;
sbit key2=P0^2;
sbit key3=P0^3;
uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED從低位往高位移
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED從高位往低位移
uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED從1個亮到8個都點亮(從低位往高位)
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED從1個亮到8個都點亮(從高位往低位)
uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//LED從8個全亮到一個都不亮(從低位往高位)
uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//LED從8個全亮到一個都不亮(從高位往低位)
uchar code table6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};//LED從低位往高位移(最低位始終為0)
uchar code table7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};//LED從高位往低位移(最高位始終為0)
uchar keyflag=0;//按鍵標志位
void keyscan();//按鍵檢測函數
uchar i,j,a;
void delayms(uint xms);


void disp0()  //狀態0 全亮
{   
        P1=0x00;
    delayms(500);   
}


void disp1()                        //狀態1 低位到高位依次亮
{   
         P1=0xff;
     for(i=0;i<8;i++)
     {
         P1=table0[i];
         delayms(500);
     }
                     
}

void disp2() //狀態2  LED從高位到低位依次亮
{  
        P1=0xff;
    for(i=0;i<8;i++)
   {        
           P1=table1[i];
       delayms(500);
   }           
}

void disp3()  // 狀態3 LED閃爍3次
{   
        for(i=0;i<3;i++)
     {        
                 P1=0X00;
         delayms(500);
         P1=0xff;
         delayms(500);
      }           
}

void disp4()                        //狀態4 LED自上而下逐漸點亮
{
     for(i=0;i<8;i++)
        {
            P1=table3[ i];
            delayms(100);
        }
        P1=0xff;
}

void disp5()                        //狀態5 從LED全部亮到全不亮
{
        for(i=0;i<9;i++)
        {
                P1=table5[ i];
                delayms(100);
        }
        delayms(300);
}

void disp6()                        //狀態6 逐步逆時針點亮P1的LED,熄滅
{
   P1=0xff;
        for(j=0;j<2;j++)
        {
          for(i=0;i<8;i++)
          {               
               P1=table2[ i];
              delayms(100);
          }
             P1=0xff;               
        }
}

void disp7()   //狀態7 全滅
{   P1=0XFF;
    delayms(500);
}


void main()
{
   while(1)
  {  
       
    keyscan();
      switch(keyflag)
      {
                  case 1:disp0();break;
                  case 2:disp1();break;
                  case 3:disp2();break;
                  case 4:disp3();break;
                  case 5:disp4();break;
                  case 6:disp5();break;
                  case 7:disp6();break;
                  case 8:disp7();break;
      }
  }
   
}
void delayms(uint xms)
{ uint i,j;
   for(i=0;i<xms;i++)
     for(j=0;j<120;j++);
}


void keyscan()
{

  if((P0&0x0f)!=0x0f)//檢測有按鍵按下
   {
            delayms(10);//延時去抖
          
                if(key0==0)//key0按鍵按下
                keyflag=1;
               
                if(key1==0 && keyflag<7)//key1按鍵按下
                keyflag++;//設標志位2
               
                if(key2==0 && keyflag>2)//key2按鍵按下
                keyflag--;//設標志位3
               
                if(key3==0)//key3按鍵按下
                keyflag=8;//設標志位4
                       
                while(!key0);
                while(!key1);
                while(!key2);
                while(!key3);
  }
}

ID:275826 發表于 2023-10-29 19:35
深層次 發表于 2023-10-29 17:57
那我應該怎么去寫比較好呢?這個的K2和K3思路是什么?

用定時器延時
ID:1096616 發表于 2023-10-29 17:57
tyrl800 發表于 2023-10-29 17:28
你這個程序基本沒用,都死在子函數里了

那我應該怎么去寫比較好呢?這個的K2和K3思路是什么?
ID:275826 發表于 2023-10-29 17:28
你這個程序基本沒用,都死在子函數里了

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧洲一级视频 | 亚洲人人舔人人 | 国产精品一区二区三区四区五区 | 91视视频在线观看入口直接观看 | 色久五月| 久久久久免费精品国产小说色大师 | 日韩欧美国产一区二区 | 亚洲视频欧美视频 | 亚洲一区精品在线 | 亚洲精品免费观看 | 99久久久久| 99久久中文字幕三级久久日本 | 欧美日韩国产一区二区三区 | 日韩视频在线一区 | 日本成人免费网站 | 久久国产精品精品国产色婷婷 | 91精品国产91久久久久久三级 | 免费视频成人国产精品网站 | 久久久国产精品一区 | 久久99网站| 精品久久久久久久久久久久久久久久久 | 精品九九九| 特黄毛片 | 国产高清在线 | 国产欧美一区二区三区久久人妖 | 成人欧美日韩一区二区三区 | 欧美日韩国产综合在线 | 欧美中文字幕一区 | 亚洲永久字幕 | 日韩欧美三级在线 | 免费视频一区二区 | 盗摄精品av一区二区三区 | 亚洲 欧美 综合 | 久久久久久久久久久久久九 | 最新超碰| 色婷婷综合成人av | 免费久久精品视频 | 欧美久久不卡 | 国产精品a久久久久 | 天堂网avav | 色呦呦在线 |