从单片机基础到程序框架(全集 2019pdf版).pdf - 第657页

KeyScan( ); //按键底层的驱动扫 描函数 DisplayS can(); //数码管 底层的驱动 扫描函数 if(1==vG u8ScanTimer Flag&&vGu1 6ScanTimerC nt>0) { vGu16Sca nTimerCnt-- ; //递减式的软 件定时器 } if(1==vG u8BlinkTime rFlag&&vGu 16BlinkTime rCnt&gt…

100%1 / 836
}
}
void VoiceScan(void) //蜂鸣器的驱动函数
{
static unsigned char Su8Lock=0;
if(1==vGu8BeepTimerFlag&&vGu16BeepTimerCnt>0)
{
if(0==Su8Lock)
{
Su8Lock=1;
BeepOpen();
}
else
{
vGu16BeepTimerCnt--;
if(0==vGu16BeepTimerCnt)
{
Su8Lock=0;
BeepClose();
}
}
}
}
void BeepOpen(void)
{
P3_4=0;
}
void BeepClose(void)
{
P3_4=1;
}
void T0_time() interrupt 1
{
VoiceScan(); //蜂鸣器的驱动函数
KeyScan(); //按键底层的驱动扫描函数
DisplayScan(); //数码管底层的驱动扫描函数
if(1==vGu8ScanTimerFlag&&vGu16ScanTimerCnt>0)
{
vGu16ScanTimerCnt--; //递减式的软件定时器
}
if(1==vGu8BlinkTimerFlag&&vGu16BlinkTimerCnt>0) //数码管闪烁跳动的定时器
{
vGu16BlinkTimerCnt--; //递减式的软件定时器
}
TH0=0xfc;
TL0=0x66;
}
void SystemInitial(void)
{
P0=0x00;
P1_0=1;
P1_1=1;
P1_2=1;
P1_3=1;
TMOD=0x01;
TH0=0xfc;
TL0=0x66;
EA=1;
ET0=1;
TR0=1;
}
void Delay(unsigned long u32DelayTime)
{
for(;u32DelayTime>0;u32DelayTime--);
}
void PeripheralInitial(void)
{
}
第一百一十九节: 一个完整的人机界面的程序框架的脉络
【119.1 一个完整的人机界面的程序框架的脉络。
前面两节例子告诉我们一个完整的人机界面的程序框架包含两个要素,分别是“支点”“更新”“支
点”包括“窗口选择”和“局部选择”更新”包括“整屏更新”和“局部更新”
“支点”的作用是把显示函数与按键函数完美无缝的关联起来两个函数同样的“支点促使同样的“话
语体系”,让“所见即所得”实时同步,确保按键操作的数据就是当前显示被选中的数据
“静态数据”与“动态数据”的概念。被窗口显示的数据通常有两种:一种是静态数据,比如装饰门面
的数据,只能显示不能更改的数据,以及图片图标这类数据另外一种是动态数据,这种数据在窗口显示上
是活动的可编辑的,是需要经常修改的,往往也是系统核心的数据,需要保存或者需要跟某些关键运动密切
相关的数据。比如,在前面章节中,数码管要显示三个窗口“1-XX,“2-YY”,3-ZZ”其中“1-”“2-”
“3-”属于静态数据,它们是起“装饰”作用的。“XX”“YY”“ZZ”则是动态数据,们是可编辑的,
也是单片机系统内部核心的数据。
“整屏更新”与“局部更新”的分工“整屏更新”主要负责在切换新窗口时,把“静态数据”一次
显示到当前窗口。而“局部更新”主要负责在当前窗口下显示“动态数据”
下面,我把一个完整的人机界面的程序框架的脉络勾勒出来,让大家有一个整体的观感,这种人机界面
的程序框架放之四海而皆准,我已把它应用在各种数码管单色液晶屏彩屏电脑上位机等项目上假设
某个项目中只有两个”窗口”只有两个“局部”,程序框架的脉络如下:
显示部分:
void DisplayTask(void) //数码管显示的上层任务函
{
switch(Gu8Wd) //以“窗口选择”Gu8Wd 为支点
{
case 1:
Wd1(); //窗口 1 显示函数
break;
case 2:
Wd2(); //窗口 2 显示函数
break;
}
}
void Wd1(void) //窗口 1 显示函数
{
if(1==Gu8WdUpdate) //整屏更新
{
Gu8WdUpdate=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
...... //此处省略 N 行代码,用来显示静态的数据,比如图片图标,或者装饰的数据