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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數: 2591 | 評論數: 18 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2022-8-20 09:24

正文摘要:

你們好,各位老師,在之前買的普中開發板A7,將之前的C51換成STM32f103cb模塊,教程里面按鍵輸入程序都和原來不一樣了,我沒有按著教程那樣寫程序,教程都是一個按鍵控制一個燈,我的想法是兩個按鍵控制多個燈,結果 ...

回復

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

的確是那里錯了。謝謝了
ID:731755 發表于 2022-8-23 11:36
vca 發表于 2022-8-23 10:36
把按鍵時鐘使能從GPIOA改成GPIOB

謝謝,我再找找看
ID:731755 發表于 2022-8-23 11:35
vca 發表于 2022-8-23 10:22
時鐘配置錯了,按鍵是GPIOB,你配置成GPIOA了

謝謝,我再找找看
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: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:31

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

void Delay_ms(u16 a);
void Delay_us(u16 b);
#endif
ID:550613 發表于 2022-8-23 10:36
把按鍵時鐘使能從GPIOA改成GPIOB

評分

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

查看全部評分

ID:550613 發表于 2022-8-23 10:22
時鐘配置錯了,按鍵是GPIOB,你配置成GPIOA了
ID:161164 發表于 2022-8-23 09:39
13872888583 發表于 2022-8-23 08:59
在led.c文件里面,采用gpio的置0或者置1的兩個函數,同時采用了延時函數

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

是,最開始的確和師傅寫的那樣,設置一個變量,按壓按鍵一次,變量自加一次,另外一個按鍵,按壓一次,自減一次,最后沒有反應,改成圖片中那個樣子,
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 08:59
lkc8210 發表于 2022-8-22 09:53
led1()到led7()是怎么寫的?

在led.c文件里面,采用gpio的置0或者置1的兩個函數,同時采用了延時函數
ID:646520 發表于 2022-8-22 19:56
51和32是不一樣的哦,IO初始化需要使能相應的時鐘和IO,需要配置IO模式,速度等。你的key_Init()函數一看就沒配對,建議你先跟著32教程配置一遍初始化,后面就很輕松啦,加油!!
ID:123289 發表于 2022-8-22 15:40
假設控制8個燈,方案:
1、用一個字節LT(可以是變量),LT的8個位分別表示 8個燈的明暗。
2、建立兩個鍵的組合狀態,有幾種顯示方式,就必須有幾種組合狀態。
3、將鍵的組合狀態,與LT(對應的顯示形式)值做成一個(按鍵與顯示)的【對應表】。
4、當按鍵出現某種組合時,就從【對應表】中取出對應的LT值。
5、將LT送到燈的接口上顯示。
ID:161164 發表于 2022-8-22 09:53
led1()到led7()是怎么寫的?
ID:731755 發表于 2022-8-21 09:04
robinsonlin 發表于 2022-8-20 13:05
兩個按鍵控制8個燈?  2個按鍵,只有4種狀態吧,沒弄明白你是如何實現的。 如果不是通過狀態來控制,那就是 ...

你好,老師,抱歉,這是自己改過的程序,最早的程序,有個自++,一個按鍵按一次,變量加一次,另外一個按鍵按一次,變量減一次,主程序通過變量值判斷來燈閃爍的。由于程序沒有成功,看了一本改成現在這樣,目的只是控制兩個燈,可惜兩個燈都不成功。
ID:883242 發表于 2022-8-20 15:57
難道是delay()時間不對?
ID:451718 發表于 2022-8-20 13:05
兩個按鍵控制8個燈?  2個按鍵,只有4種狀態吧,沒弄明白你是如何實現的。 如果不是通過狀態來控制,那就是通過按鍵觸發的時長來控制,51的速度和 STM32的速度是完全不同的,如果用delay來約束,恐怕不行。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人黄色电影免费 | 婷婷五月色综合 | 日韩av在线一区 | 亚洲a视频 | 久久精品欧美视频 | 手机av免费在线 | 久久精品视频一区二区 | 天堂在线www | 中文字幕av一区 | 精品欧美激情精品一区 | 人人爽人人草 | 午夜色婷婷| 久久久免费在线观看 | 国产三级| 色婷婷精品国产一区二区三区 | 国产精品久久久亚洲 | 成人av电影在线 | 国产一区精品在线 | 超碰人人人人 | 色在线免费视频 | 一区二区三区视频免费观看 | 婷婷丁香在线视频 | 精品久久免费 | 午夜精品一区二区三区在线视频 | 日本免费黄色 | 精国产品一区二区三区四季综 | 成年人免费看的视频 | 国产黄色在线观看 | 福利视频一区 | 五月婷婷激情 | 成人二区 | 成人超碰在线 | 精品国产区 | 久久亚洲国产精品 | 一区观看| 先锋资源在线 | 99精品久久久国产一区二区三 | 亚洲精品久久久久中文字幕欢迎你 | 久久久这里都是精品 | 亚洲欧美国产精品久久 | 欧美爱爱视频网站 |