STM32 有关中断函数编程建议 OLED显示错误

1.在中断函数中,最好不要执行耗时间过长的代码,中断函数要简短快速。否则主程序会有严重的堵塞。

2.尽量不要在中断函数与主函数调用相同的函数或者操作同一个硬件。

为什么OLED会显示错误

如果在主程序里和中断里都调用OLED。对于外部硬件不像CPU 有现场保护,中断返回后可能会出现问题。

可以在中断里操作变量或者标志位,当中断返回时,再对这个变量进行显示和操作。

例如 对射式红外传感器计次时,只操作变量,然后在OLED显示函数中调用返回CountSensor_Count的函数

uint16_t CountSensor_Get(void)
{
	return CountSensor_Count;
}

void EXTI15_10_IRQHandler(void)
{
	//先判断是不是我们设置的EXTI_14
	if(EXTI_GetITStatus(EXTI_Line14)==SET)
	{ 
		/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)
		{
			CountSensor_Count ++;
		}
		
	}
		//每次中断程序结束要清除标志位
		EXTI_ClearITPendingBit(EXTI_Line14);
		
}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 51单片机OLED显示程序,可以通过以下步骤实现: 1. 首先,需要连接51单片机OLED显示屏。将51单片机的引脚与OLED显示屏的引脚相连,一般包括串行数据线、串行时钟线、复位线和片选线等。根据实际连接方式,在程序中定义各个引脚的端口号。 2. 在程序中引入相关的头文件和库文件,如reg51.h和OLED.h。这些文件包含了定义51单片机寄存器和OLED显示屏相关的函数等。 3. 设置OLED显示屏的初始化参数。通过调用OLED_Init函数来初始化OLED模块,将OLED显示屏设置为工作状态。 4. 在主函数中,编写需要显示的内容。可以使用OLED_ShowString函数显示字符串,也可以通过OLED_ShowNum函数显示数字等。 5. 调用相应的显示函数将内容显示OLED屏幕上。可以使用OLED_Clear函数来清除屏幕内容,然后再通过OLED_ShowString或OLED_ShowNum函数将内容显示出来。 6. 为了使OLED屏幕上的内容保持稳定,可以使用延时函数进行控制。可以通过调用延时函数来设置显示内容的停留时间,并且在每次更新内容后都进行一定的延时,以避免频繁刷新内容导致屏幕闪烁。 7. 最后,添加适当的延时和循环来实现显示内容的循环更新。可以使用while循环来不断刷新OLED屏幕上的内容,或者通过按键等方式触发更新。 总之,51单片机OLED显示程序主要包括初始化OLED模块、编写要显示的内容、调用显示函数并添加适当的延时和循环等步骤。通过这些步骤,可以实现OLED屏幕上内容的显示和更新。 ### 回答2: 51单片机是一种常见的微控制器,它具有广泛的应用领域。使用51单片机编写OLED显示程序有几个步骤。 首先,我们需要连接OLED模块到单片机上。OLED模块通常有一个四线式的串行接口,包括时钟线、数据线和使能线。这些接口将被连接到51单片机的GPIO端口。确保正确地连接了OLED模块和单片机。 接下来,我们需要编写OLED的驱动程序。OLED驱动程序是用来控制OLED显示屏幕的,这样我们就可以向屏幕上显示想要的图形和文字。这个驱动程序可以使用C语言来编写。首先,我们需要定义和初始化所需的引脚和寄存器,然后编写函数来发送命令和数据到OLED屏幕上。 例如,我们可以编写一个发送命令的函数,使用时钟线和数据线向OLED发送指定的命令,如清屏、设置显示位置等。还可以编写一个发送数据的函数,将要显示的图形、文字数据发送到OLED屏幕上。 最后,我们需要编写主程序。主程序会调用之前编写的OLED驱动程序来显示我们想要的内容。可以在主程序中调用发送命令和数据的函数来控制OLED屏幕的显示。例如,我们可以使用主程序来初始化OLED屏幕,然后在屏幕上显示“Hello, World!”。 以上就是使用51单片机编写OLED显示程序的基本步骤。这个程序可以帮助我们控制OLED屏幕,实现自定义的显示效果。当然,具体的程序代码还需要根据具体的需求和OLED模块的规格来进行编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值