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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)一通電就執(zhí)行第一個(gè)顯示,然后通過長(zhǎng)按進(jìn)行兩個(gè)模式切...換

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:858009 發(fā)表于 2022-1-5 10:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 qwettyuio 于 2022-1-11 11:31 編輯

#define key_S 20
#define key_L key_S*50
uchar fen;
uint  count;
bit a=0;
sbit key3 = P1^3;
sbit led0 = P1^0;
sbit led1 = P1^7;
sbit led2 = P1^6;

void delay(unsigned int t)//延時(shí)時(shí)間 = t*9+16 us
{
        while(t--);
}
void Scan_key()
{
        if(!key3)
        {
                count++;
            if(count==key_L)
                {
                        a=~a;
                       //怎么使這代碼一開機(jī)就顯示,然后通過長(zhǎng)按切換這兩個(gè)程序
                        if(a)
                        {
                                Write_1621(29,0x20,4);
                        }
                        else
                        {
                                Write_1621(29,0x40,4);
                        }
                }
                if(count>key_L)
                        count=key_L+1;
         }
        else
        {
                if(count>key_S && count<key_L)
                {
                        if(++fen==4)
                                fen=0;
                }
                count=0;
                switch(fen)
         {
                 case 0:Write_1621(8,0x01,4);led0=1;led1=1;led2=1;break;
                 case 1:Write_1621(8,0x80,4);led0=0;led1=1;led2=1;break;
                 case 2:Write_1621(8,0x40,4);led0=1;led1=0;led2=1;break;
                 case 3:Write_1621(8,0x20,4);led0=1;led1=1;led2=0;break;
                 default:break;
         }
        }
    delay(110);
}void main( )
{
        Init_1621();       //初始化
        Port1Cfg(1,0);   
        Port1Cfg(1,3);   
        Port1Cfg(1,6);   
        Port1Cfg(1,7);   
        while(1)
        {
                Guding_Init();
                Scan_key();
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2022-1-5 16:07 | 只看該作者
如果長(zhǎng)按是控制4個(gè)LED同時(shí)開關(guān)
可試試以下代碼:
  1. #include <REG51.H>
  2. #define uint unsigned int //宏定義數(shù)據(jù)類型uint
  3. #define uchar unsigned char //宏定義數(shù)據(jù)類型uchar
  4. #define key_S 1000 //宏定義短按(約20ms)
  5. #define key_L key_S*100 //宏定義長(zhǎng)按(約1s)

  6. sbit key = P3 ^ 0;
  7. sbit led0 = P1 ^ 0;
  8. sbit led1 = P1 ^ 1;
  9. sbit led2 = P1 ^ 2;

  10. int buff;//<<<<<<<<<<<<<<<<<<<不要用 b

  11. void delay_ms(unsigned int t) //延時(shí)函數(shù)
  12. {
  13.     while(t--);
  14. }
  15. void main()
  16. {
  17.     while(1)
  18.     {
  19.         static uint count = 0; //計(jì)數(shù)變量
  20.         if(!key)
  21.         {
  22.             if(count < key_L)count++; //防止count溢出
  23.         }
  24.         else //按鍵抬起
  25.         {
  26.             if(count > key_S && count < key_L) //短按
  27.             {
  28.                 if(++buff == 4)
  29.                     buff = 0; //count清0
  30.                 switch(buff)//<<<<<<<<<<<<<<<<<<<把Switch放進(jìn)短按判斷
  31.                 {
  32.                 case 0:led0 = 1;led1 = 1;led2 = 1;break;
  33.                 case 1:led0 = 0;led1 = 1;led2 = 1;break;
  34.                 case 2:led0 = 1;led1 = 0;led2 = 1;break;
  35.                 case 3:led0 = 1;led1 = 1;led2 = 0;break;
  36.                 default:break;
  37.                 }
  38.             }
  39.             if(count >= key_L) //長(zhǎng)按//<<<<<<<<<<<<<<<<<<<長(zhǎng)按判斷放進(jìn)松開里
  40.             {
  41.                 if(P1 & 0x0F)
  42.                 {
  43.                     P1 = 0;
  44.                 } else {
  45.                     P1 = 0x0F;
  46.                     buff = 0;
  47.                 }
  48.             }
  49.             count = 0;
  50.             delay_ms(1200);
  51.         }
  52.     }
  53. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:301191 發(fā)表于 2022-1-5 19:13 | 只看該作者
頂一下
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2022-1-5 21:34 | 只看該作者
#define key_S 1000                                 //宏定義短按(約20ms)
#define key_L key_S*100                             //宏定義長(zhǎng)按(約1s)
你這個(gè)程序長(zhǎng)短按宏定義的時(shí)間是以主循環(huán)周期確定的,不可以照抄。延時(shí)函數(shù)也不是隨便寫的,需要計(jì)算確定。給你改了,你試試。
  1. #include <REG51.H>
  2. #define uint unsigned int                          //宏定義數(shù)據(jù)類型uint
  3. #define uchar unsigned char                        //宏定義數(shù)據(jù)類型uchar
  4. #define key_S 20                                 //宏定義短按(約20ms)
  5. #define key_L key_S*50                             //宏定義長(zhǎng)按(約1s)

  6. sbit key=P3^0;
  7. //sbit led0=P1^0;
  8. //sbit led1=P1^1;
  9. //sbit led2=P1^2;
  10. int b;
  11. uint count=0;                           //計(jì)數(shù)變量
  12. bit a=0;

  13. void delay(unsigned int t)//延時(shí)時(shí)間 = t*9+16 us
  14. {
  15.         while(t--);
  16. }

  17. void main()
  18. {
  19.         while(1)
  20.         {
  21.                 //這一部分想控制四個(gè)LED開與關(guān),控制關(guān)的狀態(tài)不知道怎么寫。求解一下
  22.                 if(!key)
  23.                 {
  24.                         count++;  
  25.                         if(count==key_L)                           //長(zhǎng)按
  26.                         {
  27.                                 a=~a;
  28.                                 if(a)P1&=0x0f;
  29.                                 else P1|=0xf0;
  30.                         }
  31.                         if(count>key_L)                            //防止count溢出
  32.                                 count=key_L+1;         
  33.                 }  
  34.                 else                                           //按鍵抬起
  35.                 {
  36.                         if(count>key_S && count<key_L)             //短按
  37.                         {
  38.                                 P1|=0x0f;
  39.                                 P1&=~(0x01<<b);
  40.                                 b=++b%4;
  41.                         }
  42.                         count=0;                                   //count清0
  43.                 }   
  44.                 delay(110);//1ms
  45.         }
  46. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

5#
ID:584814 發(fā)表于 2022-1-6 08:33 | 只看該作者
理論上一個(gè)按鍵是可以控制多個(gè)燈的開關(guān)的,無非長(zhǎng)按、短按、雙擊、三擊、多擊、長(zhǎng)按與短按編碼...
網(wǎng)上有現(xiàn)成的單、雙、長(zhǎng)三態(tài)代碼可抄用,三擊以上或長(zhǎng)短結(jié)合的僅見思路。
回復(fù)

使用道具 舉報(bào)

6#
ID:858009 發(fā)表于 2022-1-11 11:28 | 只看該作者
wulin 發(fā)表于 2022-1-5 21:34
#define key_S 1000                                 //宏定義短按(約20ms)
#define key_L key_S*100     ...

你好,我想問一下,遇到一個(gè)長(zhǎng)按的問題,單片機(jī)一通電就執(zhí)行第一個(gè)顯示,然后通過長(zhǎng)按進(jìn)行兩個(gè)模式切換,求解一下
#define key_S 20
#define key_L key_S*50
uchar fen;
uint  count;
bit a=0;
sbit key3 = P1^3;
sbit led0 = P1^0;
sbit led1 = P1^7;
sbit led2 = P1^6;

void delay(unsigned int t)//延時(shí)時(shí)間 = t*9+16 us
{
        while(t--);
}
void Scan_key()
{
        if(!key3)
        {
                count++;
            if(count==key_L)
                {
                        a=~a;
                        if(a)
                        {
                                Write_1621(29,0x20,4);
                        }
                        else
                        {
                                Write_1621(29,0x40,4);
                        }
                }

                if(count>key_L)
                        count=key_L+1;
         }
        else
        {
                if(count>key_S && count<key_L)
                {
                        if(++fen==4)
                                fen=0;
                }
                count=0;
                switch(fen)
         {
                 case 0:Write_1621(8,0x01,4);led0=1;led1=1;led2=1;break;
                 case 1:Write_1621(8,0x80,4);led0=0;led1=1;led2=1;break;
                 case 2:Write_1621(8,0x40,4);led0=1;led1=0;led2=1;break;
                 case 3:Write_1621(8,0x20,4);led0=1;led1=1;led2=0;break;
                 default:break;
         }
        }
    delay(110);
}
void main( )
{
        Init_1621();       //初始化HT1621
        Port1Cfg(1,0);   //推挽輸出
        Port1Cfg(1,3);   
        Port1Cfg(1,6);   
        Port1Cfg(1,7);   
        while(1)
        {
                Guding_Init();
                Scan_key();
        }
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久91香蕉国产 | 日韩精品一区二区久久 | 国产精品欧美大片 | 亚洲视频精品 | 国内精品久久久久久久影视简单 | 国产精品一区二区三区四区 | 国产欧美精品一区二区 | 欧美天堂一区 | 国产高清视频在线观看 | 成人免费共享视频 | 午夜视频免费在线观看 | 日韩高清三区 | 日韩精品在线看 | 中文精品视频 | 午夜一区二区三区在线观看 | 隔壁老王国产在线精品 | 精品一区二区三区四区 | 国产一区二区精品在线观看 | 国产精品1区2区 | 精品免费国产一区二区三区四区 | 久久久久国产一级毛片 | 亭亭五月激情 | 亚洲视频在线一区 | 久久久国产一区 | 99成人精品| 日韩中文字幕在线观看视频 | 欧美日韩成人在线 | 成人精品一区二区 | 国产天天操 | 国产激情一区二区三区 | 久久在线 | 国产在线视频一区二区 | 99久久精品国产麻豆演员表 | 精品国产乱码久久久久久果冻传媒 | 国产精品视频久久久 | 91视频www.| 成人精品国产 | 一区二区三区日本 | 欧美日韩视频 | 99影视| 国产一区二区 |