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

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

QQ登錄

只需一步,快速開(kāi)始

搜索

51單片機(jī)四個(gè)按鍵控制四個(gè)功能,求C語(yǔ)言程序編寫(xiě)思路

查看數(shù): 4334 | 評(píng)論數(shù): 9 | 收藏 1
關(guān)燈 | 提示:支持鍵盤(pán)翻頁(yè)<-左 右->
    組圖打開(kāi)中,請(qǐng)稍候......
發(fā)布時(shí)間: 2020-10-5 10:32

正文摘要:

本帖最后由 武。。。。 于 2020-10-5 16:07 編輯 按下按鍵一后(短按),8個(gè)led燈全部亮(死循環(huán));按下按鍵二后,8個(gè)led燈進(jìn)行流水(死循環(huán));按下按鍵三后,8個(gè)led燈同時(shí)做呼吸(2秒亮,4秒暗)(利用pwm占空 ...

回復(fù)

ID:613250 發(fā)表于 2020-10-13 15:09
daemondong 發(fā)表于 2020-10-9 19:15
呼吸死在 140行            while(1);
修改如下:
1. 去掉 140行

我試著那樣去仿真,發(fā)現(xiàn)按了呼吸燈的按鍵后就無(wú)法按其他按鍵了,會(huì)一直停留在呼吸燈那里。
ID:798631 發(fā)表于 2020-10-9 21:51
呼吸比較好實(shí)現(xiàn)  定時(shí)器中斷里面做10毫秒時(shí)基,計(jì)數(shù)延時(shí)  ,燈也加上閃爍秒計(jì)數(shù)2之前亮 到6滅燈清0  就好了   
ID:827243 發(fā)表于 2020-10-9 19:15
呼吸死在 140行            while(1);
修改如下:
1. 去掉 140行
2.  110行 case 3 如下
case 3: //led燈進(jìn)行閃爍
huxi();
break;
ID:827215 發(fā)表于 2020-10-9 18:48
這種情況下我就不想用定時(shí)器了,當(dāng)然,用定時(shí)器延時(shí)ok的。既然是51,直接讀取按鍵對(duì)應(yīng)口,根據(jù)讀取到的值執(zhí)行不同的程序。所以寫(xiě)四個(gè)現(xiàn)象的函數(shù),然后根據(jù)IO口讀取條件調(diào)用
ID:275826 發(fā)表于 2020-10-7 08:54
武。。。。 發(fā)表于 2020-10-7 00:46
你好,請(qǐng)問(wèn)您的呼吸燈部分是亮兩秒暗四秒嗎?

上面例程是各一秒左右,修改下參數(shù)很容易實(shí)現(xiàn)的
ID:613250 發(fā)表于 2020-10-7 00:46
tyrl800 發(fā)表于 2020-10-6 10:10
#include #define uchar unsigned char #define uint unsigned int #define Kport  P3 #define Ledport  P1 ...

你好,請(qǐng)問(wèn)您的呼吸燈部分是亮兩秒暗四秒嗎?
ID:451718 發(fā)表于 2020-10-6 14:28
//***********硬件底層定義**************
#define K1                    P14
#define K2                    P15
#define K3                    P16
#define K4                    P17

//***********軟件層定義*************
#define KEY1_PRES                        1        //KEY1按下
#define KEY2_PRES                        2        //KEY2按下
#define KEY3_PRES                        3        //KEY3按下
#define KEY4_PRES                        4        //KEY4按下
#define KEY5_PRES                        5        //KEY3和KEY4同時(shí)按下   擴(kuò)展用


//***********按鍵檢測(cè)函數(shù)**************

unsigned char Key_Scan(unsigned char mode)
{
        static unsigned char Key_Up = 1; //按鍵按松開(kāi)標(biāo)志

        if(mode)        //支持連按
        {
                Key_Up = 1;       
        }
        if(Key_Up && (K1==0 || K2==0 || K3==0 || K4==0))
        {
               
                Key_Up = 0;
               
                if(K1 == 0)
                        return KEY1_PRES;
                else if(K2 == 0)
                        return KEY2_PRES;
                else if(K3 == 0 && K4 == 0)
                        return KEY5_PRES;
                else if(K3 == 0)
                        return KEY3_PRES;
                else if(K4 == 0)
                        return KEY4_PRES;

        }
        else if(K1 == 1 && K2 == 1 && K3 == 1 && K4 == 1)
        {
                Key_Up = 1;
        }
               
        return 0; //無(wú)按鍵按下
       
}

//*************按鍵處理函數(shù)****************

Key_Deal()
{
      
      key = Key_Scan(1);           //key外部變量,  1:支持連按, 0:不支持連按,

      switch(key)
      {
           case 1:
                 KeyFlag = 1;      //KeyFlag 外部變量
           break;
           case 2:
                 KeyFlag = 2;
           break;
           case 3:
                 KeyFlag = 3;
           break;
           case 4:
                //關(guān)定時(shí)器,熄燈;
           break;
           default:
               
           break;
      }
}

main()
{
      Key_Deal();
      switch(KeyFlag)
      {
           case 1:
                 //關(guān)定時(shí)器
                 //全亮操作
           break;
           case 2:
                 //關(guān)定時(shí)器
                 //跑馬燈操作
           break;
           case 3:
                 //呼吸燈,開(kāi)定時(shí)器;
           break;
      }
}
ID:451718 發(fā)表于 2020-10-6 14:04
你的呼吸燈是通過(guò)定時(shí)器實(shí)現(xiàn)的,開(kāi)啟后,定時(shí)器會(huì)常態(tài)一直工作,當(dāng)鍵值改變后,你有判斷后去改變 “ET0 = 0; 或者 EA = 0;”操作么?
ID:275826 發(fā)表于 2020-10-6 10:10
#include<reg52.h> #define uchar unsigned char #define uint unsigned int #define Kport  P3 #define Ledport  P1 uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED從低位往高位移 unsigned char kscancnt;        //記錄進(jìn)入中斷的次數(shù),滿一個(gè)周期清零  void timer0_init();                        //定時(shí)器0初始化 void delayMS(uint x);           //延時(shí)函數(shù) void KeyProcess(uchar Key);         //按鍵處理函數(shù) bit flag; uchar knum; uint F3cnt,F2cnt,Pwmcnt,T0cnt; uchar temp=0xff,temp1; uchar sh_cnt; //延時(shí)函數(shù) void delayMS(uint x) {     uchar i;     while (x--)        for(i=0;i<120; i++) ; } /*************************************************** *                                定時(shí)器0初始化子函數(shù) *                        工作方式2,每1000us中斷一次 ****************************************************/ void timer0_init(void) {         TMOD = 0x01;                //采用定時(shí)器0,工作方式2,         TH0 = (65536-1000)/256;                         //定時(shí)器設(shè)置,每隔20us發(fā)起一次中斷。         TL0 = (65536-1000)%256;                   ET0 = 1;                        //開(kāi)定時(shí)器0中斷         EA = 1;                                 //開(kāi)總中斷         TR0 = 1;                        //打開(kāi)定時(shí)器 }  //檢測(cè)按鍵  uchar GetKey(uchar kscancnt)  {      uchar ktmp;     if(kscancnt==0)          {           temp=(Kport&0xf0)>>4;           ktmp=~temp &(temp1);           if(ktmp)knum=ktmp;           temp1=temp;          }    return knum;  }  //鍵盤(pán)按鍵處理  void KeyProcess(uchar Key)   {        switch (Key)          {            case 1:Ledport=0x00;                                                 break;                             case 2:if(F2cnt==200){sh_cnt=++sh_cnt%8;F2cnt=0;}                           Ledport=table0[sh_cnt];                       break;            case 4:if(T0cnt==300)                     {F3cnt=F3cnt+10;T0cnt=0;}                           if(F3cnt==130){F3cnt=0;flag=!flag;}                   Pwmcnt=++Pwmcnt%100;                            if(flag)                             {if(Pwmcnt>F3cnt)Ledport=0x00;else Ledport=0xff;}                           else                             {if(Pwmcnt>F3cnt)Ledport=0xff;else Ledport=0x00;}                   break;             case 8:Ledport=0xff; //全部關(guān)閉                           break;          }  }  /*************************************************** *               中斷服務(wù)子函數(shù) *****************************************************/ void time0(void) interrupt 1 {     TH0 = (65536-1000)/256;                         //定時(shí)器設(shè)置,每隔20us發(fā)起一次中斷。     TL0 = (65536-1000)%256;           kscancnt=++ kscancnt%10;         if(knum==2)         {F2cnt++; }     if(knum==4)         {T0cnt++; } }   //--------------------------------------------------------------------  void main(void)  {           uchar Key;         P0=P1=0xFF;         timer0_init();         while(1)                    {                  Key=GetKey(kscancnt);                  KeyProcess(Key);                                  } }

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产资源视频 | 一区二区三区免费 | 97伦理电影网 | 午夜免费看 | 国产乱码精品一区二区三区忘忧草 | 亚洲精品一区二区三区 | 欧美一级欧美三级在线观看 | 国产一区二区三区免费观看在线 | 成人在线免费视频 | 久久成人精品视频 | 九色国产 | 午夜影院毛片 | wwwww在线观看| 一级黄色夫妻生活 | 九色视频网站 | 怡红院免费的全部视频 | 国产一区二区三区在线看 | 国产精品日日摸夜夜添夜夜av | 毛片久久久 | 一级做a爰片久久毛片免费看 | 亚洲免费福利视频 | 欧美一区二区三 | 成人在线视频观看 | 亚洲国产成人精品久久 | 精品美女视频在线观看免费软件 | 免费看黄色小视频 | 午夜天堂精品久久久久 | 国产a区| 一区二区三区四区不卡视频 | 久久久久国产精品www | 日韩午夜精品 | 亚洲欧美日韩一区 | 成人精品一区二区三区四区 | 欧美激情精品久久久久久变态 | 欧美日韩在线一区二区 | 中文字幕亚洲精品 | 国产精品视频yy9299一区 | 五月激情婷婷网 | 亚洲精品黄色 | 日本黄色大片免费看 | 天天操操|