频率可调的方波信号发生器设计及电路
else
{ hz_shu=200; }
T1_over_num=get_T1_over_num(hz_shu);
break;
case 1: if(hz_shu>10)
{ hz_shu=hz_shu-10; } //减10/秒
else
{ hz_shu=1;}
T1_over_num=get_T1_over_num(hz_shu);
break;
}
TR1=1;
}
}
}
}
//-------------------------
main()
{pulse_out=0; //初始化各变量
hz_shu=5;
T1_cnt=0;
state_val=0;
second=0;
sec_over_num=0;
T1_over_num=get_T1_over_num(hz_shu);
//初始化51的寄存器
TMOD=0x20;//用T1计时 8位自动装载定时模式,T0计数p3.4的脉冲数
TH1=0x6; //250微秒溢出一次; 250(256-x)*12/12 -> x=6
TL1=0x6; //200Hz的半周期为2.5毫秒,要溢出中断10次
EA=1; //开中断
ET1=1;
TR1=1; //定时器T1
while(1)
{ key_val=scan_key(); //扫描按键
if (key_val!=key_val_old)
{ //说明有键按下或弹起
key_val_old=key_val;
if (key_val!=255)
{ //说明键按下
state_val=0; //清除连续按键标志
sec_over_num=0;
switch (key_val)
{ case 0: //增1键
hz_shu++;
T1_over_num=get_T1_over_num(hz_shu);
break;
case 1: //减1键
if(hz_shu>=2)
{hz_shu--;}
else
{hz_shu=1;}
T1_over_num=get_T1_over_num(hz_shu);
break;
}
}
else //说明键弹起
{ state_val=0; second=0;
}
}
else //一直按下或弹起
{ if (key_val!=255)
{ state_val=1; //连续按键
}
else
{state_val=0;} //没有按键按下,一直处于弹起状态
}
led_show(); //数码管显示,动态扫描
}
}//----方波发生器-----------------
本文引用地址://m.amcfsurvey.com/article/172701.htm
DIY机械键盘相关社区:机械键盘DIY
评论