完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、按键电路
在系统中SW1按键与STM32F103的PB3引脚相连接,SW2按键与STM32F103的PA15引脚相连接。 2、PB3、PA15引脚配置程序 void KEY_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); } 3、PB3、PA15外部IO中断配置程序 void Exti_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15); GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource3); EXTI_InitStructure.EXTI_Line = EXTI_Line3|EXTI_Line15; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } 4、PB3、PA15外部IO中断服务程序 unsigned char bz=0; //PB3的中断服务程序 void EXTI3_IRQHandler(void)//按键1,右边的,控制温度 { if (EXTI_GetITStatus(EXTI_Line3) != RESET) { EXTI_ClearITPendingBit(EXTI_Line3); bz=0;//温度标志 } } //PA15的中断服务程序 void EXTI15_10_IRQHandler(void)//按键2,左边的,控制湿度 { if (EXTI_GetITStatus(EXTI_Line15) != RESET) { EXTI_ClearITPendingBit(EXTI_Line15); bz=1;//湿度标志 } } 注:上述所有程序全部编写在exit.c文件中。 5 按键控制DHT11显示温度和湿度的主程序 在main.c中编写如下代码: //功能概要:STM32f103C8 滴达定时中断和温湿度DHT11传感器 //通过按键可以控制显示温度还是显示湿度 //PB12 LED灯 工作指示灯 2秒周期 //PC13 DHT11 DATA引脚 //数码管接口,TM1650 //SCL PB10 //SDA PB11 */ //两个按键 通过中断实现 //PA15 SW2 //PB3 SW1 //SysTick中断在stm32f10x_it.c中 #include "gpio.h" #include "DHT11.h" #include "exti.h" #include "delay.h" #include "systick.h" #include "I2C.h" #include "tm1650.h" extern unsigned char bz; void disp(u8 i,u8 flage) { u8 gw=0;//个位 u8 sw=0;//十位 u8 bw=0;//百位 u8 qw=0;//百位 gw=i%10; sw=(i/10)%10; bw=(i/100)%10; qw=(i/1000)%10; if(qw==0) { TM1650_Set(0x68,0); }else{ TM1650_Set(0x68,CODE[qw]); } if(bw==0 && qw==0) { TM1650_Set(0x6A,0); }else{ TM1650_Set(0x6A,CODE[bw]); } if(sw==0 && bw==0 && qw==0) { TM1650_Set(0x6C,0); }else{ TM1650_Set(0x6C,CODE[sw]); } TM1650_Set(0x6E,CODE[gw]); //最右边 if(flage==0) { TM1650_Set(0x68,CODE[1]); //最左边 温度 }else{ TM1650_Set(0x68,CODE[2]); //最左边 湿度 } } int main(void) { u16 AD_value=0; u8 dht_dat[5]={0,0,0,0,0}; u8 tm_dt=0x01;//亮度 u8 i=0; SystemInit(); SYSTICK_Init(); Exti_Config();//初始化中断配置,必须放在前面 Nvic_Config();//初始化中断向量,必须放在前面 LED_GPIO_Config(); KEY_GPIO_Config(); I2C_Config(); Delay_ms(50); TM1650_Set(0x48,tm_dt); //初始化为5级灰度,开显示 while(1) { Delay_ms(500); if (i==1) { i=0; LED1_OFF; }else{ i=1; LED1_ON; } read_temp(dht_dat); if(bz==0) { AD_value=dht_dat[2]; //温度 }else{ AD_value=dht_dat[0]; //湿度 } disp(AD_value,bz); } } 6、其它程序 系统时钟配置、嘀哒时钟配置、LED配置、DHT11引脚配置、TM650引脚配置等其它程序请自行参考本博客相应的文章。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1883 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1661 浏览 1 评论
1146 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
762 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
790浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
614浏览 3评论
631浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
593浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-13 01:44 , Processed in 0.440263 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号