电器终端控制板中显示单元扫描驱动方法
技术领域
本发明涉及电器终端控制板中用户数据存储及显示单元驱动方法。
背景技术
电器终端控制板常常需要保存一些用户数据,比如说控制目标温度、工作模式等等。早期都用EEPROM来储存用户数据,EEPROM具有存储速度快,重复擦写次数多(高达100万次)的优点,但是价格昂贵。随着单片机工艺技术的发展,单片机自带的存储空间(往往称为闪存"Flash Memory",以下简称flash)越来越大,而且制作成本低廉。Flash的缺点是擦除速度慢,重复擦写的次数少,绝大多数都在1万次以下。因为flash空间大,这恰恰弥补擦写次数少的问题;比如储存把2byte的数据存储到2k的空间里,就能写1000万次(2k*1万/2)。由于flash便宜,很多设计工程师为了节约成本开始用flash来做用户数据存储。
但是在使用flash来做用户数据存储过程中,也反映出不少问题,设计出来的产品也偶然遭到用户的投诉,其主要原因是用户数据存储在flash过程中出现显示单元(数码管或者显示LED)闪烁问题。从生产成本或是设计工程师使用习惯考虑,由于单片机中I/O口数量有限,电气终端的数码管或者LED显示管等现实单元的驱动通常做成扫描输出。而为了使得显示单元稳定显示,即保持显示扫描输出频率一致,设计工程师通常把显示扫描操作放在时钟中断函数中。值得一提的是,现在使用的很多单片机,如现代的类51单片机,在使用flash来存储用户数据过程中是屏蔽中断的。因此,设计工程师设计的程序在使用flash对用户数据进行存储过程中会屏蔽中断(必须要屏蔽,要不然CP指针会“飞车”),从而使得显示扫描输出频率不一致。直观的现象为数码管或者显示LED闪烁。
目前来看,现有解决此类问题的方法是增加外部存储单元EEPROM,或者是采用直接驱动LED的方式,或者是增加驱动芯片来驱动LED;这些方式不仅仅增加了生产成本,更是增加了硬件和软件的设计难度。
发明内容
本发明所要解决的技术问题是针对上述现有技术提供一种电器终端控制板中用户数据存储及显示单元驱动方法,该方法解决了因使用flash存储用户数据过程中屏蔽中断,使得扫描输出频率不一致而造成的显示单元的闪烁问题。
本发明解决上述技术问题所采用的技术方案为:1、一种电器终端控制板中显示单元扫描驱动方法,其中电器终端控制板包括显示单元,和对显示单元进行扫描驱动的单片机,该单片机中自带flash存储器,其中显示单元具有m路扫描驱动口,显示单元的m路扫描驱动口分别与单片机的m个IO口连接,单片机通过输出固定的显示扫描周期对显示单元进行驱动扫描,其特征在于:所述单片机输出固定的显示扫描周期T为:T=(m*Ts+Ti),其中Ts为显示单元中单路扫描驱动口的扫描时间,Ti为扫描空闲时间,而扫描空闲时间设定为用户使用单片机自带的flash存储器进行用户数据存储的执行时间,然后在在显示扫描空闲状态时,执行flash用户数据存储操作,将用户数据存储至单片机自带的flash存储器内。
作为改进,使用示波器捕捉用户使用单片机自带的flash存储器进行用户数据存储的执行时间,具体为:在单片机上电初始化时对单片机某一特定的IO口先输出低电平“0”,在进入用户数据存储时,使该IO口输出高电平“1”,在用户数据存储结束时,将该IO口恢复输出低电平“0”,然后用示波器捕捉该IO口高电平并测试高电平“1”的时间,这个时间就是用户使用单片机自带的flash存储器进行用户数据存储的执行时间。
再改进,其特征在于:显示扫描的占空比D=Ts/T,根据Ti,选择的Ts需保证1/D>57赫兹。
再改进,设事件寄存器为LED_COM,设TCLK为时钟中断周期,Ti为扫描空闲时间,Ts为显示单元中单路扫描驱动口的扫描时间,bdisplay_idle为显示扫描空闲状态标志,bsave和bsave1为用户数据保存标志,bsave和bsave1的初始值均为false,当单片机需要将用户数据存储进单片机自带flash存储器时,执行flash用户数据存储操作,并将bsave赋值为ture;COM1~COMm为显示单元的m路扫描驱动口;
所述单片机的显示定时中断流程为:
步骤1、清除中断标志,
步骤2、令LED_COM++;
步骤3、判断LED_COM是否大于等于m+1,如是,令LED_COM=0,执行步骤4,如不是,执行步骤4;
步骤4、置COM1~COMm为无效输出;
步骤5、执行事件选择:
如LED_COM=0,令TCLK=Ts,将COM1对应的显示信息输出,置COM1为有效输出;
如LED_COM=1,将COM2对应的显示信息输出,置COM2为有效输出;
如LED_COM=2,将COM3对应的显示信息输出,置COM3为有效输出;
如LED_COM=3,将COM4对应的显示信息输出,置COM4为有效输出;
……
如LED_COM=m-1,将COMm对应的显示信息输出,置COMm为有效输出;
如LED_COM=m,令TCLK=Ti,判断bsave1==true?如是,令bdisplay_idle==true,然后结束,如不是,结束;
所述单片机的flash用户数据存储函数的运行流程为:
步骤a、判断bsave==true?如是,执行步骤b,如不是,结束;
步骤b、令bsave=false,bsave1=true,bdisplay_idle=false;
步骤c、判断bdisplay_idle==false?如是,返回步骤c,等待显示空闲时间的到来如不是,执行步骤d;
步骤d、令bsave1=false,bdisplay_idle=false;
步骤e、执行中断禁止指令DI;
步骤f、将用户数据存储至单片机自带的flash存储器内;
步骤g、执行中断开放指令EI;
步骤h、结束。
与现有技术相比,本发明的优点在于:在使用flash进行用户数据存储过程中即使屏蔽中断,也能保持显示扫描输出频率一致,从而达到稳定的扫描频率,解决了因flash对用户数据进行存储过程中屏蔽中断,使得扫描输出频率不一致而所造成的LED闪烁问题,而且与增加外部存储单元EEPROM,或者是采用直接驱动LED的方式,或者是增加驱动芯片来驱动LED相比,本发明方案不仅仅大幅度降低了生产成本,而且降低了硬件设计难度,可靠性也有了一定提升。
附图说明
图1为本发明实施例中4路扫描时显示扫描周期T示意图;
图2为本发明实施例中显示定时中断流程图;
图3为本发明实施例中flash用户数据存储函数的运行流程图。
具体实施方式
以下结合附图实施例对本发明作进一步详细描述。
本发明提供的电器终端控制板中显示单元扫描驱动方法,其中电器终端控制板包括显示单元,和对显示单元进行扫描驱动的单片机,该单片机中自带flash存储器,其中显示单元具有m路扫描驱动口,显示单元的m路扫描驱动口分别与单片机的m个IO口连接,单片机通过输出固定的显示扫描周期对显示单元进行驱动扫描,而所述单片机输出固定的显示扫描周期T为:T=(m*Ts+Ti),以4路扫描驱动口为例,T=(4*Ts+Ti),参见图1所示,其中Ts为显示单元中单路扫描驱动口的扫描时间,Ti为扫描空闲时间,而扫描空闲时间设定为用户使用单片机自带的flash存储器进行用户数据存储的执行时间,然后在在显示扫描空闲状态时,执行flash用户数据存储操作,将用户数据存储至单片机自带的flash存储器内。
存储数据量不同和不同单片机flash执行条件差异可能会导致flash用户数据存储时间发生变化,如果不根据存储时间而进行此类设计方案,就有显示闪烁的风险,Ti时间的捕捉只能在调试中进行(调试完成后屏蔽该段代码),可以使用示波器捕捉用户使用单片机自带的flash存储器进行用户数据存储的执行时间,具体为:在单片机上电初始化时对单片机某一特定的IO口先输出低电平“0”,在进入用户数据存储时,使该IO口输出高电平“1”,在用户数据存储结束时,将该IO口恢复输出低电平“0”,然后用示波器捕捉该IO口高电平并测试高电平“1”的时间,这个时间就是用户使用单片机自带的flash存储器进行用户数据存储的执行时间。
考虑到显示单元的亮度要求以及功耗大小问题,显示扫描的占空比D的选择尤为重要,设计工程师可以根据所需要求自行选择合适的TS,使得到更理想的占空比D和扫描周期T,根据图像在人眼睛的暂留效果,根据Ti,选择的Ts需保证1/D>57赫兹。
设事件寄存器为LED_COM,设TCLK为时钟中断周期,Ti为扫描空闲时间,Ts为显示单元中单路扫描驱动口的扫描时间,bdisplay_idle为显示扫描空闲状态标志,bsave和bsave1为用户数据保存标志,bsave和bsave1的初始值均为false,当单片机需要将用户数据存储进单片机自带flash存储器时,执行flash用户数据存储操作,并将bsave赋值为ture;COM1~COMm为显示单元的m路扫描驱动口;
所述单片机的显示定时中断流程为:参见图2所示
步骤1、清除中断标志,
步骤2、令LED_COM++;
步骤3、判断LED_COM是否大于等于m+1,如是,令LED_COM=0,执行步骤4,如不是,执行步骤4;
步骤4、置COM1~COMm为无效输出;
步骤5、执行事件选择:
如LED_COM=0,令TCLK=Ts,将COM1对应的显示信息输出,置COM1为有效输出;
如LED_COM=1,将COM2对应的显示信息输出,置COM2为有效输出;
如LED_COM=2,将COM3对应的显示信息输出,置COM3为有效输出;
如LED_COM=3,将COM4对应的显示信息输出,置COM4为有效输出;
……
如LED_COM=m-1,将COMm对应的显示信息输出,置COMm为有效输出;
如LED_COM=m,令TCLK=Ti,判断bsave1==true?如是,令bdisplay_idle==true,然后结束,如不是,结束;
所述单片机的flash用户数据存储函数的运行流程为:参见图3所示
步骤a、判断bsave==true?如是,执行步骤b,如不是,结束;
步骤b、令bsave=false,bsave1=true,bdisplay_idle=false;
步骤c、判断bdisplay_idle==false?如是,返回步骤c,如不是,执行步骤d;
步骤d、令bsave1=false,bdisplay_idle=false;
步骤e、执行中断禁止指令DI;
步骤f、将用户数据存储至单片机自带的flash存储器内;
步骤g、执行中断开放指令EI;
步骤h、结束。