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

標(biāo)題: 已解決:謝謝各位師傅,請教STM32按鍵輸入程序問題 [打印本頁]

作者: 13872888583    時間: 2022-8-20 09:24
標(biāo)題: 已解決:謝謝各位師傅,請教STM32按鍵輸入程序問題
你們好,各位老師,在之前買的普中開發(fā)板A7,將之前的C51換成STM32f103cb模塊,教程里面按鍵輸入程序都和原來不一樣了,我沒有按著教程那樣寫程序,教程都是一個按鍵控制一個燈,我的想法是兩個按鍵控制多個燈,結(jié)果是無法控制,沒有反應(yīng),這個在C51很正常的程序,這里失靈了,比較過兩種開發(fā)板,就是以前的開發(fā)板外接IO口有上拉電阻,不過我在網(wǎng)上找的是沒有影響,請教各位師傅,不知道是否沒有影響,如果沒有影響,是程序有問題嗎?同時使用過,硬件仿真,里面的變量數(shù)值不變,硬件仿真不是很會用,沒有觀察到按鍵輸入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


作者: robinsonlin    時間: 2022-8-20 13:05
兩個按鍵控制8個燈?  2個按鍵,只有4種狀態(tài)吧,沒弄明白你是如何實現(xiàn)的。 如果不是通過狀態(tài)來控制,那就是通過按鍵觸發(fā)的時長來控制,51的速度和 STM32的速度是完全不同的,如果用delay來約束,恐怕不行。
作者: Hephaestus    時間: 2022-8-20 15:57
難道是delay()時間不對?
作者: 13872888583    時間: 2022-8-21 09:04
robinsonlin 發(fā)表于 2022-8-20 13:05
兩個按鍵控制8個燈?  2個按鍵,只有4種狀態(tài)吧,沒弄明白你是如何實現(xiàn)的。 如果不是通過狀態(tài)來控制,那就是 ...

你好,老師,抱歉,這是自己改過的程序,最早的程序,有個自++,一個按鍵按一次,變量加一次,另外一個按鍵按一次,變量減一次,主程序通過變量值判斷來燈閃爍的。由于程序沒有成功,看了一本改成現(xiàn)在這樣,目的只是控制兩個燈,可惜兩個燈都不成功。
作者: lkc8210    時間: 2022-8-22 09:53
led1()到led7()是怎么寫的?
作者: yzwzfyz    時間: 2022-8-22 15:40
假設(shè)控制8個燈,方案:
1、用一個字節(jié)LT(可以是變量),LT的8個位分別表示 8個燈的明暗。
2、建立兩個鍵的組合狀態(tài),有幾種顯示方式,就必須有幾種組合狀態(tài)。
3、將鍵的組合狀態(tài),與LT(對應(yīng)的顯示形式)值做成一個(按鍵與顯示)的【對應(yīng)表】。
4、當(dāng)按鍵出現(xiàn)某種組合時,就從【對應(yīng)表】中取出對應(yīng)的LT值。
5、將LT送到燈的接口上顯示。
作者: 最后一個夏天1    時間: 2022-8-22 19:56
51和32是不一樣的哦,IO初始化需要使能相應(yīng)的時鐘和IO,需要配置IO模式,速度等。你的key_Init()函數(shù)一看就沒配對,建議你先跟著32教程配置一遍初始化,后面就很輕松啦,加油!!
作者: 13872888583    時間: 2022-8-23 08:59
lkc8210 發(fā)表于 2022-8-22 09:53
led1()到led7()是怎么寫的?

在led.c文件里面,采用gpio的置0或者置1的兩個函數(shù),同時采用了延時函數(shù)
作者: 13872888583    時間: 2022-8-23 09:03
最后一個夏天1 發(fā)表于 2022-8-22 19:56
51和32是不一樣的哦,IO初始化需要使能相應(yīng)的時鐘和IO,需要配置IO模式,速度等。你的key_Init()函數(shù)一看就 ...

是一樣的,還有key.h的h文件,里面有這幾個KEY端口的宏定義,幾個C文件都有和教程一樣的H文件,不過沒有按照教程一模一樣的寫而已
作者: 13872888583    時間: 2022-8-23 09:09
yzwzfyz 發(fā)表于 2022-8-22 15:40
假設(shè)控制8個燈,方案:
1、用一個字節(jié)LT(可以是變量),LT的8個位分別表示 8個燈的明暗。
2、建立兩個鍵 ...

是,最開始的確和師傅寫的那樣,設(shè)置一個變量,按壓按鍵一次,變量自加一次,另外一個按鍵,按壓一次,自減一次,最后沒有反應(yīng),改成圖片中那個樣子,
作者: lkc8210    時間: 2022-8-23 09:39
13872888583 發(fā)表于 2022-8-23 08:59
在led.c文件里面,采用gpio的置0或者置1的兩個函數(shù),同時采用了延時函數(shù)

代碼~請貼代碼
作者: vca    時間: 2022-8-23 10:22
時鐘配置錯了,按鍵是GPIOB,你配置成GPIOA了
作者: vca    時間: 2022-8-23 10:36
把按鍵時鐘使能從GPIOA改成GPIOB
作者: 13872888583    時間: 2022-8-23 11:31
lkc8210 發(fā)表于 2022-8-23 09:39
代碼~請貼代碼

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

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

作者: 13872888583    時間: 2022-8-23 11:32
lkc8210 發(fā)表于 2022-8-23 09:39
代碼~請貼代碼

#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;               
}       
作者: 13872888583    時間: 2022-8-23 11:33
lkc8210 發(fā)表于 2022-8-23 09:39
代碼~請貼代碼

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ù)
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
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);//點亮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);
}

作者: 13872888583    時間: 2022-8-23 11:35
vca 發(fā)表于 2022-8-23 10:22
時鐘配置錯了,按鍵是GPIOB,你配置成GPIOA了

謝謝,我再找找看
作者: 13872888583    時間: 2022-8-23 11:36
vca 發(fā)表于 2022-8-23 10:36
把按鍵時鐘使能從GPIOA改成GPIOB

謝謝,我再找找看

作者: 13872888583    時間: 2022-8-24 08:45
vca 發(fā)表于 2022-8-23 10:36
把按鍵時鐘使能從GPIOA改成GPIOB

的確是那里錯了。謝謝了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产小视频自拍 | a毛片| 国产成人精品免高潮在线观看 | 精品一区国产 | 一区二区视频在线观看 | 一区二区精品 | 九九热国产视频 | 国产精品亚洲一区二区三区在线观看 | 中文字幕免费视频 | 国产永久免费 | 中文字幕一区在线观看视频 | 欧美一区二区大片 | 精品一区二区三区四区外站 | 欧美成人精品一区 | 亚洲一区中文 | 99这里只有精品视频 | 中文字幕在线中文 | 欧美精品1区2区3区 免费黄篇 | 欧美一卡二卡在线 | 亚洲视频手机在线 | 隔壁老王国产在线精品 | 日本久久福利 | 国产精品成人一区二区三区 | 武道仙尊动漫在线观看 | 91色视频在线观看 | 新av在线| 国产精品国产三级国产aⅴ原创 | 性视频网| 亚洲精品久久嫩草网站秘色 | 一区视频在线 | 欧美日韩精品一区二区三区四区 | 日本视频中文字幕 | 一级片子 | 成人免费看片又大又黄 | 手机av在线 | 日韩综合网 | 三级在线视频 | 亚洲国产精品一区二区三区 | 亚洲欧美一区二区三区视频 | 亚洲永久免费观看 | 日韩精品一区二区三区 |