![]() |
發布時間: 2022-8-20 09:24
正文摘要:你們好,各位老師,在之前買的普中開發板A7,將之前的C51換成STM32f103cb模塊,教程里面按鍵輸入程序都和原來不一樣了,我沒有按著教程那樣寫程序,教程都是一個按鍵控制一個燈,我的想法是兩個按鍵控制多個燈,結果 ... |
vca 發表于 2022-8-23 10:36 的確是那里錯了。謝謝了 |
vca 發表于 2022-8-23 10:36 謝謝,我再找找看 |
vca 發表于 2022-8-23 10:22 謝謝,我再找找看 |
lkc8210 發表于 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" /******************************************************************************* * 函 數 名 : 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); } |
lkc8210 發表于 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;//定義結構體變量 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; } |
lkc8210 發表于 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 |
時鐘配置錯了,按鍵是GPIOB,你配置成GPIOA了 |
13872888583 發表于 2022-8-23 08:59 代碼~請貼代碼 |
yzwzfyz 發表于 2022-8-22 15:40 是,最開始的確和師傅寫的那樣,設置一個變量,按壓按鍵一次,變量自加一次,另外一個按鍵,按壓一次,自減一次,最后沒有反應,改成圖片中那個樣子, |
最后一個夏天1 發表于 2022-8-22 19:56 是一樣的,還有key.h的h文件,里面有這幾個KEY端口的宏定義,幾個C文件都有和教程一樣的H文件,不過沒有按照教程一模一樣的寫而已 |
lkc8210 發表于 2022-8-22 09:53 在led.c文件里面,采用gpio的置0或者置1的兩個函數,同時采用了延時函數 |
51和32是不一樣的哦,IO初始化需要使能相應的時鐘和IO,需要配置IO模式,速度等。你的key_Init()函數一看就沒配對,建議你先跟著32教程配置一遍初始化,后面就很輕松啦,加油!! |
假設控制8個燈,方案: 1、用一個字節LT(可以是變量),LT的8個位分別表示 8個燈的明暗。 2、建立兩個鍵的組合狀態,有幾種顯示方式,就必須有幾種組合狀態。 3、將鍵的組合狀態,與LT(對應的顯示形式)值做成一個(按鍵與顯示)的【對應表】。 4、當按鍵出現某種組合時,就從【對應表】中取出對應的LT值。 5、將LT送到燈的接口上顯示。 |
led1()到led7()是怎么寫的? |
robinsonlin 發表于 2022-8-20 13:05 你好,老師,抱歉,這是自己改過的程序,最早的程序,有個自++,一個按鍵按一次,變量加一次,另外一個按鍵按一次,變量減一次,主程序通過變量值判斷來燈閃爍的。由于程序沒有成功,看了一本改成現在這樣,目的只是控制兩個燈,可惜兩個燈都不成功。 |
難道是delay()時間不對? |
兩個按鍵控制8個燈? 2個按鍵,只有4種狀態吧,沒弄明白你是如何實現的。 如果不是通過狀態來控制,那就是通過按鍵觸發的時長來控制,51的速度和 STM32的速度是完全不同的,如果用delay來約束,恐怕不行。 |