if(++i》3)i=0;//变量 i的计数范围 O~3

switch(i)//根据 i的值,点亮4个数码管

{

case 0: PORTA= SEG 7 [cnt% 1O]; PORTC= ACT [i];brea k;

case 1 : PORTA= SEG 7 [(cnt/ 10)% 1O]; PORTC= ACT[i]; break;

case 2: PORTA= SEG 7 [(cnt/ 100)% 10];0x80;PORTC= ACT [i]; break:;

case 3: PORTA= SEG 7 [cnt/ 1000]; PORTC= ACT [i];break;

default: break;

}

}

void timer1_init(void)//定时器 1 初始化子函数{

TCNT1H = OxD8;//1OmS 的定时初值

TCNT1L = Ox F0;

#pragma interrupt_handlef timerl_ovf_isr:9//定时器1 中断服务子函数

void timer 1_ovF-isr(void)

{

TCNT川= OxD8;//重装 1OmS 的定时初值

TCNT1L = Ox F0;

if (++cnt》9999)cnt=0;//计时范围 O~9999 ( 即0-99.99S)

}

#pragma interrupLhandlerintO_isr:2//INTO 中断服务子函数

void into-isr(void)

{

if(cnt《1 0)start_flag=Oxff;// 如果计时末开始,则置启动标志为 0xff

else start_flag=OxOO;//如果已经计时,则置启动标志为 OxOO

void init_devices(void)//芯片的初始化子函数{

Port_init();//端口初始化

timerO_init();//定时器0初始化

timer1_init();//定时器 1 初始化

MCUCR = OxO2;//INTO为下降沿触发

GICR = Ox40;//使能 INTO 中断

TIMSK = OxO5;//使能TO、T1 中断

SREG=Ox80;//使能总中断

}

void sCAN_sl(void)//扫描按键S1 子函数

{

if(S1 ==0)cnt=0;//如果S1 键按下,则清除计时值}

void main(void)//定义主函数

{

init_devices();//芯片的初始化

while(11 //无限循环

{

if(sta rt_flag==0xff)TCCR1 B = OxO2;//如果启动标志为 Oxff,启动定时器 1

if(start_flag== Ox O0){TCCR 1 B = Ox O0; scan_s1 ();}//如果启动标志为 0xOO,

//则关闭定时器 1 再调用

扫描按键S1 的子函数

//无限循环结束

//主函数结束

责任编辑;zl

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