找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1870|回复: 3
打印 上一主题 下一主题
收起左侧

基于三相电源的频率检测程序

[复制链接]
跳转到指定楼层
楼主
ID:532475 发表于 2019-5-14 13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
该程序能检测处理后的三相电源信号,希望有所帮助。

单片机源程序如下:
  1. #include<reg52.h>
  2. unsigned long fre;  
  3. unsigned char time;
  4. unsigned int count;
  5. unsigned char led[6];
  6. unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,
  7.                    0x6d,0x7d,0x07,0x7f,0x6f};  //数码管0123456789显示
  8. sbit swan=P2^0;
  9. sbit wan =P2^1;
  10. sbit qian=P2^2;
  11. sbit bai =P2^3;
  12. sbit shi =P2^4;
  13. sbit ge=P2^5;
  14. sbit  ppp=  P0^0 ;

  15. void timer_init();                     //函数声明        
  16. void display(unsigned long num);
  17. void delay(unsigned int a);

  18. void main()
  19. {  
  20. // timer_init(); //定时/计数器初始化     
  21. while(1)  
  22.      {   //display(fre); //数码管显示
  23.          P2 = 0x75;  
  24.                   P0 = 0x35;      
  25.          }  
  26. }

  27. void delay(unsigned int a)   //延时约1ms(12Mhz晶振)
  28. {
  29. unsigned char i;
  30. while(a--!=0)
  31. for(i=125;i>0;i--);
  32. }

  33. void display(unsigned long num)   //显示函数
  34. {unsigned char sw,w,q,b,s,g;
  35.   P0 = 0x75;

  36. //sw=num/100000;P0=table[sw];swan=0;delay(2);swan=1;
  37. //w=num/10000%10;P0=table[w];wan=0;delay(2);wan=1;
  38. //q=num/1000%10;P0=table[q];qian=0;delay(2);qian=1;
  39. //b=num%1000/100;P0=table[b];bai=0;delay(2);bai=1;
  40. //s=num%100/10;P0=table[s];shi=0;delay(2);shi=1;
  41. //g=num%10;P0=table[g];ge=0;delay(2);ge=1;
  42. }

  43. void timer_init(void)   //定时/计数器初始化      
  44. {   TMOD=0x06;    //计数器0工作工作方式2,自动重装初值      
  45. TH0=0; //计数器初值为0  
  46. TL0=0;  
  47. TR0=1; //计数器开始计数   
  48. ET0=1;   //打开计数器0中断      
  49. RCAP2H=(65536-62500)/256; //在程序初始化时给RCAP2L和RCAP2H赋值           
  50. RCAP2L=(65536-62500)%256; //TH2 和 TL2 将会在中断产生时自动使 TH2=RCAP2H,TL2=RCAP2L。        
  51. TH2=RCAP2H;   //12M晶振下每次中断62.5ms                  
  52. TL2=RCAP2L;   
  53. ET2=1;     //打开定时器2中断     
  54. TR2=1;     //定时器2开始计时      
  55. EA=1;     //开总中断      
  56. }

  57. void timer2(void) interrupt 5 //定时器2中断(62.5ms)
  58. {
  59. time++;   
  60. TF2=0;//定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务序中将其清零   
  61. if (time==16)    //定时1s时间到  
  62.    {
  63.          time=0;     //计时清0     
  64.         EA=0;     //关中断        
  65.          fre=7;
  66.         //fre=(long)count*256+TL0; //count*256强制转换成long型,否则将不产生进位  
  67.         TL0=0;     //清零计数器0计数   
  68.     TH0=0;     
  69.     count=0;     //清零计数器0计数         
  70.         EA=1;      //开始中断
  71.         }
  72. }

  73. void timer0(void)interrupt 1//计数器0中断         
  74. {
  75.   count++;
  76. }
复制代码





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-5-14 18:31 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:439742 发表于 2021-12-12 23:06 | 只看该作者
没有什么用
回复

使用道具 举报

地板
ID:439742 发表于 2021-12-12 23:06 | 只看该作者
没有什么用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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