找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机简易楼道灯电费计价系统仿真程序流程图设计

[复制链接]
跳转到指定楼层
楼主
城市居民楼内一般安装有楼道灯,方便夜间居民上下楼,其工作特点是人来灯亮,人走灯灭。以热释电型楼道灯为例,其基本工作原理是:热释电传感器能检测人体是否进入感应范围,当人体未进入感应范围,即离楼道灯还有一定距离时,传感器输出低电平;当人体进入感应范围,即靠近楼道灯时,传感器输出高电平。根据传感器的输出,单片机可决定是否点亮楼道灯。由于楼道灯属本单元全体居民共用,为便于电费结算,现要求设计一套简易楼道灯电费计价系统,系统能自动计算楼道灯在一个月内的总点亮时间,并据此计算出应缴电费额度。

系统由电源电路、热释电传感器、单片机、按键以及显示器组成,楼道灯供电为220市电,功率2kW(实际灯泡功率一般不会这么大。考虑到实验演示时间有限,故假设此灯泡功率为该值)。其中电源采用5V,热释电传感器的输出采用按键按下与否进行模拟,单片机采用51,显示器采用4位数码管,电价按5.86元/千瓦时(实际电价一般为0.58。考虑到实验演示时间有限,故假设电价为该值),要求电费计算精度精确到0.01元。用户可用按键查询本月楼道灯总点亮时间(精度0.01小时),以及本月总电费。

三.   实验目的
理解、掌握51单片机I/O口高级应用、定时器、中断、继电器、按键及数码管的综合应用

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机程序流程图:


单片机源程序如下:
  1. #include <reg52.h>
  2. #define SEG P2
  3. sbit LED = P0^0;
  4. sbit K1 = P0^1;
  5. sbit K2 =P3^2;
  6. char code TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  7. char ando[4]={0,0,0,0};
  8. int Q=0,i=0,j=0,z=0,n=0;
  9. char scan,M=0,T=0;
  10. float k=0;
  11. void show(int);
  12. void delay1(unsigned int x)
  13. {
  14.    unsigned int w,i;
  15.          for(i=0;i<x;i++)
  16.          for(w=0;w<120;w++);
  17. }        

  18. void main()
  19. {   IE = 0x8b;          //T1\T0\INT0        中断允许
  20.     TCON|=0x01;                          //负边沿触发                        
  21.         TMOD|=0x01;                          //T0mode1                          有1置1
  22.         TMOD&=0xf1;                                                                        //有0置0
  23.         TH0=(65635-50000)/256;                                  //设置计数值
  24.         TL0=(65635-50000)%256;
  25.         P0=0xff;
  26.         P2=0xff;     //初始化
  27.         while(1)
  28.         {
  29.         if(K1==1)
  30.           { TR0=1;
  31.             LED=0;
  32.        }
  33. //           else
  34. //           {TR0=0;
  35. //            LED=1;
  36. //           }
  37.          if(z==1)
  38.            {j=k*586/60/30;
  39.             show(j);}
  40.           if(z==2)
  41.           {        j=k*100/3600;
  42.           show(j);
  43.           }
  44.         if(j==9999) k=0; //若数码管显示达上限,清零重新计算
  45.         }
  46. }

  47. void show(int x)                                                  //显示函数
  48. {          ando[0]=x/1000;
  49.             ando[1]=x/100%10;
  50.           ando[2]=x%100/10;
  51.           ando[3]=x%10;
  52.       scan=1;                                                //设置扫描初值
  53.       for(i=0;i<4;i++)                           //扫描四次
  54.           {
  55.           if(i==1)                                                 //第二位扫描时数字+小数点
  56.           P2=(TAB[ando[i]])&0x7f;
  57.           else
  58.           P2=TAB[ando[i]];
  59.       P1=scan;                                                  //输出扫描信号
  60.           delay1(10);
  61.           P2=0xff;                                          //消隐
  62.       scan<<=1;}                                         //扫描信号左移一位
  63. }


  64. void timer0(void) interrupt 1
  65. { TH0=(65635-50000)/256;                                         //重置计数值
  66.         TL0=(65635-50000)%256;                                         //低8位
  67.         if(++Q==20)                                                                //定时达1秒
  68.         { Q=0;
  69.           k++;
  70.           n++;
  71.      }
  72.   if(n==36)                                                                //定时达36秒
  73.         { n=0;
  74.           TR0=0;
  75.           LED=1;
  76.      }
  77.         

  78. }
  79. void my_int0(void) interrupt 0                          //外部中断
  80. {        if(++z==4)
  81.    z=1;   
  82. }
复制代码

所有资料51hei提供下载(仿真工程):
单片机设计.7z (31.99 KB, 下载次数: 22)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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