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就介绍完了,您有什么想法可以联系小编。