完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*
按键pd5控制数码管pb0-pb2,pb8.pb9,pb5-pb7 */ #include "STM32f10x.h" void Delay (uint32_t nCount) { for(;nCount!=0;nCount--); } GPIO_InitTypeDef GPIO_InitStructure; int main(void) { unsigned char a=0; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //初始化GPIOB时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9); //将GPIOF.6~9复位,关掉LED灯 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //初始化GPIOD时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //引脚设置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //上拉输入 GPIO_Init(GPIOD, &GPIO_InitStructure); while (1) { //GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10); if(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5)) //发现按键KEY被按下 { Delay(0xfff); //延时消斗 if(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5))//再次检测按键是否仍然被按下 { while(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5));//等待按键被放开 ++a; if(a==11) a=1; if(a==1) { GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); //0 GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_5); } if(a==2) { GPIO_ResetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2); //1 GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); } if(a==3) { GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_6 ); //2 GPIO_SetBits(GPIOB,GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_7); } if(a==4) { GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_5|GPIO_Pin_7); //3 GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_6); } if(a==5) { GPIO_ResetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_5|GPIO_Pin_6); //4 GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_7); } if(a==6) { GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_5|GPIO_Pin_6); //5 GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_9|GPIO_Pin_7); } if(a==7) { GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_7); //6 GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_5|GPIO_Pin_6); } if(a==8) { GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2); //7 GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); } if(a==9) { GPIO_SetBits(GPIOB,GPIO_Pin_7); //8 GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_5|GPIO_Pin_6); } if(a==10) { GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_7); //9 GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_5|GPIO_Pin_6); } } } } } /*********************************************** 按键控制流水灯 按键pd5控制pb0灯 ********************************** / #include "stm32f10x.h" void Delay(unsigned int i) { unsigned int j; for(;i>0;i--) for(j=0;j<1000;j++); } void Key_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//开启按键S4端口(PD5)的时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init(GPIOD, &GPIO_InitStructure); // PD5这个引脚设置为上拉输入 } void Led_GIPO_Confing(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //LED0-->PB.0端口配置(对应我们的学习板是D4那个LED发光二级管) GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.0 // GPIO_SetBits(GPIOB,GPIO_Pin_0); } int main(void) { Key_GPIO_Config(); Led_GIPO_Confing(); while(1) { if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5)==0 ) //检测一下按键是否按下 { Delay(1000);// 延时消抖 if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5)==0 ) { while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5)==0); //等待按键释放 GPIO_WriteBit(GPIOB, GPIO_Pin_0, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_0))));//LED0反转 } } } } */ |
|
相关推荐
1个回答
|
|
非常感谢楼主分享,其实楼主在大型项目中,最好不要在while循环中写太多的延时函数,楼主完全可以使用中断机制+状态机来识别按键是否按下,这样对其他程序运行的实时性干扰较小
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1187 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1122 浏览 2 评论
2223 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1311 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1735 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 14:10 , Processed in 0.519226 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号