亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

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

QQ登錄

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

搜索

有兩種單片機(jī)流水燈形式,想要加兩個(gè)按鍵切換流水燈模式,程序應(yīng)該怎么改,謝謝

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

正文摘要:

新手求助:有兩種流水燈形式,想加兩個(gè)按鍵切換流水燈模式,按鍵程序搞半天也沒(méi)整明白,請(qǐng)高人指點(diǎn),謝謝!按鍵1執(zhí)行 void disp0() 按鍵2執(zhí)行 void disp1() 請(qǐng)大佬們幫幫忙,萬(wàn)分感謝! 單片機(jī)源程序如下: #incl ...

回復(fù)

ID:1160531 發(fā)表于 2026-1-5 15:34
按鍵判斷程序,供參考while (1)
  {
                                 //正向運(yùn)動(dòng)按鍵 KEY1 判斷
                if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1))
                {
                        HAL_Delay(100);
                  if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1))
                        {
                                printf("key1 press down\r\n");
                                if(motor1_dir_flg==zheng)
                                        motor1_dir_flg = fan;
                                else
                                        motor1_dir_flg = zheng;
                        }
                        HAL_Delay(10);                         
                       
                }
               
               
                if(motor1_dir_flg)
                {
                        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET);
                        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET);
                }
                else
                {
                        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
                        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET);
                       
                }
               
                 HAL_Delay(10);
               
                //反向運(yùn)動(dòng)按鍵 KEY2 判斷
                 if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2))
                {
                        HAL_Delay(10);
                  if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2))
                        {
                                printf("key2 press down\r\n");
                                if(motor2_dir_flg==zheng)                                       
                                        motor2_dir_flg=fan;
                                else
                                        motor2_dir_flg=zheng;
                        }
                                HAL_Delay(10);
                }
                       
                        if(motor2_dir_flg)
                        {
                                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);
                                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
                        }
                        else
                        {
                               
                                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);
                                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
                        }
                       
                        HAL_Delay(10);
                       
                       
                //調(diào)速控制按鍵 KEY3 判斷                       
                if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3))
                {
                        HAL_Delay(10);
                  if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3))
                        {
                                        if(motor_speed<1000)
                                        {
                                                printf("the current speed: %d\r\n",motor_speed);
                                                motor_speed+=100;
                                                __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,motor_speed);
                                        }
                                        else
                                        {
                                                motor_speed = 100;
                                                __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,motor_speed);
                                                printf("the current speed: %d\r\n",motor_speed);
                                         
                                        }
                                       
                                        HAL_Delay(500);
                       
                        }
               
                }
ID:1160531 發(fā)表于 2026-1-5 15:31
建議使用外部中斷的方式,這樣的話對(duì)按鍵動(dòng)作能及時(shí)響應(yīng),至于哪個(gè)按鍵按下執(zhí)行什么樣的功能邏輯,再分別寫(xiě)兩個(gè)功能函數(shù)進(jìn)行條件對(duì)應(yīng)即可。功能沒(méi)通的情況下,可以先少用幾個(gè)LED,通了之后再控制多個(gè)。
ID:101869 發(fā)表于 2025-12-5 19:08
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
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 i, j;                                                             // 定義循環(huán)變量
uint tt = 70;                                                           // 定義時(shí)間指數(shù)
sbit key = P1 ^ 1;
uchar led_mod = 0; // 模式  0=關(guān)  1=LED順時(shí)針轉(zhuǎn)一圈 2=所有LED閃爍3次
void key_scan()
{
    static uint key_cnt = 0;
    static bit key_flag = 0;
    if (key)
    {
        key_cnt = 0;
        key_flag = 0;
    }
    else if (!key_flag)
    {
        key_cnt++;
        if (key_cnt >= 1000)
        {
            key_flag = 1;
            led_mod++;
            if (led_mod > 2)
                led_mod = 0;
        }
    }
}
void delay(uint time) // 延時(shí)函數(shù)
{
    uint x, y;
    for (x = time; x > 0; x--)
        for (y = 110; y > 0; y--)
            ;
}

void disp0() // 狀態(tài)1 LED順時(shí)針轉(zhuǎn)一圈
{
    for (i = 0; i < 8; i++)
    {
        P2 = table1[i];
        delay(100);
    }
    P2 = 0xff;

    for (i = 0; i < 8; i++)
    {
        P0 = table0[i];
        delay(100);
    }
    P0 = 0xff;
}
void disp1() // 狀態(tài)0 所有LED閃爍3次
{
    for (i = 0; i < 3; i++)
    {
        P0 = 0x00;
        P2 = 0x00;
        delay(300);
        P0 = 0xff;
        P2 = 0xff;
        delay(300);
    }
}
void main()
{
    while (1)
    {
         key_scan();
        switch (led_mod)
        {
        case 0: // 關(guān)閉的代碼
            break;
        case 1:
            disp0(); // 狀態(tài)1 LED順時(shí)針轉(zhuǎn)一圈
            break;
        case 2:
            disp1(); // 狀態(tài)0 所有LED閃爍3次
            break;
        default:
            break;
        }
    }
}

ID:1156764 發(fā)表于 2025-12-5 17:59
這是用標(biāo)識(shí)符的方式,
第一步:把disp1() 和disp0() 記作狀態(tài)1和狀態(tài)0
第二步:新增定義
   sbit key1 =  P1^6;
   sbit key2 =  P1^7;
   ledstate=0;//默認(rèn)狀態(tài)0
第三步:while(1)循環(huán)改為
   while(1)
{
    if(ledstate==0)
   {
       disp0();
   }
   else if(ledstate==1)
   {
       disp1();
   }
   if(key1==0)
   {
        ledstate=0;
   }
   else if(key2==0)
   {
         ledstate=1;
   }
}第四現(xiàn)象:
默認(rèn)上電是狀態(tài)0,點(diǎn)擊key1切換為狀態(tài)0,點(diǎn)擊key2切換為狀態(tài)1,同時(shí)點(diǎn)擊key1key2會(huì)優(yōu)先狀態(tài)0
ID:123917 發(fā)表于 2025-12-5 16:36
中斷應(yīng)該可以,試試看
ID:876947 發(fā)表于 2025-12-5 12:26
哈哈哈!我竟然為兩套流水燈程序在一塊板子上整了兩塊cpu!
ID:6467 發(fā)表于 2025-11-6 21:56
你這個(gè)程序;容易出現(xiàn)按鍵響應(yīng)不靈敏的情況;delay時(shí)間越大;約明顯;不信你試一試。
ID:1105755 發(fā)表于 2024-5-23 20:30
xiaobendan001 發(fā)表于 2024-5-21 09:25
if(按鍵1)disp0();
if(按鍵2)disp1();

謝謝!
ID:1105755 發(fā)表于 2024-5-23 20:29
cheney03 發(fā)表于 2024-5-21 08:58
先定義兩個(gè)按鍵參數(shù)sbit k1=P1^6; sbit k2=P1^7;  主函數(shù):        if(k1==0)        //檢測(cè)按鍵K1是否按下{delay(1000);  ...

謝謝!我弄一下試試。
ID:1105755 發(fā)表于 2024-5-23 20:28
LaoYuTou 發(fā)表于 2024-5-21 08:18
定義按鍵端口
sbit key1 =  P1^6;
sbit key2 =  P1^7;

謝謝!剛開(kāi)始弄,研究一下
ID:1109793 發(fā)表于 2024-5-21 09:25
if(按鍵1)disp0();
if(按鍵2)disp1();
ID:743654 發(fā)表于 2024-5-21 08:58
先定義兩個(gè)按鍵參數(shù)sbit k1=P1^6; sbit k2=P1^7;  主函數(shù):        if(k1==0)        //檢測(cè)按鍵K1是否按下{delay(1000);   //消除抖動(dòng) 一般大約10ms  if(k1==0)         //再次判斷按鍵是否按下{disp0();   //模式1}while(!k1);         //檢測(cè)按鍵1是否松開(kāi)              if(k2==0)        //檢測(cè)按鍵K2是否按下{delay(1000);   //消除抖動(dòng) 一般大約10ms  if(k2==0)//再次判斷按鍵是否按下{disp1();   //模式2}while(!k2);         //檢測(cè)按鍵2是否松開(kāi)
ID:1080935 發(fā)表于 2024-5-21 08:18
定義按鍵端口
sbit key1 =  P1^6;
sbit key2 =  P1^7;
在主循環(huán)中while(1)中改為
{
  if(!key1)
  {//可以考慮消抖,仿真中可不用。
    disp0();
    while(!key1);//等待按鍵釋放
  }
  if(!key2)
  {
     disp1();
     while(!key2);//等待按鍵釋放
  }
}
這種方法不是特別推薦,可以額外定義一邊量作為狀態(tài)初始為0,按鍵按下后狀態(tài)改變(1或2),根據(jù)狀態(tài)調(diào)用對(duì)應(yīng)函數(shù),調(diào)用完后變量清零。這相當(dāng)于只調(diào)用一次的任務(wù)。

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

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

快速回復(fù) 返回頂部 返回列表