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

QQ登錄

只需一步,快速開始

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

已解決:謝謝各位師傅,請(qǐng)教STM32按鍵輸入程序問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
你們好,各位老師,在之前買的普中開發(fā)板A7,將之前的C51換成STM32f103cb模塊,教程里面按鍵輸入程序都和原來(lái)不一樣了,我沒(méi)有按著教程那樣寫程序,教程都是一個(gè)按鍵控制一個(gè)燈,我的想法是兩個(gè)按鍵控制多個(gè)燈,結(jié)果是無(wú)法控制,沒(méi)有反應(yīng),這個(gè)在C51很正常的程序,這里失靈了,比較過(guò)兩種開發(fā)板,就是以前的開發(fā)板外接IO口有上拉電阻,不過(guò)我在網(wǎng)上找的是沒(méi)有影響,請(qǐng)教各位師傅,不知道是否沒(méi)有影響,如果沒(méi)有影響,是程序有問(wèn)題嗎?同時(shí)使用過(guò),硬件仿真,里面的變量數(shù)值不變,硬件仿真不是很會(huì)用,沒(méi)有觀察到按鍵輸入IO口的波形,

51hei瀏覽器截圖20220819231202.png (19.49 KB, 下載次數(shù): 81)

51hei瀏覽器截圖20220819231202.png

51hei瀏覽器截圖20220819231232.png (30.28 KB, 下載次數(shù): 78)

51hei瀏覽器截圖20220819231232.png

1.jpg (4.61 MB, 下載次數(shù): 161)

1.jpg

4按鍵輸入.7z

211.08 KB, 下載次數(shù): 15

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:451718 發(fā)表于 2022-8-20 13:05 | 只看該作者
兩個(gè)按鍵控制8個(gè)燈?  2個(gè)按鍵,只有4種狀態(tài)吧,沒(méi)弄明白你是如何實(shí)現(xiàn)的。 如果不是通過(guò)狀態(tài)來(lái)控制,那就是通過(guò)按鍵觸發(fā)的時(shí)長(zhǎng)來(lái)控制,51的速度和 STM32的速度是完全不同的,如果用delay來(lái)約束,恐怕不行。
回復(fù)

使用道具 舉報(bào)

板凳
ID:883242 發(fā)表于 2022-8-20 15:57 | 只看該作者
難道是delay()時(shí)間不對(duì)?
回復(fù)

使用道具 舉報(bào)

地板
ID:731755 發(fā)表于 2022-8-21 09:04 | 只看該作者
robinsonlin 發(fā)表于 2022-8-20 13:05
兩個(gè)按鍵控制8個(gè)燈?  2個(gè)按鍵,只有4種狀態(tài)吧,沒(méi)弄明白你是如何實(shí)現(xiàn)的。 如果不是通過(guò)狀態(tài)來(lái)控制,那就是 ...

你好,老師,抱歉,這是自己改過(guò)的程序,最早的程序,有個(gè)自++,一個(gè)按鍵按一次,變量加一次,另外一個(gè)按鍵按一次,變量減一次,主程序通過(guò)變量值判斷來(lái)燈閃爍的。由于程序沒(méi)有成功,看了一本改成現(xiàn)在這樣,目的只是控制兩個(gè)燈,可惜兩個(gè)燈都不成功。
回復(fù)

使用道具 舉報(bào)

5#
ID:161164 發(fā)表于 2022-8-22 09:53 | 只看該作者
led1()到led7()是怎么寫的?
回復(fù)

使用道具 舉報(bào)

6#
ID:123289 發(fā)表于 2022-8-22 15:40 | 只看該作者
假設(shè)控制8個(gè)燈,方案:
1、用一個(gè)字節(jié)LT(可以是變量),LT的8個(gè)位分別表示 8個(gè)燈的明暗。
2、建立兩個(gè)鍵的組合狀態(tài),有幾種顯示方式,就必須有幾種組合狀態(tài)。
3、將鍵的組合狀態(tài),與LT(對(duì)應(yīng)的顯示形式)值做成一個(gè)(按鍵與顯示)的【對(duì)應(yīng)表】。
4、當(dāng)按鍵出現(xiàn)某種組合時(shí),就從【對(duì)應(yīng)表】中取出對(duì)應(yīng)的LT值。
5、將LT送到燈的接口上顯示。
回復(fù)

使用道具 舉報(bào)

7#
ID:646520 發(fā)表于 2022-8-22 19:56 | 只看該作者
51和32是不一樣的哦,IO初始化需要使能相應(yīng)的時(shí)鐘和IO,需要配置IO模式,速度等。你的key_Init()函數(shù)一看就沒(méi)配對(duì),建議你先跟著32教程配置一遍初始化,后面就很輕松啦,加油!
回復(fù)

使用道具 舉報(bào)

8#
ID:731755 發(fā)表于 2022-8-23 08:59 | 只看該作者
lkc8210 發(fā)表于 2022-8-22 09:53
led1()到led7()是怎么寫的?

在led.c文件里面,采用gpio的置0或者置1的兩個(gè)函數(shù),同時(shí)采用了延時(shí)函數(shù)
回復(fù)

使用道具 舉報(bào)

9#
ID:731755 發(fā)表于 2022-8-23 09:03 | 只看該作者
最后一個(gè)夏天1 發(fā)表于 2022-8-22 19:56
51和32是不一樣的哦,IO初始化需要使能相應(yīng)的時(shí)鐘和IO,需要配置IO模式,速度等。你的key_Init()函數(shù)一看就 ...

是一樣的,還有key.h的h文件,里面有這幾個(gè)KEY端口的宏定義,幾個(gè)C文件都有和教程一樣的H文件,不過(guò)沒(méi)有按照教程一模一樣的寫而已
回復(fù)

使用道具 舉報(bào)

10#
ID:731755 發(fā)表于 2022-8-23 09:09 | 只看該作者
yzwzfyz 發(fā)表于 2022-8-22 15:40
假設(shè)控制8個(gè)燈,方案:
1、用一個(gè)字節(jié)LT(可以是變量),LT的8個(gè)位分別表示 8個(gè)燈的明暗。
2、建立兩個(gè)鍵 ...

是,最開始的確和師傅寫的那樣,設(shè)置一個(gè)變量,按壓按鍵一次,變量自加一次,另外一個(gè)按鍵,按壓一次,自減一次,最后沒(méi)有反應(yīng),改成圖片中那個(gè)樣子,
回復(fù)

使用道具 舉報(bào)

11#
ID:161164 發(fā)表于 2022-8-23 09:39 | 只看該作者
13872888583 發(fā)表于 2022-8-23 08:59
在led.c文件里面,采用gpio的置0或者置1的兩個(gè)函數(shù),同時(shí)采用了延時(shí)函數(shù)

代碼~請(qǐng)貼代碼
回復(fù)

使用道具 舉報(bào)

12#
ID:550613 發(fā)表于 2022-8-23 10:22 | 只看該作者
時(shí)鐘配置錯(cuò)了,按鍵是GPIOB,你配置成GPIOA了
回復(fù)

使用道具 舉報(bào)

13#
ID:550613 發(fā)表于 2022-8-23 10:36 | 只看該作者
把按鍵時(shí)鐘使能從GPIOA改成GPIOB

評(píng)分

參與人數(shù) 1黑幣 +10 收起 理由
13872888583 + 10

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

14#
ID:731755 發(fā)表于 2022-8-23 11:31 | 只看該作者
lkc8210 發(fā)表于 2022-8-23 09:39
代碼~請(qǐng)貼代碼

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

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

使用道具 舉報(bào)

15#
ID:731755 發(fā)表于 2022-8-23 11:32 | 只看該作者
lkc8210 發(fā)表于 2022-8-23 09:39
代碼~請(qǐng)貼代碼

#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;//定義結(jié)構(gòu)體變量
       
        RCC_APB2PeriphClockCmd(key_PORT_RCC,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=key_1|key_2;  //選擇你要設(shè)置的IO口
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;         //設(shè)置輸入模式
       
        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;               
}       
回復(fù)

使用道具 舉報(bào)

16#
ID:731755 發(fā)表于 2022-8-23 11:33 | 只看該作者
lkc8210 發(fā)表于 2022-8-23 09:39
代碼~請(qǐng)貼代碼

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"
/*******************************************************************************
* 函 數(shù) 名         : LED_Init
* 函數(shù)功能                   : LED初始化函數(shù)
* 輸    入         : 無(wú)
* 輸    出         : 無(wú)
*******************************************************************************/
void LED_Init()
{
        GPIO_InitTypeDef GPIO_InitStructure;//定義結(jié)構(gòu)體變量
       
        RCC_APB2PeriphClockCmd(LED_PORT_RCC,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=LED_1|LED_2|LED_3|LED_4|LED_5|LED_6|LED_7;  //選擇你要設(shè)置的IO口
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;         //設(shè)置推挽輸出模式
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;          //設(shè)置傳輸速率
        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);//點(diǎn)亮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);
}
回復(fù)

使用道具 舉報(bào)

17#
ID:731755 發(fā)表于 2022-8-23 11:35 | 只看該作者
vca 發(fā)表于 2022-8-23 10:22
時(shí)鐘配置錯(cuò)了,按鍵是GPIOB,你配置成GPIOA了

謝謝,我再找找看
回復(fù)

使用道具 舉報(bào)

18#
ID:731755 發(fā)表于 2022-8-23 11:36 | 只看該作者
vca 發(fā)表于 2022-8-23 10:36
把按鍵時(shí)鐘使能從GPIOA改成GPIOB

謝謝,我再找找看
回復(fù)

使用道具 舉報(bào)

19#
ID:731755 發(fā)表于 2022-8-24 08:45 | 只看該作者
vca 發(fā)表于 2022-8-23 10:36
把按鍵時(shí)鐘使能從GPIOA改成GPIOB

的確是那里錯(cuò)了。謝謝了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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