ShortDelay();

//键盘扫描,有键按下执行相应操作

KeyScan();

}

}

下面的工作就是要写相应的处理函数了:

首先是两个延时函数:

voidShortDelay()

{

uchara=100;

while(a--);

}

voidLongDelay()

{

inta=5000;

while(a--);

}

初始化函数:

voidInital()

{

dula=0;

wela=0;

time=0;

EA=1;

ET0=1;//开定时器0中断

TMOD=0x01;

TH0=0xdc;

TL0=0x01;//装载初值,计时方式1

Clear=1;

Stop=1;

ReStart=1;//按键接口管脚输出高电平

}

在数码管上显示时间的函数:

voidDisplay(ucharshimiao,uchargemiao,ucharbaiwei,ucharshiwei)

{

//输出秒十位

wela=1;

P0=0xfb;

wela=0;

P0=0xff;

dula=1;

P0=table[shimiao];

dula=0;

ShortDelay();

//输出秒个位

wela=1;

P0=0xf7;

wela=0;

P0=0xff;

dula=1;

P0=table[gemiao];

dula=0;

ShortDelay();

wela=1;

P0=0xef;

wela=0;

P0=0xff;

dula=1;

P0=table[baiwei];

dula=0;

ShortDelay();

wela=1;

P0=0xdf;

wela=0;

P0=0xff;

dula=1;

P0=table[shiwei];

dula=0;

ShortDelay();

}

键盘扫描函数:

voidKeyScan()

{

if(Clear==0)

{

LongDelay();//消抖

if(Clear==0)//确实是被按下

{

//Dosomthing

Clc();

}

}

//Stop和ReStart检测方法相同

if(Stop==0)

{

LongDelay();

if(Stop==0)

{

//Dosomthing

StopTimer();

}

}

if(ReStart==0)

{

LongDelay();

if(ReStart==0)

{

//Dosomthing

ReStartTimer();

}

}

}

最后是3个按键按下后的处理函数:

voidClc()

{

TR0=0;//计时暂时停止

time=0;//时间归零

Display(0,0,0,0);//显示0000

ShortDelay();

}

voidStopTimer()

{

//计时暂时停止,仅此而已

TR0=0;

}

voidReStartTimer()

{

//计时重新开始,仅此而已

TR0=1;

}

来源;21ic

关于控制,MCU就介绍完了,您有什么想法可以联系小编。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查