数字选频电路模块原理图例程及PCB设计资料.docx
《数字选频电路模块原理图例程及PCB设计资料.docx》由会员分享,可在线阅读,更多相关《数字选频电路模块原理图例程及PCB设计资料.docx(21页珍藏版)》请在冰豆网上搜索。
![数字选频电路模块原理图例程及PCB设计资料.docx](https://file1.bdocx.com/fileroot1/2023-8/15/22ecb93b-aa3a-4526-a454-9d5317b503c2/22ecb93b-aa3a-4526-a454-9d5317b503c21.gif)
数字选频电路模块原理图例程及PCB设计资料
数字选频电路模块利用手册
【简要说明】
一、 尺寸:
长114mmX宽72mmX高18mm二、 要紧芯片:
单片机,数码管、稳压器、继电器三、 工作电压:
6V至40V,功耗小于1W四、 特点:
一、具有稳压电路,输入电压广,具有电源指示灯。
二、具有6位数码管显示。
3、具有按键调剂功能,设置参数带经历功能。
4、最大检测频率100KHZ。
五、双路继电器输出。
六、继电器最大操纵负载300W。
7、单片机编程,客户能够自己更改,提供源代码 八、有无信号输出,具有LED灯指示。
九、端子采纳螺旋压接端子 10、工作温度-40度至+70度
1一、工作湿度40%~80%RH
1二、具有电源防接反爱惜13、具有续流爱惜
14、具有电磁抗干扰能力
1五、板子稳固工作靠得住1六、板子可安装在DIN导轨上面
利用说明:
【标注说明】
【功能描述】
【原理图】
【PCB图】
【元件清单】
【应用举例】
【测试参考程序】
#include""
#include""
#defineucharunsignedchar//宏概念无符号字符型
#defineuintunsignedint//宏概念无符号整型
uinttcnt1=0;//用于刷新数码管
uintqiannum1,bainum1,shinum1,genum1;
ucharqiannum2,bainum2,shinum2,genum2;
ucharqiannum3,bainum3,shinum3,genum3;
codeucharseg7code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码数码管字跟
ucharwei1[3]={0XDf,0XBf,0X7f};//数码管1的位的操纵端
ucharwei2[3]={0XFb,0XF7,0Xef};//数码管2的位的操纵端
ucharabcf[4]={0x88,0x83,0xc6,0xbf};//abc-
ucharabcf1,abcf2;//用于显示特殊字符abc-
uintdispcount=0;//获取霍尔传感器的数据用获取数据
uintlck=0;//获取霍尔传感器的数据用计时一秒用
uintdisp=0;//获取霍尔传感器的数据用显示到数码管用
voidtimer0_1init();//按时配置
voiddisplaynum();//将数字传到数码管上显示
staticucharpresstime=0;//时刻值按键用到的
uintkf0=1;//按键用的标志位
uintkt0=0;//按键用的标志位
voidkeycan();//按键
voidkeyflag();//按键终止挪用,按键的建议利用,如此能够减小code,可是触发的不建议
uintabc=0,abc1=0;//abc三种状态
uintkeynum=0;//数码管的位
uinthighnum=0,downnum=0;//最大数和最小数
ucharhighnum1=0,highnum2=0,downnum1=0,downnum2=0;//最大数和最小数
bitflag_eeprom1=1;//掉电存储的标志位
voidsaveeepro();//掉电存储
voidmain(){
timer0_1init();
highnum1=Byte_Read(0x01);//掉电存储用到
highnum2=Byte_Read(0x02);//掉电存储用到
downnum1=Byte_Read(0x03);//掉电存储用到
downnum2=Byte_Read(0x04);//掉电存储用到
genum2=highnum1%10;//个位
shinum2=highnum1%100/10;//十位
bainum2=highnum2%10;//个位
qiannum2=highnum2%100/10;//十位
genum3=downnum1%10;//个位
shinum3=downnum1%100/10;//十位
bainum3=downnum2%10;//个位
qiannum3=downnum2%100/10;//十位
highnum=qiannum2*1000+bainum2*100+shinum2*10+genum2;
downnum=qiannum3*1000+bainum3*100+shinum3*10+genum3;
while
(1){
keycan();
displaynum();
}
}
voidsaveeepro(){//掉电存储
highnum1=shinum2*10+genum2;
highnum2=qiannum2*10+bainum2;
downnum1=shinum3*10+genum3;
downnum2=qiannum3*10+bainum3;
Sector_Erase(0);//擦除0x01地址中的数据一定要先擦除再写进同一地址
Byte_Program(0x01,highnum1);//擦除完成就可以写入了
Byte_Program(0x02,highnum2);//擦除完成就可以写入了
Byte_Program(0x03,downnum1);//擦除完成就可以写入了
Byte_Program(0x04,downnum2);//擦除完成就可以写入了
}
voidkeycan(){//按键
if(key1==0){//当按键1按下
if(kf0){//当标志位kf0=1的时候进行
if(presstime>100){//那时刻值大于一百的时候
kf0=0;//标志位kf0=0
kt0=1;//标志位kt0=0
presstime=0;//时刻清零,从头进行
keynum=0;
abc1=0;
disp=0;
abc++;
if(abc==3){//当位到3那么置位0
abc=0;
}
}
}
}else{//当按键松开
keyflag();
}//按键1终止
if(abc>0){
if(key2==0){if(kf0){if(presstime>100){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;
keynum++;if(keynum==5){keynum=0;
}}}}else{keyflag();
if((flag_eeprom1==1)){//加掉电存储
flag_eeprom1=0;
saveeepro();//掉电存储
}
}
if(key3==0){if(kf0){if(presstime>100){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;
switch(keynum){
case1:
if(abc==1){
genum2++;//数码管一加加
if(genum2>9){//当数码管一加加到9时置为1
genum2=0;
}
}elseif(abc==2){
genum3++;//数码管一加加
if(genum3>9){//当数码管一加加到9时置为1
genum3=0;
}
}
break;
case2:
if(abc==1){shinum2++;if(shinum2>9){shinum2=0;}
}elseif(abc==2){shinum3++;if(shinum3>9){shinum3=0;}}
break;
case3:
if(abc==1){bainum2++;if(bainum2>9){bainum2=0;}
}elseif(abc==2){bainum3++;if(bainum3>9){bainum3=0;}}
break;
case4:
if(abc==1){qiannum2++;if(qiannum2>9){qiannum2=0;}
}elseif(abc==2){qiannum3++;if(qiannum3>9){qiannum3=0;}}
break;
default:
break;
}
}}}else{keyflag();
if((flag_eeprom1==1)){//加掉电存储
flag_eeprom1=0;
saveeepro();//掉电存储
}
}
}
}
voiddisplaynum(){//将数字传到数码管上显示
if(abc==0){
abcf1=0;//a
abcf2=3;//-
genum1=disp%10;//个位
shinum1=disp%100/10;//十位
bainum1=disp%1000/100;//百位
qiannum1=disp/1000;//千位
if(abc1>2000){
if(dispout1=0;
out2=1;
}elseif(disp>highnum){
out1=1;
out2=0;
}else{
out1=1;
out2=1;
}
}else{
out1=1;
out2=1;
}
}elseif(abc==1){
abcf1=1;//b
abcf2=3;//-
highnum=qiannum2*1000+bainum2*100+shinum2*10+genum2;
genum1=genum2;//个位
shinum1=shinum2;//十位
bainum1=bainum2;//百位
qiannum1=qiannum2;//千位
}elseif(abc==2){
abcf1=2;//c
abcf2=3;//-
downnum=qiannum3*1000+bainum3*100+shinum3*10+genum3;
genum1=genum3;//个位
shinum1=shinum3;//十位
bainum1=bainum3;//百位
qiannum1=qiannum3;//千位
}
}
voidtimer0(void)interrupt1{
TH0=0xe3;
TL0=0xc;
tcnt1++;
presstime++;
if(abc==0){
abc1++;
lck++;
if(lck==1000){
if(abc1>2000){
disp=dispcount;
}
lck=0;
dispcount=0;
}
}
switch(tcnt1){
case1:
P2=0XFF;P0=abcf[abcf1];P2=wei1[2];break;
case2:
P2=0XFF;P0=abcf[abcf2];P2=wei1[1];break;
case3:
P2=0XFF;P0=seg7code[qiannum1];if(keynum==4||keynum==0){P2=wei1[0];}break;
case4:
P2=0XFF;P0=seg7code[bainum1];if(keynum==3||keynum==0){P2=wei2[2];}break;
case5:
P2=0XFF;P0=seg7code[shinum1];if(keynum==2||keynum==0){P2=wei2[1];}break;
case6:
P2=0XFF;P0=seg7code[genum1];if(keynum==1||keynum==0){P2=wei2[0];}break;
default:
tcnt1=0;P2=0XFF;break;
}
}
voidtimer0_1init(){//按时配置
TMOD=0x0;
TH0=0xe3;
TL0=0xc;
//IT0=1;//INT0下降沿中断
//EX0=1;//允许INT1中断
IT1=1;//INT1下降沿中断
EX1=1;//许诺INT1中断
TR0=1;
ET0=1;
EA=1;
}
//voidint0(void)interrupt0{//P3^2//此处用于获取霍尔传感器的数据
//dispcount++;//每一次中断,计数加一
//}
voidint1(void)interrupt2{//P3^3//此处用于获取霍尔传感器的数据
dispcount++;//每一次中断,计数加一
}
voidkeyflag(){//按键终止挪用,按键的建议利用,如此能够减小code,可是触发的不建议
if(kt0){//当标志位kt0=1的时候进行
if(presstime>100){//当时间值大于一百的时候
kf0=1;//标志位kf0=1
kt0=0;//标志位kt0=0
presstime=0;//时间清零,重新进行
}
}
}
【图片展现】