我想实现的功能是当按键KEY2按下时,LED2亮(STM32f107开发板),软件运行没错,但是下载后灯不亮
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想实现的功能是当按键KEY2按下时,LED2亮(STM32f107开发板),软件运行没错,但是下载后灯不亮相关的知识,希望对你有一定的参考价值。
#include "stm32f10x.h"
#include <stdio.h>
void Delay(u32 nCount) //通过不断for循环nCount次,达到延时的目的
for(; nCount != 0; nCount--);
LED_init()
RCC->APB2ENR |= RCC_APB2Periph_GPIOD; /* 使能APB2总线的时钟,对GPIO的端口D时钟使能 */
GPIOD->CRL |= 0x00003000; /*** 设置GPIOD的PD3配置为通用推挽模式输出50MHZ ***/
/*******************************/
void Key_init()
RCC->APB2ENR|=RCC_APB2Periph_GPIOB; //使能PORTB时钟
GPIOB->CRH|=0X00000800;
GPIOB->ODR|=0x00000400; //PB10设置成输入上拉模式
/*******************************/
u8 scan_key(void)//扫描函数
GPIOB->IDR=0x0000FFFF;
if((GPIOB->IDR&GPIO_Pin_10)==0x0000FFBF)
return 2;
else
return 0;
/**********************************/
int main(void)
u8 KeyNum = 0;
LED_init(); //LED初始化配置
Key_init(); //初始化控制按键的PA0端口
while (1)
KeyNum=scan_key();
switch(KeyNum)
case 2: GPIOD->BRR = GPIO_Pin_3;break;
default: GPIOD->BSRR = GPIO_Pin_3;break;
RCC->APB2ENR|=RCC_APB2Periph_GPIOB; //使能PORTB时钟
GPIOB->CRH|=0X00000800;
GPIOB->ODR|=0x00000400; //PB10设置成输入上拉模式
这个函数中的GPIOB->CRH|=0X00000800; 这句话有问题。我猜想你本来是想把Bit11-8设置成1000,但实际效果并不是,
因为执行该语句只是把Bit11位置1,只是如此。改正方法是:先将Bit11-8清零,再设置。应该这样写: GPIOB->CRH &= 0XFFFFF0FF;GPIOB->CRH |= 0X00000800;或者你就直接赋值GPIOB->CRH=0X00000800; 有些寄存器的复位值并不是0x00000000,所以要注意一下这方面。 参考技术A 不需要这么麻烦的程序吧,我去。。。。
程序貌似没错,你查看下硬件吧,有米有上拉电阻,延时时间够长不,追问
程序是有点长,单个按键的话,可以不写延迟函数。(我是为了再增添其他三个按键才这么写的)我觉得问题是不是出在scan_key这个函数那个地方?就是换成简单的,也是每次都在扫描函数那儿出错(软件可以通过,就是下载下来后在板子上没效果),如果让你写的话,你会怎么写按键扫描那块?注:KEY1-4四个按键分别与PC4、PB10、PC13和PA0四个GPIO管脚连接,现在我只使用按键2
追答我去,我2了,刚没仔细看,你的break是会跳出循环的,你改成continue试试
追问不好意思,我试过了,还是不行
参考技术B e bu zhi dao lai zuo ren wu you cuo me ?追问为什么不打汉字呢?我听不懂
51单片机按键控制LED灯状态
前言
今天更新按键模块的编程
先看电路图
可以看到,K1,K2,K3未按下时,KEY1,KEY2,KEY3三个接口处与vcc联通,处于高电平状态。
当K1,K2,K3按下时,vcc与大地接通,KEY1,KEY2,KEY3处都为低电平。
综上可知,按下开关接口处为0,松开开关为1。
我们的目的是要用开k1,k2,k3分别控制LED灯L0,L1,L2的亮灭,按下开关对应的灯亮起,松开开关灯灭。
我们再看下LED的电路图
LED的详细介绍再上一篇文章中,这里就不过多介绍了。
下面看一下代码:
#include <STC15F2K60S2.H>
sbit LedSel=P2^3;
sbit Key1=P3^2;
sbit Key2=P3^3;
sbit Key3=P1^7;
void Init()
P2M0=0x08;
P2M1=0x00;
P0M0=0xff;
P0M1=0x00;
LedSel=1;
P0=0;
void main()
Init();
while(1)
if(Key1==0)
P0=0x01;
else P0=0;
if(Key2==0)
P0=0x02;
else P0=0;
if(Key3==0)
P0 = 0x04;
else P0=0;
代码也没什么晦涩难懂的地方,就是要注意一定要写else,不然灯亮了之后不会熄灭了。
下面是代码跑出来的效果:
VID_20220719_093750
后记
按键模块就到此为止了,如果有疑问欢迎来交流
未完待续······
以上是关于我想实现的功能是当按键KEY2按下时,LED2亮(STM32f107开发板),软件运行没错,但是下载后灯不亮的主要内容,如果未能解决你的问题,请参考以下文章