文档介绍:该【单片机大作业简易楼道灯电费计价系统 】是由【业精于勤】上传分享,文档一共【19】页,该文档可以免费在线阅读,需要了解更多关于【单片机大作业简易楼道灯电费计价系统 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。课题名称
简易楼道灯电费计价系统
院、系、部
自动化与电气工程学院
专 业
电气工程及其自动化
班 级
姓名
学 号
指引教师
单片机大作业
都市居民楼内一般安装有楼道灯,以便夜间居民上下楼,其工作特点是人来灯亮,人走灯灭。以热释电型楼道灯为例,其基本工作原理是:热释电传感器能检测人体与否进入感应范畴,当人体未进入感应范畴,即离楼道灯尚有一定距离时,传感器输出低电平;当人体进入感应范畴,即接近楼道灯时,传感器输出高电平。根据传感器的输出,单片机可决定与否点亮楼道灯。由于楼道灯属本单元全体居民共用,为便于电费结算,现规定设计一套简易楼道灯电费计价系统,系统能自动计算楼道灯在一种月内的总点亮时间,并据此计算出应缴电费额度。
系统由电源电路、热释电传感器、单片机、按键以及显示屏构成,楼道灯供电为220市电,功率2kW(实际灯泡功率一般不会这样大。考虑到实验演示时间有限,故假设此灯泡功率为该值)。其中电源采用5V,热释电传感器的输出采用按键按下与否进行模拟,单片机采用51,显示屏采用4位数码管,(。考虑到实验演示时间有限,故假设电价为该值),。顾客可用按键查询本月楼道灯总点亮时间(),以及本月总电费。
(1)仿真电路图
(2)实物电路图:
ﻩﻩ
(3)
元器件列表
STC89C52RC
一种
按钮开关
3个
四位共阳数码管
1个
12M晶振
1个
CS9012三极管
1个
二极管
1个
ZS230-25G灯泡
1个
HK4100F-DC5V-SHG继电器
1个
接线端子
1个
3906PNP三极管
4个
电容、电阻
若干
(4)电路简介:
1>起振电路:由一种12M晶振和两个20pF的电容构成,接在单片机STC89C52的18、19脚间,为整个电路提供时钟脉冲,一种机器周期为1us。
2>复位电路:,电容两端并联一种按钮开关S6构成复位电路,接在单片机第9脚上,按下开关S6,电路复位。
同步,将31脚接至VCC,采用内部存储器。
3>数码管显示电路:采用四位7段共阳数码管
-,段选线接至P0口。
4>外部中断连线:按钮开关S1控制定期器T0开关状态,按下S1,模拟人来,则控制灯亮;,控制外部中断INT1,按下S2,数码管显示当月灯亮总时间。
(1)程序流程图
Y
N
声明变量、设立初始值
开始
设立定期器方式输出
设立定期值、启动定期器T1
若按下S1?
设立定期值、启动定期器T0
调用计费显示函数
主程序
ﻩ ﻩ ﻩ
N
T1_1month
当月灯亮总时间清零
溢出?
计数1个月?
返回
设立定期值、启动定期器T1
Y
定期1个月中断子程序
Y
N
T0_30s
设立灯灭
设立定期值、启动定期器T0
溢出?
计数30s?
Y
返回
N
定期30s中断子程序
N
Y
声明变量、设立初始值
读取数组数据、解决数据
输出延时2ms、下一种扫描码
N
disptime
4次扫描?
返回
Y
灯亮总时间显示函数
声明变量、设立初始值
读取数组数据、解决数据
输出延时2ms、下一种扫描码
N
dispmoney
4次扫描?
返回
Y
计费显示函数
ﻩ
(2)程序代码:
#include<>
#defineSEG P0 //段选线接至P0ﻩﻩ
#defineSCANPP2ﻩ//位选线接至P2
sbitLAMP=P1^2; ﻩ//
sbitS1=P3^4; ﻩ//
sbitS2=P3^3;ﻩ //,外部中断INT1,显示时间(h)
#definecount50000 //声明计数值,
#defineTH(65536-count)/256 //声明计数高8位
#defineTL(65536-count)%256ﻩ//声明计数低8位
charcount_T0=0;ﻩﻩ//计数T0中断次数
charcount_T1=0; //计数T1中断次数
voiddebouncer(void);
voiddelay1ms(int); ﻩ//声明动态显示延时x(ms)函数
voiddispmoney(void); //声明计费显示函数
charcodeTAB[11]={ ﻩ0xc0,0xf9,0xa4,0xb0,0x99,
ﻩ ﻩ 0x92,0x82,0xf8,0x80,0x90};
chardispm[4]={0,0,0,0};//设立计费显示初值
chardispt[4]={0,0,0,0};//设立计时显示初值
charseconds=0;
charscan=1;
intt=0; // 声明灯在一种月内的总点亮时间t变量
intl=0;ﻩ
charp=0;
charq=0;
main()
{
IE=0x8e;ﻩ //容许T0、INT1、T1中断
TMOD=0x11;ﻩﻩ//T0采用Mode1、T1采用Mode1
TH1=TH;
TL1=TL;
TR1=1; ﻩ//定期器T1启动
LAMP=1; ﻩ//设立灯初始为熄灭状态
ﻩwhile(1)
ﻩ{
if(S1==0)ﻩ//开关S1若按下,模拟传感器检测到人来
ﻩﻩ{
ﻩdebouncer();
ﻩﻩif(S1==0)