单片机程序很多都是与硬件关系紧密的,我们在设计程序时,要尽量把与硬件相关的程序安排在少数函数中,这样可使程序移植、修改更方便。设计硬件无关化程序的主要思路是设计一个中转内存,所有要输入/输出的量,都先存入中转内存,然后再由另一个函数从中转内存里输出/输入数据。下面我们就来讲一下常见模块的硬件无关化程序设计。
(1)按键硬件无关化程序。
按键模块可分为按键扫描程序、按键缓冲区、按键应用程序三个部分。其中按键扫描程序与硬件高度关联。按键操作有时操作很快,有时操作很慢,根据这一特点,可以把按键缓冲区设计成环形缓冲区。如图1-4所示。
图1-4 按键模块程序结构图
按键扫描程序负责键值读取、去抖动、存储键值等,然后把键值填入缓冲区中,按键程序功能就完成了,通常把按键扫描程序放在定时任务中执行;按键应用程序只从缓冲区中读取键值,然后执行程序,与硬件关系不密切。缓冲区可以根据应用特点来设置大小。采用这一结构后,可以随时用程序模拟按键(用keyinput函数把键值写入缓冲区),实现虚拟按键功能。按键硬件无关化程序结构如图1-5所示。
(2)显示模块硬件无关化程序。
显示模块主要有LCD1602、LCD12864、TFT型显示器,其中前两种显示器的显示内容少,一般用在内存少的单片机上,TFT显示器的显示内容丰富,一般用于单片机内部内存大的场合。在显示程序设计方面,显示程序一般分为显示驱动程序、显示缓冲区、GUI函数库等。(www.xing528.com)
图1-5 按键硬件无关化程序结构
在用LCD1602的场合,显示器可以显示32个字符。我们通常可以在内存中设置32B的缓冲区,GUI函数只把显示内容写入缓冲区即可,显示驱动程序再把缓冲区内容写入LCD,显示驱动程序可以由定时器中断服务程序调用,只要以10 Hz以上的频率更新,基本上就可以做到实时显示。
(3)ADC模块硬件无关化程序。
在用ADC模块采集数据时,为了把数据与ADC采集程序分开,可以把此程序分为ADC采集、数据缓冲、数据处理三个部分。ADC采集程序与具体的ADC硬件相关,采集好的数据存入数据缓冲区即完成任务。数据缓冲区总是存储采集到的数据,并用标志位表明数据是否有效。数据处理程序只负责对缓冲区的数据进行处理。
总之,各种模块都可以按这样的方式进行分块处理,尽可能将硬件相关程序集中到驱动程序部分,以提高程序的适应性、复用性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。