900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 基于51单片机的智能路灯照明控制系统proteus仿真原理图程序设计

基于51单片机的智能路灯照明控制系统proteus仿真原理图程序设计

时间:2019-09-07 09:59:27

相关推荐

基于51单片机的智能路灯照明控制系统proteus仿真原理图程序设计

硬件设计

(末尾附文件)

仿真文件1:功能如下图所示

原理图

仿真文件2:

程序设计

/******定义头文件**************/#include<reg52.h> #include <INTRINS.H> #include"lcd.h"#include "ds1302.h"/******类型重定义*************/typedef unsigned char uchar;typedef unsigned int uint;/******引脚定义***************/sbit key_1 = P1^0;//定义4个按键sbit key_2 = P1^1;sbit key_3 = P1^2;sbit key_4 = P1^3;sbit key_5=P3^0;//手动/自动模式切换sbit key_6=P3^1;//手动模式路灯开关sbit led_1 = P1^4;sbit Beep = P2^3;//定义声光报警sbit AD_clk = P3^4;//定义ADC0832 sbit AD_do = P3^5; sbit AD_di = P3^5;sbit AD_cs = P3^6; sbit red_sr = P3^7;//红外检测/******定义变量***************/char hour,min,sec;//定义小时、分钟、秒变量char time;char work_time_Start = 16,work_time_End = 5;//设定起始、结束时间bit light_flag; uchar light;//定义光照强度uchar light_limit;//定义光照阈值uchar Data;/******声明函数***************/void delayms(unsigned int x);//延时函数void display(); //显示void Read_time();void set_work_time();//设定工作时间void set_limit_light();//设定光照阈值void work();//工作状态void set_time();//设定时间void delay10ms(int d);void InitTimer0(void);//T0定时器初始化程序uchar AD(bit Channel);//ADC0832程序void kongzhi(){if(key_6==0){led_1=1;}else{led_1=0;}}void qiehaun(){if(key_5==0){kongzhi();}else{work();//if(red_sr==1)//{//led_1=1;//}//if(red_sr==0)//{//led_1=0;//}}}void main(){Beep = led_1 = 0;//声光报警,LED关闭InitTimer0();//T0定时器初始化程序LcdInit();//lcd1602初始化while(1){Ds1302ReadTime();//读取时间set_work_time();//设定工作时间set_limit_light();//设定光照阈值set_time();light = AD(0);//读取ADC0832数值 display(); //显示qiehaun();//work();//工作状态}}void Timer0Interrupt(void) interrupt 1{static uchar count;TH0 = 0x0D8;TL0 = 0x0F0;count ++;if(count>=100){time ++;count = 0;}//add your code here}/******************************************************************************** 函数名 : InitTimer0()* 函数功能 : T0定时器初始化程序* 输入 : 无* 输出: 无*******************************************************************************/void InitTimer0(void){TMOD = 0x01;TH0 = 0x0D8;TL0 = 0x0F0;EA = 0;ET0 = 1;TR0 = 1;}/******************************************************************************** 函数名 : work()* 函数功能 : 工作状态* 输入 : 无* 输出: 无*******************************************************************************/void work(){Read_time();//转换时间if(work_time_End!=0 && work_time_Start!=0)//工作时间已设置{if(hour >= work_time_Start)//当前时间大于起始时间,如起始时间为19:00,当前时间为21:00。{Data = AD(1);led_1 = 1;//点亮LEDif(Data < 50)//未检测到LED点亮Beep = 1;//声光报警else//检测到Led点亮Beep = 0;//停止报警}else if(hour < work_time_End) //当前时间小于结束时间,如结束时间为06:00,当前时间为04:00。{if(red_sr)//检测到人或车{time = 0;light_flag = 1;//LED标志置1,开始T0定时器计时,点亮LED,10s后LED标志清零,LED熄灭}if(light_flag)//LED标志置1,检测到人或车{led_1 = 1;//点亮LEDEA = 1;//开启中断if(time > 10)//10s后{light_flag = 0;//LED标志清零EA = 0; //关中断time = 0; //计时清零}Data = AD(1);if(Data < 50)//未检测到LED点亮Beep = 1;//声光报警else//检测到Led点亮Beep = 0;//停止报警}elseled_1 = 0;}else{if(light < light_limit){led_1 = 1;Data = AD(1);if(Data < 50)//未检测到LED点亮Beep = 1;//声光报警else//检测到Led点亮Beep = 0;//停止报警}elseled_1 = Beep = 0;}}}/******************************************************************************** 函数名 : set_work_time()* 函数功能 : 设定工作时间* 输入 : 无* 输出: 无*******************************************************************************/

.

文件仅供参考

链接:/s/1Sl6u_BGjrjMKFC8JS90O-A

提取码:67xo

.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。