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来约束,恐怕不行。 |