欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2919|回復: 18
收起左側

已解決:謝謝各位師傅,請教STM32按鍵輸入程序問題

[復制鏈接]
ID:731755 發表于 2022-8-20 09:24 | 顯示全部樓層 |閱讀模式
你們好,各位老師,在之前買的普中開發板A7,將之前的C51換成STM32f103cb模塊,教程里面按鍵輸入程序都和原來不一樣了,我沒有按著教程那樣寫程序,教程都是一個按鍵控制一個燈,我的想法是兩個按鍵控制多個燈,結果是無法控制,沒有反應,這個在C51很正常的程序,這里失靈了,比較過兩種開發板,就是以前的開發板外接IO口有上拉電阻,不過我在網上找的是沒有影響,請教各位師傅,不知道是否沒有影響,如果沒有影響,是程序有問題嗎?同時使用過,硬件仿真,里面的變量數值不變,硬件仿真不是很會用,沒有觀察到按鍵輸入IO口的波形,
51hei瀏覽器截圖20220819231202.png
51hei瀏覽器截圖20220819231232.png
1.jpg

4按鍵輸入.7z

211.08 KB, 下載次數: 15

回復

使用道具 舉報

ID:451718 發表于 2022-8-20 13:05 | 顯示全部樓層
兩個按鍵控制8個燈?  2個按鍵,只有4種狀態吧,沒弄明白你是如何實現的。 如果不是通過狀態來控制,那就是通過按鍵觸發的時長來控制,51的速度和 STM32的速度是完全不同的,如果用delay來約束,恐怕不行。
回復

使用道具 舉報

ID:883242 發表于 2022-8-20 15:57 | 顯示全部樓層
難道是delay()時間不對?
回復

使用道具 舉報

ID:731755 發表于 2022-8-21 09:04 | 顯示全部樓層
robinsonlin 發表于 2022-8-20 13:05
兩個按鍵控制8個燈?  2個按鍵,只有4種狀態吧,沒弄明白你是如何實現的。 如果不是通過狀態來控制,那就是 ...

你好,老師,抱歉,這是自己改過的程序,最早的程序,有個自++,一個按鍵按一次,變量加一次,另外一個按鍵按一次,變量減一次,主程序通過變量值判斷來燈閃爍的。由于程序沒有成功,看了一本改成現在這樣,目的只是控制兩個燈,可惜兩個燈都不成功。
回復

使用道具 舉報

ID:161164 發表于 2022-8-22 09:53 | 顯示全部樓層
led1()到led7()是怎么寫的?
回復

使用道具 舉報

ID:123289 發表于 2022-8-22 15:40 | 顯示全部樓層
假設控制8個燈,方案:
1、用一個字節LT(可以是變量),LT的8個位分別表示 8個燈的明暗。
2、建立兩個鍵的組合狀態,有幾種顯示方式,就必須有幾種組合狀態。
3、將鍵的組合狀態,與LT(對應的顯示形式)值做成一個(按鍵與顯示)的【對應表】。
4、當按鍵出現某種組合時,就從【對應表】中取出對應的LT值。
5、將LT送到燈的接口上顯示。
回復

使用道具 舉報

ID:646520 發表于 2022-8-22 19:56 | 顯示全部樓層
51和32是不一樣的哦,IO初始化需要使能相應的時鐘和IO,需要配置IO模式,速度等。你的key_Init()函數一看就沒配對,建議你先跟著32教程配置一遍初始化,后面就很輕松啦,加油!!
回復

使用道具 舉報

ID:731755 發表于 2022-8-23 08:59 | 顯示全部樓層
lkc8210 發表于 2022-8-22 09:53
led1()到led7()是怎么寫的?

在led.c文件里面,采用gpio的置0或者置1的兩個函數,同時采用了延時函數
回復

使用道具 舉報

ID:731755 發表于 2022-8-23 09:03 | 顯示全部樓層
最后一個夏天1 發表于 2022-8-22 19:56
51和32是不一樣的哦,IO初始化需要使能相應的時鐘和IO,需要配置IO模式,速度等。你的key_Init()函數一看就 ...

是一樣的,還有key.h的h文件,里面有這幾個KEY端口的宏定義,幾個C文件都有和教程一樣的H文件,不過沒有按照教程一模一樣的寫而已
回復

使用道具 舉報

ID:731755 發表于 2022-8-23 09:09 | 顯示全部樓層
yzwzfyz 發表于 2022-8-22 15:40
假設控制8個燈,方案:
1、用一個字節LT(可以是變量),LT的8個位分別表示 8個燈的明暗。
2、建立兩個鍵 ...

是,最開始的確和師傅寫的那樣,設置一個變量,按壓按鍵一次,變量自加一次,另外一個按鍵,按壓一次,自減一次,最后沒有反應,改成圖片中那個樣子,
回復

使用道具 舉報

ID:161164 發表于 2022-8-23 09:39 | 顯示全部樓層
13872888583 發表于 2022-8-23 08:59
在led.c文件里面,采用gpio的置0或者置1的兩個函數,同時采用了延時函數

代碼~請貼代碼
回復

使用道具 舉報

ID:550613 發表于 2022-8-23 10:22 | 顯示全部樓層
時鐘配置錯了,按鍵是GPIOB,你配置成GPIOA了
回復

使用道具 舉報

ID:550613 發表于 2022-8-23 10:36 | 顯示全部樓層
把按鍵時鐘使能從GPIOA改成GPIOB

評分

參與人數 1黑幣 +10 收起 理由
13872888583 + 10

查看全部評分

回復

使用道具 舉報

14#
無效樓層,該帖已經被刪除
15#
無效樓層,該帖已經被刪除
ID:731755 發表于 2022-8-23 11:31 | 顯示全部樓層

#ifndef _DALAY_H
#define _DELAY_H
#include "stm32f10x.h"

void Delay_ms(u16 a);
void Delay_us(u16 b);
#endif
回復

使用道具 舉報

ID:731755 發表于 2022-8-23 11:32 | 顯示全部樓層

#ifndef _KEY_H
#define _KEY_H

#include "stm32f10x.h"

#define key_PORT       GPIOB
#define key_1        GPIO_Pin_8
#define key_2        GPIO_Pin_9

#define key_PORT_RCC   RCC_APB2Periph_GPIOA
   
void key_Init(void);
u8 key(void);

#endif
#include "key.h"
#include "delay.h"

void key_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;//定義結構體變量
       
        RCC_APB2PeriphClockCmd(key_PORT_RCC,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=key_1|key_2;  //選擇你要設置的IO口
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;         //設置輸入模式
       
        GPIO_Init(key_PORT,&GPIO_InitStructure);            /* 初始化GPIO */
}

        u8 key(void)
        {
   
                if(GPIO_ReadInputDataBit(key_PORT,key_1)==0)
          {
                  Delay_ms(10);
                  if(GPIO_ReadInputDataBit(key_PORT,key_1)==0)
                        {
                     
                    
                                 while(GPIO_ReadInputDataBit(key_PORT,key_1)==0);
                                 return 1;
                        }
                        else
                        return 0;
                 }
          else  if(GPIO_ReadInputDataBit(key_PORT,key_2)==0)
        {
                  Delay_ms(10);
                  if(GPIO_ReadInputDataBit(key_PORT,key_2)==0)
                        {  
                     
                        while(GPIO_ReadInputDataBit(key_PORT,key_2==0));
                        return 2;
                 }       
     else                       
           return 0;                                  
        }
        else
        return 0;               
}       
回復

使用道具 舉報

ID:731755 發表于 2022-8-23 11:33 | 顯示全部樓層

ifndef _led_H
#define _led_H
#include "stm32f10x.h"
#define LED_PORT       GPIOA
#define LED_1       GPIO_Pin_0
#define LED_2       GPIO_Pin_1
#define LED_3       GPIO_Pin_2
#define LED_4       GPIO_Pin_3
#define LED_5       GPIO_Pin_4
#define LED_6       GPIO_Pin_5
#define LED_7       GPIO_Pin_6


#define LED_PORT_RCC   RCC_APB2Periph_GPIOA
   
void LED_Init(void);
void led1(void);
void led2(void);
void led3(void);
void led4(void);
void led5(void);
void led6(void);
void led7(void);

#endif

#include "led.h"
#include "delay.h"
/*******************************************************************************
* 函 數 名         : LED_Init
* 函數功能                   : LED初始化函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void LED_Init()
{
        GPIO_InitTypeDef GPIO_InitStructure;//定義結構體變量
       
        RCC_APB2PeriphClockCmd(LED_PORT_RCC,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=LED_1|LED_2|LED_3|LED_4|LED_5|LED_6|LED_7;  //選擇你要設置的IO口
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;         //設置推挽輸出模式
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;          //設置傳輸速率
        GPIO_Init(LED_PORT,&GPIO_InitStructure);            /* 初始化GPIO */
       
       
        GPIO_SetBits(LED_PORT,LED_1|LED_2|LED_3|LED_4|LED_5|LED_6|LED_7);//??D1
       
}

void led1()
{
    GPIO_ResetBits(LED_PORT,LED_1);  
                Delay_ms(500);
                GPIO_SetBits(LED_PORT,LED_1);//點亮D1
                Delay_ms(500);
}
void led2()
{
    GPIO_ResetBits(LED_PORT,LED_2);   
                Delay_ms(500);
                GPIO_SetBits(LED_PORT,LED_2);
                Delay_ms(500);
}
void led3()
{
    GPIO_ResetBits(LED_PORT,LED_3);  
                Delay_ms(500);
                GPIO_SetBits(LED_PORT,LED_3);
                Delay_ms(500);
}
void led4()
{
    GPIO_ResetBits(LED_PORT,LED_4);  
                Delay_ms(500);
                GPIO_SetBits(LED_PORT,LED_4);//
                Delay_ms(500);
}
void led5()
{
    GPIO_ResetBits(LED_PORT,LED_5);  
                Delay_ms(500);
                GPIO_SetBits(LED_PORT,LED_5);
                Delay_ms(500);
}
void led6()
{
    GPIO_ResetBits(LED_PORT,LED_6);   
                Delay_ms(500);
                GPIO_SetBits(LED_PORT,LED_6);
                Delay_ms(500);
}
void led7()
{
    GPIO_ResetBits(LED_PORT,LED_7);   
                Delay_ms(500);
                GPIO_SetBits(LED_PORT,LED_7);
                Delay_ms(500);
}
回復

使用道具 舉報

ID:731755 發表于 2022-8-23 11:35 | 顯示全部樓層
vca 發表于 2022-8-23 10:22
時鐘配置錯了,按鍵是GPIOB,你配置成GPIOA了

謝謝,我再找找看
回復

使用道具 舉報

ID:731755 發表于 2022-8-23 11:36 | 顯示全部樓層
vca 發表于 2022-8-23 10:36
把按鍵時鐘使能從GPIOA改成GPIOB

謝謝,我再找找看
回復

使用道具 舉報

ID:731755 發表于 2022-8-24 08:45 | 顯示全部樓層
vca 發表于 2022-8-23 10:36
把按鍵時鐘使能從GPIOA改成GPIOB

的確是那里錯了。謝謝了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表