找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机负载平衡监控系统仿真+源程序+电路原理图

[复制链接]
ID:137190 发表于 2016-8-31 18:47 | 显示全部楼层 |阅读模式
0.png
51单片机负载平衡监控系统仿真电路原理图

51单片机负载平衡监控系统源程序如下:
  1. #include <AT89X52.h>

  2. unsigned char code SEGtable[]=
  3. {
  4.         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00
  5. };

  6. sbit sw7 = P0 ^ 7;
  7. sbit sw6 = P0 ^ 6;
  8. sbit sw5 = P0 ^ 5;
  9. sbit sw4 = P0 ^ 4;
  10. sbit sw3 = P0 ^ 3;
  11. sbit sw2 = P0 ^ 2;
  12. sbit sw1 = P0 ^ 1;
  13. sbit sw0 = P0 ^ 0;

  14. sbit FMQ = P1 ^ 7;
  15. bit alarmflg = 0;
  16. unsigned RxByte = 0x00;
  17. unsigned char counter = 0;
  18. unsigned char Scounter,Lcounter;  //分别存放自己的水位状态和远方的水位状态
  19. unsigned char FMcounter = 0x02;   //报警状态参数

  20. void DelayFM(unsigned int x)  
  21. {
  22.          unsigned char t;
  23.         while(x--)
  24.         {
  25.                  for(t=0;t<120;t++);
  26.         }
  27. }
  28. //蜂鸣器驱动函数,参数为发声声调
  29. void FM(unsigned char x)
  30. {
  31.          unsigned char i;
  32.         for(i=0;i<100;i++)
  33.         {
  34.                  FMQ = ~FMQ;
  35.                 DelayFM(x);
  36.         }
  37.         FMQ = 0;
  38. }

  39. void Delayms(unsigned int MS)                     //延时ms函数            
  40. {
  41.         unsigned int i,j;
  42.         for( i=0;i<MS;i++)
  43.                 for(j=0;j<1141;j++);                                
  44. }
  45. void InitUART(void)
  46. {
  47.     TMOD = 0x20;     //9600bps
  48.     SCON = 0x50;
  49.     TH1 = 0xFD;
  50.     TL1 = TH1;
  51.     PCON = 0x00;
  52.     EA = 1;
  53.     ES = 1;
  54.     TR1 = 1;
  55. }
  56. void Send(unsigned char x)
  57. {
  58.   SBUF = x;
  59.   while(TI == 0);
  60.   TI = 0;
  61. }
  62. void Serial(void) interrupt 4 using 1
  63. {
  64.         unsigned char RxByte;
  65.         if(RI == 1)
  66.         {
  67.                 RxByte = SBUF;
  68.                 RI = 0;
  69.     P2 = RxByte;
  70.     switch(RxByte)
  71.     {
  72.       case 0x00: Lcounter = 0;break;
  73.       case 0xf9: Lcounter = 1;break;
  74.       case 0xa4: Lcounter = 2;break;
  75.       case 0xb0: Lcounter = 3;break;
  76.       case 0x99: Lcounter = 4;break;
  77.       case 0x92: Lcounter = 5;break;
  78.       case 0x82: Lcounter = 6;break;
  79.       case 0xF8: Lcounter = 7;break;
  80.       case 0x80: Lcounter = 8;break;
  81.       default:{};
  82.     }
  83.     if(Scounter > Lcounter)
  84.     {
  85.       if((Scounter - Lcounter) > 2)       //如果超过2%
  86.       {
  87.         FMcounter = Scounter - Lcounter;
  88.         alarmflg = 1;              //报警标志位
  89.       }
  90.       else
  91.       {
  92.         alarmflg = 0;
  93.       }
  94.     }
  95.     else
  96.     {
  97.       alarmflg = 0;     //清除
  98.     }
  99.         }        
  100. }
  101. main(void)
  102. {
  103.    InitUART();
  104.    while(1)
  105.    {
  106.      Delayms(100);  
  107.      P0 = 0xFF;
  108.      counter = 0;
  109.      counter = counter + (unsigned char)sw7;
  110.      counter = counter + (unsigned char)sw6;
  111.      counter = counter + (unsigned char)sw5;
  112.      counter = counter + (unsigned char)sw4;
  113.      counter = counter + (unsigned char)sw3;
  114.      counter = counter + (unsigned char)sw2;
  115.      counter = counter + (unsigned char)sw1;
  116.      counter = counter + (unsigned char)sw0;  //计算当前的负载
  117.      Scounter = counter;
  118.      Send(SEGtable[counter]);
  119.      if(alarmflg == 1)
  120.      {
  121.       FM(FMcounter);
  122.      }
  123.    }
  124. }
复制代码



0.png
51单片机负载平衡监控系统仿真工程文件及所有资料下载:http://www.51hei.com/bbs/dpj-54940-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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