c/c++ 哔(beep)

本文展示了一个简单的C语言程序,该程序使用printf函数打印转义字符‘/x7’。此示例有助于理解如何在C语言中处理转义序列。

stm32单片机最小系统完成5. 作业 利用外部中断实现实时控制系统设计,设计要求如下: //2. 产生中断翻转LED状态 if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7) == 1) { GPIO_ResetBits(GPIOB, GPIO_Pin_7); } if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7) == 0) { GPIO_SetBits(GPIOB, GPIO_Pin_7); } //等待按键松开 while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == 0); //3. 清除中断标志位 EXTI_ClearITPendingBit(EXTI_Line2); } } //SW1(PA2) 开启 流水灯 //SW2(PA13) 开启 蜂鸣器 //SW3(PA6) 关闭 流水灯 //SW4(PA7) 关闭 蜂鸣器 tips: 可以定义一个全局变量,在main函数中判断全局变量的值 在中断处理函数中修改全局变量的值,从而实现控制 禁止使用轮询的方式来设计程序!!! int led_flag = 0; int beep_flag = 0; int main() { //1. 相关的初始化 //2. 实际功能 while(1) { if(led_flag == 1) { lsd(); } if(beep_flag == 1) { fmq(); } } }STM32具体代码:#include "stm32f10x.h" // 定义全局变量用于控制LED和蜂鸣器状态 int led_flag = 0; int beep_flag = 0; // 延时函数 void delay_ms(uint32_t time) { uint32_t i, j; for(i = 0; i < time; i++) for(j = 0; j < 7200; j++); } // 流水灯函数 void lsd(void) { GPIO_ResetBits(GPIOB, GPIO_Pin_7); delay_ms(100); GPIO_SetBits(GPIOB, GPIO_Pin_7); delay_ms(100); } // 蜂鸣器函数 void fmq(void) { GPIO_SetBits(GPIOB, GPIO_Pin_8); // 开启蜂鸣器 delay_ms(100); GPIO_ResetBits(GPIOB, GPIO_Pin_8); delay_ms(100); } // 初始化GPIO和外部中断 void EXTI_Init_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; // 使能GPIOA、GPIOB时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); // 配置LED(PB7)和蜂鸣器(PB8)为推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // 配置按键为上拉输入(PA2、PA6、PA7、PA13) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置EXTI线2(PA2) GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2); EXTI_InitStructure.EXTI_Line = EXTI_Line2; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); // 配置EXTI线13(PA13) GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource13); EXTI_InitStructure.EXTI_Line = EXTI_Line13; EXTI_Init(&EXTI_InitStructure); // 配置EXTI线6(PA6) GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6); EXTI_InitStructure.EXTI_Line = EXTI_Line6; EXTI_Init(&EXTI_InitStructure); // 配置EXTI线7(PA7) GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource7); EXTI_InitStructure.EXTI_Line = EXTI_Line7; EXTI_Init(&EXTI_InitStructure); // 配置NVIC NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 配置EXTI2中断 NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_Init(&NVIC_InitStructure); // 配置EXTI13中断 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_Init(&NVIC_InitStructure); // 配置EXTI6和EXTI7中断(共用EXTI9_5_IRQn) NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_Init(&NVIC_InitStructure); } // EXTI2中断服务函数(对应PA2 - 开启流水灯) void EXTI2_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line2) != RESET) { led_flag = 1; EXTI_ClearITPendingBit(EXTI_Line2); } } // EXTI15_10中断服务函数(对应PA13 - 开启蜂鸣器) void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line13) != RESET) { beep_flag = 1; EXTI_ClearITPendingBit(EXTI_Line13); } } // EXTI9_5中断服务函数(对应PA6和PA7) void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line6) != RESET) { led_flag = 0; EXTI_ClearITPendingBit(EXTI_Line6); } if(EXTI_GetITStatus(EXTI_Line7) != RESET) { beep_flag = 0; EXTI_ClearITPendingBit(EXTI_Line7); } } int main(void) { // 初始化 EXTI_Init_Config(); // 主循环 while (1) { if (led_flag == 1) { lsd(); // 流水灯 } if (beep_flag == 1) { fmq(); // 蜂鸣器 } } } 出现错误:Not enough information to list image symbols.Not enough information to list load addresses in the image map.Finished: 2 information, 0 warning and 1 error messages.“.\Objects\Templ.axf” - 1 Error(s), 0 Warning(s).修正代码
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值