单片机大作业.docx_第1页
单片机大作业.docx_第2页
单片机大作业.docx_第3页
单片机大作业.docx_第4页
单片机大作业.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课题名称简易楼道灯电费计价系统院、系、部自动化与电气工程学院专 业电气工程及其自动化班 级姓 名学 号指导教师单片机大作业1.作业背景城市居民楼内一般安装有楼道灯,方便夜间居民上下楼,其工作特点是人来灯亮,人走灯灭。以热释电型楼道灯为例,其基本工作原理是:热释电传感器能检测人体是否进入感应范围,当人体未进入感应范围,即离楼道灯还有一定距离时,传感器输出低电平;当人体进入感应范围,即靠近楼道灯时,传感器输出高电平。根据传感器的输出,单片机可决定是否点亮楼道灯。由于楼道灯属本单元全体居民共用,为便于电费结算,现要求设计一套简易楼道灯电费计价系统,系统能自动计算楼道灯在一个月内的总点亮时间,并据此计算出应缴电费额度。2.作业要求系统由电源电路、热释电传感器、单片机、按键以及显示器组成,楼道灯供电为220市电,功率2kW(实际灯泡功率一般不会这么大。考虑到实验演示时间有限,故假设此灯泡功率为该值)。其中电源采用5V,热释电传感器的输出采用按键按下与否进行模拟,单片机采用51,显示器采用4位数码管,电价按5.86元/千瓦时(实际电价一般为0.58。考虑到实验演示时间有限,故假设电价为该值),要求电费计算精度精确到0.01元。用户可用按键查询本月楼道灯总点亮时间(精度0.01小时),以及本月总电费。3.硬件部分(1)仿真电路图(2)实物电路图: (3)元器件列表STC89C52RC一个按钮开关3个四位共阳数码管1个12M晶振1个CS9012三极管1个二极管1个ZS230-25G灯泡1个HK4 100F-DC5V-SHG继电器1个接线端子1个3906PNP三极管4个电容、电阻若干(4)电路介绍:1起振电路:由一个12M晶振和两个20pF的电容组成,接在单片机STC89C52的18、19脚间,为整个电路提供时钟脉冲,一个机器周期为1us。2复位电路:由一个0.1nF的电容和一个100的电阻,电容两端并联一个按钮开关S6组成复位电路,接在单片机第9脚上,按下开关S6,电路复位。同时,将31脚接至VCC,采用 内部存储器。3数码管显示电路:采用四位7段共阳数码管位选线接至P2.0-P2.3,段选线接至P0口。4外部中断连线:按钮开关S1控制定时器T0开关状态,按下S1,模拟人来,则控制灯亮;按钮开关S2接至P3.3,控制外部中断INT1,按下S2,数码管显示当月灯亮总时间。4.软件部分(1)程序流程图YN声明变量、设置初始值开始设置定时器方式输出设置定时值、启动定时器T1若按下S1?设置定时值、启动定时器T0调用计费显示函数主程序NT1_1month当月灯亮总时间清零溢出?计数1个月?返回设置定时值、启动定时器T1Y 定时1个月中断子程序YNT0_30s设置灯灭设置定时值、启动定时器T0溢出?计数30s?Y返回N定时30s中断子程序NY声明变量、设置初始值读取数组数据、处理数据输出延时2ms、下一个扫描码Ndisptime4次扫描?返回Y灯亮总时间显示函数声明变量、设置初始值读取数组数据、处理数据输出延时2ms、下一个扫描码Ndispmoney4次扫描?返回Y计费显示函数(2)程序代码:#include #define SEG P0/段选线接至P0 #define SCANP P2/位选线接至P2sbit LAMP=P12;/灯接至P1.2sbit S1=P34;/开关S1接至P3.4sbit S2=P33;/开关S2接至P3.3,外部中断INT1,显示时间(h)#define count 50000/声明计数值,0.05s#define TH (65536-count)/256/声明计数高8位#define TL (65536-count)%256/声明计数低8位char count_T0=0;/计数T0中断次数char count_T1=0;/计数T1中断次数void debouncer(void);void delay1ms(int);/声明动态显示延时x(ms)函数void dispmoney(void);/声明计费显示函数char code TAB11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;char dispm4=0,0,0,0;/设置计费显示初值char dispt4=0,0,0,0;/设置计时显示初值char seconds=0;char scan=1;int t=0;/ 声明灯在一个月内的总点亮时间t变量int l=0;char p=0;char q=0;main()IE=0x8e;/允许T0、INT1、T1中断TMOD=0x11;/T0采用Mode1、T1采用Mode1TH1=TH;TL1=TL;TR1=1;/定时器T1启动LAMP=1;/设置灯初始为熄灭状态while(1)if(S1=0)/开关S1若按下,模拟传感器检测到人来debouncer();if(S1=0)TH0=TH;TL0=TL;TR0=1;/定时器T0启动LAMP=0;/灯点亮dispmoney();/显示电费值void T0_30s(void)interrupt 1/T0定时器中断,计时30sTH0=TH;TL0=TL;if(+count_T0=20)/计数溢出次数,20*0.05=1scount_T0=0;/重新计数seconds+;if(seconds=30)/计数30次,30*1=30sseconds=0;/重新计数LAMP=1;/设置灯灭t+;/灯点亮时间加1TR0=0;/停止T0定时器void T1_1month(void) interrupt 3/T1中断,定时1 monthTH1=TH;TL1=TL;if(+count_T1=20)/1scount_T1=0;l+;if(l=3600)/1hl=0;p+;if(p=24)/1 dayp=0;q+;if(q=30)/1 monthq=0;t=0;/灯点亮总时间t清零 void disptime(void) interrupt 2 /INT1中断,显示灯当月的总点亮时间char j;int time;scan=0x01;for(j=0;j4;j+)time=t*30/36;dispt3=TABtime/1000;dispt2=0x7f&TABtime%1000/100;dispt1=TABtime%100/10;dispt0=TABtime%10;SEG=0xff;SCANP=scan;SEG=dispt3-j;delay1ms(2); /延时约2ms,4*2=8ms16ms,可实现动态显示scan=1;void dispmoney(void)/计费显示函数char i;int money;scan=0x01;for(i=0;i4;i+)money=t*293/30;dispm3=TABmoney/1000;dispm2=0x7f&TABmoney%1000/100;dispm1=TABmoney%100/10;dispm0=TABmoney%10;SEG=0xff;SCANP=scan;SEG=dispm3-i;delay1ms(2);scan=1; void debouncer(void)/去抖动函数int k;for(k=0;k2400;k+);void delay1ms(int x)/延时x(ms)函数int m,n;for(m=0;mx;m+)for(n=0;n120;n+);5.仿真调试:按钮开关S1模拟人来,灯亮后定时30s,灯灭,数码管刷新电费值一次,单位(元),精确到0.01元;按钮开关S2被按下时,数码管显示当月灯亮总时间,单位(小时),精确到0.01小时。未按下开关按下开关S1,定时30s开始30s定时结束,数码管显示当月电费按下S2,显示当月灯点亮总时间6.实验总结通过本次单片机大作业的完成,从刚开始的硬件电路设计,到软件程序的编写,然后经过软件Proteus的仿真调试,接着进行电路板焊接,到最后调试成功,历时三周左右,让我受益颇多。其中,也遇到很多的困难,比如元器件型号的选择、购买,程序各部分单元的组合结构一改再改,还有软

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论