找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2774|回复: 0
收起左侧

数字选频电路可编程工控开发板原理图与单片机源程序等资料下载

[复制链接]
ID:280979 发表于 2018-2-5 00:55 | 显示全部楼层 |阅读模式
0.png
【简要说明】
一、 尺寸:长114mmX宽72mmX高18mm
二、 主要芯片:单片机,数码管、稳压器 、继电器
三、 工作电压:6V40V,功耗小于1W
四、  特点:1、具有稳压电路,输入电压广,具有电源指示灯
            2、具有6位数码管显示。
            3、具有按键调节功能,设置参数带记忆功能。
            4、最大检测频率100KHZ。
            5、双路继电器输出
            6、继电器最大控制负载300W。         
            7、单片机编程,客户可以自己更改,提供源代码
            8、有无信号输出,具有LED灯指示。
            9、端子采用螺旋压接端子           
            10、工作温度-40度至 +70度
            11、工作湿度 40%  ~ 80%RH
            12、具有电源防接反保护
            13具有续流保护
            14、具有电磁抗干扰能力
            15、板子稳定工作可靠
            16、板子可安装在DIN导轨上面

GYJ-0043_数字选频工控开发板的电路原理图:
0.png

pcb图:
0.jpg

元件清单:
0.png

实物图与接线图等:
DSC_0095.JPG 标示图.JPG 接线图 - 副本.JPG 接线图.JPG 应用举例.JPG DSC_0115.JPG DSC_0116.JPG

51单片机源程序如下:
  1. #include "demo.h"
  2. #include "eeprom.h"
  3. #define uchar unsigned char//宏定义无符号字符型
  4. #define uint unsigned int  //宏定义无符号整型

  5. uint tcnt1=0;//用于刷新数码管
  6. uint qiannum1,bainum1,shinum1,genum1;
  7. uchar qiannum2,bainum2,shinum2,genum2;
  8. uchar qiannum3,bainum3,shinum3,genum3;
  9. code uchar seg7code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
  10. uchar wei1[3]={0XDf,0XBf,0X7f};//数码管1的位的控制端
  11. uchar wei2[3]={0XFb,0XF7,0Xef};//数码管2的位的控制端
  12. uchar abcf[4]={0x88,0x83,0xc6,0xbf};//abc-
  13. uchar abcf1,abcf2;//用于显示特殊字符abc-

  14. uint dispcount=0;//获取霍尔传感器的数据用        获取数据
  15. uint lck=0;//获取霍尔传感器的数据用    计时一秒用
  16. uint disp=0; //获取霍尔传感器的数据用   显示到数码管用
  17. void timer0_1init();//定时配置

  18. void displaynum();//将数字传到数码管上显示
  19. static uchar presstime=0;//时间值按键用到的
  20. uint kf0=1;//按键用的标志位
  21. uint kt0=0;//按键用的标志位
  22. void keycan();//按键
  23. void keyflag();//按键结束调用,按键的建议使用,这样可以减小code,但是触发的不建议
  24. uint abc=0,abc1=0;//abc三种状态
  25. uint keynum=0;//数码管的位
  26. uint highnum=0,downnum=0;//最大数和最小数
  27. uchar highnum1=0,highnum2=0,downnum1=0,downnum2=0;//最大数和最小数
  28. bit flag_eeprom1=1;//掉电存储的标志位
  29. void saveeepro();//掉电存储
  30. void main(){
  31.         timer0_1init();
  32.         highnum1=Byte_Read(0x01);//掉电存储用到  
  33.         highnum2=Byte_Read(0x02);//掉电存储用到
  34.         downnum1=Byte_Read(0x03);//掉电存储用到
  35.         downnum2=Byte_Read(0x04);//掉电存储用到        
  36.         genum2=highnum1%10;//个位
  37.         shinum2=highnum1%100/10;//十位
  38.         bainum2=highnum2%10;//个位
  39.         qiannum2=highnum2%100/10;//十位
  40.         
  41.         genum3=downnum1%10;//个位
  42.         shinum3=downnum1%100/10;//十位
  43.         bainum3=downnum2%10;//个位
  44.         qiannum3=downnum2%100/10;//十位
  45.                
  46.         highnum=qiannum2*1000+bainum2*100+shinum2*10+genum2;
  47.         downnum=qiannum3*1000+bainum3*100+shinum3*10+genum3;
  48.         while(1){
  49.                 keycan();
  50.                 displaynum();
  51.         }
  52. }
  53. void saveeepro(){//掉电存储
  54.                          highnum1=shinum2*10+genum2;
  55.                          highnum2=qiannum2*10+bainum2;
  56.                          downnum1=shinum3*10+genum3;
  57.                          downnum2=qiannum3*10+bainum3;
  58.                             Sector_Erase(0);           //擦除0x01地址中的数据          一定要先擦除再写进  同一地址                                
  59.                       Byte_Program(0x01,highnum1);            //擦除完成就可以写入了
  60.                           Byte_Program(0x02,highnum2);            //擦除完成就可以写入了
  61.                       Byte_Program(0x03,downnum1);            //擦除完成就可以写入了
  62.                           Byte_Program(0x04,downnum2);            //擦除完成就可以写入了
  63. }
  64. void keycan(){//按键
  65.     if(key1==0){//当按键1按下
  66.                 if(kf0){//当标志位kf0=1的时候进行
  67.                         if(presstime>100){//当时间值大于一百的时候
  68.                                 kf0=0;//标志位kf0=0
  69.                                 kt0=1;//标志位kt0=0
  70.                                 presstime=0;//时间清零,重新进行
  71.                                 keynum=0;
  72.                                 abc1=0;
  73.                                 disp=0;
  74.                                 abc++;
  75.                         if(abc==3){//当位到3则置位0
  76.                                    abc=0;
  77.                                  }
  78.                         }
  79.                   }
  80.         }else{//当按键松开
  81.                 keyflag();
  82.         }//按键1结束
  83.         if(abc>0){
  84.             if(key2==0){if(kf0){if(presstime>100){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;
  85.                                         keynum++;if(keynum==5){keynum=0;
  86.                 }}}}else{keyflag();        
  87.                         if((flag_eeprom1==1)){//加掉电存储
  88.                                 flag_eeprom1=0;
  89.                                 saveeepro();//掉电存储
  90.                         }
  91.                 }
  92.             if(key3==0){if(kf0){if(presstime>100){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;
  93.                                 switch(keynum){
  94.                                         case 1:
  95.                                                 if(abc==1){
  96.                                                         genum2++;//数码管一加加
  97.                                                         if(genum2>9){//当数码管一加加到9时置为1
  98.                                                                 genum2=0;
  99.                                                         }
  100.                                                 }else if(abc==2){
  101.                                                         genum3++;//数码管一加加
  102.                                                         if(genum3>9){//当数码管一加加到9时置为1
  103.                                                                 genum3=0;
  104.                                                         }                                                
  105.                                                 }
  106.                                                 break;
  107.                                         case 2:if(abc==1){shinum2++;if(shinum2>9){shinum2=0;}
  108.                                          }else if(abc==2){shinum3++;if(shinum3>9){shinum3=0;}}
  109.                                                 break;
  110.                                         case 3:if(abc==1){bainum2++;if(bainum2>9){bainum2=0;}
  111.                                          }else if(abc==2){bainum3++;if(bainum3>9){bainum3=0;}}
  112.                                                 break;
  113.                                         case 4:if(abc==1){qiannum2++;if(qiannum2>9){qiannum2=0;}
  114.                                          }else if(abc==2){qiannum3++;if(qiannum3>9){qiannum3=0;}}
  115.                                                 break;

  116.                                         default:break;
  117.                                 }
  118.                 }}}else{keyflag();
  119.                         if((flag_eeprom1==1)){//加掉电存储
  120.                                 flag_eeprom1=0;
  121.                                 saveeepro();//掉电存储
  122.                         }
  123.                 }
  124.         }
  125. }

  126. void displaynum(){//将数字传到数码管上显示
  127.         if(abc==0){
  128.                 abcf1=0;//a
  129.                 abcf2=3;//-
  130.                 genum1=disp%10;//个位
  131.                 shinum1=disp%100/10;//十位
  132.                 bainum1=disp%1000/100;//百位
  133.                 qiannum1=disp/1000;//千位
  134.                 if(abc1>2000){
  135.                         if(disp<downnum){
  136.                                 out1=0;
  137.                                 out2=1;
  138.                         }else if(disp>highnum){
  139.                                 out1=1;
  140.                                 out2=0;               
  141.                         }else{
  142.                                 out1=1;
  143.                                 out2=1;                                
  144.                         }
  145.                 }else{
  146.                                 out1=1;
  147.                                 out2=1;                                
  148.                         }
  149.         }else if(abc==1){
  150.                 abcf1=1;//b
  151.                 abcf2=3;//-        
  152.                 highnum=qiannum2*1000+bainum2*100+shinum2*10+genum2;
  153.                 genum1=genum2;//个位
  154.                 shinum1=shinum2;//十位
  155.                 bainum1=bainum2;//百位
  156.                 qiannum1=qiannum2;//千位

  157.         }else if(abc==2){
  158.                 abcf1=2;//c
  159.                 abcf2=3;//-        
  160.                 downnum=qiannum3*1000+bainum3*100+shinum3*10+genum3;
  161.                 genum1=genum3;//个位
  162.                 shinum1=shinum3;//十位
  163.                 bainum1=bainum3;//百位
  164.                 qiannum1=qiannum3;//千位
  165.         }
  166. }
  167. void timer0(void)interrupt 1  {         
  168.         TH0=0xe3;
  169.         TL0=0xc;        
  170.         tcnt1++;
  171.         presstime++;
  172.         if(abc==0){
  173.                 abc1++;
  174.                 lck++;        
  175.                 if(lck==1000){
  176.                         if(abc1>2000){
  177.                                 disp=dispcount;
  178.                         }
  179.                         lck=0;
  180.                         dispcount=0;               
  181.                 }
  182.         }
  183.         switch(tcnt1){
  184.            case 1: P2=0XFF; P0=abcf[abcf1];P2=wei1[2];break;
  185.           case 2: P2=0XFF; P0=abcf[abcf2];P2=wei1[1];break;
  186.           case 3: P2=0XFF; P0=seg7code[qiannum1];if(keynum==4 || keynum==0){P2=wei1[0];}break;
  187.            case 4: P2=0XFF; P0=seg7code[bainum1]; if(keynum==3 || keynum==0){P2=wei2[2];}break;
  188.           case 5: P2=0XFF; P0=seg7code[shinum1]; if(keynum==2 || keynum==0){P2=wei2[1];}break;
  189.           case 6: P2=0XFF; P0=seg7code[genum1];  if(keynum==1 || keynum==0){P2=wei2[0];}break;
  190.           default: tcnt1=0; P2=0XFF; break;
  191.          }
  192. }
  193. void timer0_1init(){//定时配置
  194.         TMOD=0x0;
  195.         TH0=0xe3;
  196.         TL0=0xc;
  197. //        IT0=1;     //INT0下降沿中断
  198. //        EX0=1;     //允许INT1中断         
  199.         IT1=1;     //INT1下降沿中断
  200.         EX1=1;     //允许INT1中断         
  201.         TR0=1;
  202.         ET0=1;
  203.         EA=1;
  204. }
  205. //void int0(void) interrupt 0{//P3^2//此处用于获取霍尔传感器的数据
  206. //        dispcount++; //每一次中断,计数加一
  207. //}
  208. void int1(void) interrupt 2{//P3^3//此处用于获取霍尔传感器的数据
  209.         dispcount++; //每一次中断,计数加一
  210. }
  211. void keyflag(){//按键结束调用,按键的建议使用,这样可以减小code,但是触发的不建议
  212.            if(kt0){//当标志位kt0=1的时候进行
  213.                    if(presstime>100){//当时间值大于一百的时候
  214.                         kf0=1;//标志位kf0=1
  215.                         kt0=0;//标志位kt0=0
  216. ……………………

  217. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
所有资料51hei提供下载:
GYJ-0043_数字选频电路发货资料.rar (6.82 MB, 下载次数: 16)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表