模拟路灯控制系统的设计_第1页
模拟路灯控制系统的设计_第2页
模拟路灯控制系统的设计_第3页
模拟路灯控制系统的设计_第4页
模拟路灯控制系统的设计_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

附录附录A元件清单表2元件清单元件名称元件参数数量电解质电容25v470μF2电容0.1μF1电容33PF4开关六角开关2变压器12V输出20w/DB-20W1稳压芯片LM7805TO-2201整流桥2W102A/1000V1LED发光二极管BT1015排阻10K4晶振12MHz1晶振32.768KHz1按键6*6*5mm立式4脚轻触开关9单片机AT89S521液晶LCD16021时钟芯片DS13021电阻200Ω1电阻1K3电阻470Ω7可充电纽扣电池3.6V60mANI-MH1电阻20K3电阻510Ω3电阻200K3 电压比较器LM3246三极管S90122光敏电阻GL35473电阻4.7K74光电传感器ST1783有源蜂鸣器HYT-12051附录B程序清单/****************************************************************课题名称:模拟路灯控制系统作者:周海湖指导老师:王诚梅完成时间:2016年5月功能:系统上电或按键复位后能自动提示界面,进入准备工作状态。系统根据环境明暗自动亮灭路灯,当路灯出现故障,能发出声光报警,能根据交通环境自动亮灭路灯,能设定路灯亮灭的时间,可以独立控制每个路灯。硬件说明:单片机AT89S52,晶振12MHZ,输入设备-接在P1口的8位独立式键盘,输出设备-LCD12864液晶屏,P2口接LCD12864D0至D7,RS、RW、EN分别接到单片机的P3.0、P3.1、P3.2。时钟模块-DS1302模块的CLK、IO、RST分别接到单片机的P3.4、P3.3、P3.5。****************************************************************/#include<reg52.h>#include"intrins.h"#defineLCD_DataP2sbitP00=P0^0;sbitP01=P0^1;sbitP02=P0^2;sbitP03=P0^3;sbitP04=P0^4;sbitP05=P0^5;sbitP07=P0^7;sbitP36=P3^6;sbitP37=P3^7;sbitDS1302_CLK=P3^4;sbitDS1302_IO=P3^3;sbitDS1302_RST=P3^5;sbitLCD_RS=P3^0;sbitLCD_RW=P3^1;sbitLCD_E=P3^2;ucharsec,min,hour,day,month,year;uchartemp0 ;ucharcount,count1,Hour1,Minite1,v,SB,SC,m,n;charLed1onH,Led1onM,Led2onH,Led2onM,Led1offH,Led1offM,Led2offH,Led2offM;/**************延时*********************/voiddelay(unsignedinta)//延时1MS/次{unsignedchari;while(--a){for(i=0;i<125;i++);}}/*************************************/voiddelays(){;;}/***************1302时钟程序****************/voidWriteDs1302Byte(unsignedchartemp){unsignedchari;for(i=8;i>0;i--) {DS1302_CLK=0;DS1302_IO=temp&0x01;delays();DS1302_CLK=1;temp>>=1;delays();}}/***********************************/voidWriteDs1302(unsignedcharaddress,unsignedchardat){DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;delay(1);WriteDs1302Byte(address);WriteDs1302Byte(dat);DS1302_CLK=1;DS1302_RST=0;}/***********************************/unsignedcharread_byte(){unsignedchari;for(i=8;i>0;i--){if(DS1302_IO)temp0=temp0|0x80;DS1302_CLK=1;delays();DS1302_CLK=0;temp0=temp0>>1;delays();}returntemp0;}/**************************************************/unsignedcharReadDs1302(unsignedcharaddress){unsignedchartemp;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;WriteDs1302Byte(address);temp=read_byte();DS1302_RST=0;DS1302_CLK=1;returntemp;}/*********************1302初始化***********************/voidInitDS1302(){{WriteDs1302(0x8e,0x00);delay(5);WriteDs1302(0x8c,0x16);//写入年份16年delay(5);WriteDs1302(0x8a,0x04);//写入星期4delay(5);WriteDs1302(0x88,0x05);//定入月分5月delay(5);WriteDs1302(0x86,0x12);//写入日期12日delay(5);WriteDs1302(0x84,0x02);//写入小时2点delay(5);WriteDs1302(0x82,0x00);//写入秒00分delay(5);WriteDs1302(0x80,0x00);delay(5);WriteDs1302(0x8e,0x80);//控制命令,WP为1,禁止写操作}}/***************检查忙否*****************/voidCheckstates(){unsignedchardat;LCD_RS=0;LCD_RW=1;DO{LCD_E=1;//下降沿_nop_();//保持一定间隔 _nop_();dat=LCD_Data;_nop_(); _nop_();LCD_E=0;}while((dat&0x80)==1);}/**********LCD写数据*******************************/voidWriteDataLCD(unsignedchardat){Checkstates();LCD_RS=1;LCD_RW=0;LCD_Data=dat;LCD_E=1;delay(2);LCD_E=0;}/**********LCD写地址*******************************/voidWriteCommandLCD(unsignedcharudat){Checkstates();LCD_RS=0;LCD_RW=0;LCD_Data=udat;LCD_E=1;delay(2);LCD_E=0;}/*************LCD初始化******************************/voidLCDInit(void){WriteCommandLCD(0x38);delay(2);WriteCommandLCD(0x38);delay(2);WriteCommandLCD(0x01);delay(2); WriteCommandLCD(0x06);delay(2); WriteCommandLCD(0x0C);delay(2);}/*************LCD清屏指令**********************/voidLCDClear(void){WriteCommandLCD(0x01);delay(2);}/**********发送内容*********************************/voidLCDSendWord(unsignedchar*p){while(*p>0){WriteDataLCD(*p);p++;}}/*********发送地址*********************************/voidLCDTestWord(biti,unsignedcharword){if(i==0){WriteCommandLCD(word);}else{WriteDataLCD(word);}}/***************LCD显示年************/voidDisplayYear(void){year=ReadDs1302(0x8d);LCDTestWord(0,0x80);LCDSendWord("20");LCDTestWord(1,(year/16)+0x30);LCDTestWord(1,year%16+0x30);LCDTestWord(1,'/');}/***************LCD显示月*************************/voidDisplayMonth(void){month=ReadDs1302(0x89);LCDTestWord(1,(month/16)+0x30);LCDTestWord(1,month%16+0x30);LCDTestWord(1,'/');}/****************LCD显示日**************************/voidDisplayDay(void){day=ReadDs1302(0x87);LCDTestWord(1,(day/16)+0x30);LCDTestWord(1,day%16+0x30);}/**********LCD显示时*********************************/voidDisplayHour(void){hour=ReadDs1302(0x85);LCDTestWord(0,0xc0);LCDTestWord(1,(hour/16)+0x30);LCDTestWord(1,hour%16+0x30);LCDTestWord(1,':');}/**********LCD显示分**********************************/voidDisplayMin(void){min=ReadDs1302(0x83);LCDTestWord(1,(min/16)+0x30);LCDTestWord(1,min%16+0x30);LCDTestWord(1,':');}/**********LCD显示秒**********************************/voidDisplaySec(void){sec=ReadDs1302(0x81);LCDTestWord(1,(sec/16)+0x30);LCDTestWord(1,sec%16+0x30);}/************************************************************/voidUpDate1(void){DisplayHour();DisplayMin();DisplaySec();}/************************************************************/voidUpDate2(void){DisplayYear();DisplayMonth();DisplayDay();}/*************键扫描程序**************/ucharkeys(void){uchartmp; if((P1&0xff)!=0xff){delay(10);if((P1&0xff)!=0xff){ tmp=(P1&0xff); do{}while((P1&0xff)!=0xff); tmp=~tmp; return(tmp); }} return(0);}voidbaojing(void){if(P01==0){ LCDTestWord(0,0x80); LCDSendWord("LED1Broken"); P07=0; } else { LCDTestWord(0,0x80); LCDSendWord("LED1OK");}if(P02==0){ LCDTestWord(0,0xc0); LCDSendWord("LED2Broken"); P07=0; } else { LCDTestWord(0,0xc0); LCDSendWord("LED2OK"); } if(P01==1&&P02==1) P07=1;} voidhuanjing(void){ while(v!=4) { if(P00==1) { P36=1; P37=1; } if(P00==0) { P36=0; P37=0; } baojing(); v=keys(); }} voidjiaotong(void){while(v!=4){SC=0;SB=0; if(P03==0){P36=0;P37=1;while(1){if(P04==0){ P36=1; P37=0;while(1){ if(P05==0) { P36=1; P37=1;SC=1; SB=1;while(P05==0); }if(SC==1)break;}}if(SB==1)break;}}if(P05==0){P36=1;P37=0;while(1){if(P04==0){P36=0; P37=1;while(1){if(P03==0){ P36=1; P37=1;SC=1; SB=1; while(P03==0); }if(SC==1)break;} }if(SB==1)break;}}v=keys();} }voidDisplayrealtime(void){while(v!=4){ UpDate2();UpDate1(); v=keys(); }}voidDisplay1(void){LCDTestWord(0,0x80);LCDSendWord("LED1ON");LCDTestWord(1,(Led1onH/10)+0x30);LCDTestWord(1,(Led1onH%10)+0x30);LCDTestWord(1,':');LCDTestWord(1,(Led1onM/10)+0x30);LCDTestWord(1,(Led1onM%10)+0x30);LCDTestWord(0,0xc0);LCDSendWord("LED1OFF");LCDTestWord(1,(Led1offH/10)+0x30);LCDTestWord(1,(Led1offH%10)+0x30);LCDTestWord(1,':');LCDTestWord(1,(Led1offM/10)+0x30);LCDTestWord(1,(Led1offM%10)+0x30);}voidDisplay2(void){LCDTestWord(0,0x80);LCDSendWord("LED2ON");LCDTestWord(1,(Led2onH/10)+0x30);LCDTestWord(1,(Led2onH%10)+0x30);LCDTestWord(1,':');LCDTestWord(1,(Led2onM/10)+0x30);LCDTestWord(1,(Led2onM%10)+0x30);LCDTestWord(0,0xc0);LCDSendWord("LED2OFF");LCDTestWord(1,(Led2offH/10)+0x30);LCDTestWord(1,(Led2offH%10)+0x30);LCDTestWord(1,':');LCDTestWord(1,(Led2offM/10)+0x30);LCDTestWord(1,(Led2offM%10)+0x30);}voidsettime(void){LCDClear();LCDTestWord(0,0x80);LCDSendWord("PleaseSetTime");delay(2000);LCDClear();v=keys();while(v!=4){ switch(v) { case0:UpDate2(); UpDate1(); v=keys(); break; case2: LCDClear(); LCDTestWord(0,0x80); LCDSendWord("SetSucces"); delay(1000); LCDClear(); while(v==0|v==2) {UpDate2(); UpDate1(); Hour1=hour/16*10+hour%16;Minite1=min/16*10+min%16; if(Hour1==Led1onH&&Minite1==Led1onM) P36=0; if(Hour1==Led2onH&&Minite1==Led2onM) P37=0; if(Hour1==Led1offH&&Minite1==Led1offM) P36=1; if(Hour1==Led2offH&&Minite1==Led2offM) P37=1; v=keys(); } break; case8:LCDClear(); while(v==0|v==8|v==32|v==64|v==128) { Display1(); v=keys(); switch(v) { case32:count1++; if(count1==5) count1=1; break; case64:if(count1>0&&count1<5) { if(count1==1) { Led1onH++; if(Led1onH==24) Led1onH=0; } if(count1==2) { Led1onM++; if(Led1onM==60) Led1onM=0; } if(count1==3) { Led1offH++; if(Led1offH==24) Led1offH=0; } if(count1==4) { Led1offM++; if(Led1offM==60) Led1offM=0; } } break;case128: if(count1>0&&count1<5) { if(count1==1) { Led1onH--; if(Led1onH<0) Led1onH=23; } if(count1==2) { Led1onM--; if(Led1onM<0) Led1onM=59; } if(count1==3) { Led1offH--; if(Led1offH<0)Led1offH=23;}if(count1==4) { Led1offM--; if(Led1offM<0) Led1offM=59; } } break; } } break;case16:LCDClear(); while(v==0|v==16|v==32|v==64|v==128) { Display2(); v=keys(); switch(v) { case32:count1++; if(count1==5) count1=1; break; case64:if(count1>0&&count1<5) { if(count1==1) { Led2onH++; if(Led2onH==24) Led2onH=0; } if(count1==2) { Led2onM++; if(Led2onM==60) Led2onM=0; } if(count1==3) { Led2offH++; if(Led2offH==24) Led2offH=0; } if(count1==4) { Led2offM++; if(Led2offM==60) Led2offM=0; } } break;case128:if(count1>0&&count1<5) { if(count1==1) { Led2onH--; if(Led2onH<0) ed2onH=23; } if(count1==2) { Led2onM--; if(Led2onM<0) Led2onM=59; } if(count1==3) { Led2offH--; if(Led2offH<0) Led2offH=23; } if(count1==4) { Led2offM--; if(Led2offM<0) Led2offM=59; } } break; } }break; }/*****************主函数程序*************************/voidmain(void){LCDInit();LCDClear();InitDS1302();LCDTestWord(0,0x80);LCDSendWord("Enteringsystem");LCDTestWord(0,0xc0);LCDSendWord("PleaseWaiting");delay(2000);LCDClear();LCDTestWord(0,0x80);LCDSendWord("SelectMenu");while(1) { v=keys(); switch(v) { case1:count++; if(count==5) count=1; LCDTestWord(0,0x80); if(count==1) {LCDClear(); LCDSendWord("Realtime"); } if(count==2){ LCDClear(); LCDSendWord("Environment"); } if(count==3) {LCDClear(); LCDSendWord("Traffic"); } if(count==4) {LCDClear(); LCDSendWord("SetTime"); } break

温馨提示

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

评论

0/150

提交评论