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