数目管显示程序下的串口发送注意事项
作者:互联网
数码管显示原理,简单的讲就是类似PWM调光调电流,快速的扫描多个段数码管,利用人眼会残留影像的原理,显示完整静态的画面。通俗讲是依次显示A,B,C,B管,而不是同一时间显示,保证显示各管的时间基本相同,间隔相同,帧画面频率在75hz以上,人眼基本看不到抖动。
程序流程总时间不超过,1/75 S,才能保证刷新频率高于对帧画面频率的要求,实时上对数码管的操作是一瞬间的事情,在数码管保持期间可以运行主程序,这就需要保证,不会有不可打断的长时间进程出现在程序运行中,比如uart发送或者接收,按键检测等。
尽可能的提高主程序运行效率,减少不必要的延迟。
if(swDisplay == 0)
{
Sys_Scan(); //exKeyValueFlag存放在该变量中 10ms 1次
if(enTran)
{
TrUart(trIntruct,trCdata);
enTran = 0;
}
}
else
{
if(runState)
{
//显示数码管
if(timCountMin > 5) //总体20ms刷新完成
{
timCountMin = 0;
displayFlash();
}
}
}其他程序;
把长进程与段扫描拆时序上分开。串口发送做成中断的方式。//串口里执行里中断 //定时扫描发送使能位触发串口发送
if(TI)
{
TI = 0;
uartTx0Flg = 1;
trStep++;
if(trStep == 1)
{
trData = 0xaa;
SBUF = trData;
}
else if(trStep == 2)
{
SBUF = trIntruct;
}
else if(trStep == 3)
{
SBUF = trCdata;
}
else if(trStep == 4)
{
trData = 0xfa;
SBUF = trData;
}
else if(trStep == 5)
{
trStep = 0;
}//需要触发中断直接调用即可
void TrUart(unsigned char instruct,unsigned char cdata)
{
trIntruct = instruct,
trCdata = cdata;
trData = 0x55;
SBUF = trData;
}优点是,实时性好,不影响主进程运行。
项目合作,吹牛扯淡,交朋友,请联系18665321219
标签:串口,SBUF,else,发送,数码管,注意事项,trData,trStep 来源: https://www.cnblogs.com/logicexpression/p/13512970.html