硬件设计
仿真文件1: 功能如下图所示
原理图
仿真文件2:
程序设计
/******定义头文件**************/
#include #include #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; //点亮LED if(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; //点亮LED EA = 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; //停止报警 } else led_1 = 0; } else { if(light < light_limit) { led_1 = 1; Data = AD(1); if(Data < 50) //未检测到LED点亮 Beep = 1; //声光报警 else //检测到Led点亮 Beep = 0; //停止报警 } else led_1 = Beep = 0; } } } /******************************************************************************* * 函数名 : set_work_time() * 函数功能 : 设定工作时间 * 输入 : 无 * 输出 : 无 *******************************************************************************/ 文件仅供参考 链接:https://pan.baidu.com/s/1Sl6u_BGjrjMKFC8JS90O-A 提取码:67xo
上一篇:基于51单片机的智能温控风扇
下一篇:基于51单片机的GSM智能快递柜设计
推荐帖子
- D题自激振荡怎么消除啊!!!!!!!!!
- D题自激振荡怎么消除啊!!!!!!!!!D题自激振荡怎么消除啊!!!!!!!!!哥哥啊,谁知道你说的D题题目是什么!回复楼主wsxph的帖子
- wsxph 综合技术交流
- 基于DSP56F805的汽车防抱死制动(ABS)测试系统
- 基于DSP56F805的汽车防抱死制动(ABS)测试系统基于DSP56F805的汽车防抱死制动(ABS)测试系统
- feifei 测试/测量
- 请教STM32视频显示
- 请教各位电工兄弟,有没有什么方案(外加芯片等等),STM32可以显示视频,并且能在上面叠加OSD?请教STM32视频显示怎么沉下去了请教各位电工兄弟,有没有什么方案(外加芯片等等),STM32可以显示视频,并且能在上面叠加OSD?这个要求不大清晰。STM32是MCU,作为主控芯片,可以接显示器,比如彩色液晶,来显示视频,叠加OSD通过一些软件方案(比如uCGUI)应该也可以实现。可以提一些具体的问题
- mosquit stm32/stm8
- 一大波萌妹子正在接近!Java、C++、Python、Ruby、PHP、C#、JS
- 【工程师请注意】!一大波萌妹子正在接近!喂,别装作不认识好嘛!精彩的编程语言拟人化:Java、C++、Python、Ruby、PHP、C#、JS,找找谁是你最熟悉的那个小女孩?Java犹如宫泽贤治的《不畏风雨》中出现的、性格木讷的女孩子。从小就由于迟钝和大食量等特征被别人当作笨蛋,从小学入学开始进入田径部、坚持跑步,在中长跑中经常取得好成绩,给人以活泼的印象。是十分努力的女孩子。她的家境并不算好。父亲Sun是有才能的艺术家,但不擅长理财,在她14岁的时候因为苦于借债积劳成疾而去世。
- linjiang 下载中心专版
- 十万火急!!!请教各位大虾有关TLC2543 A/D转换的问题,望不吝赐教!!!~
- TLC2543输出至MCU后,在HD7279控制下的数码管显示的数值不稳定,一直在变化!以下是小生写的程序:#includeabsacc.h#includereg51.h#includemath.h#includestdio.h#includereg51.h#includeintrins.hsbitcs=P1^4; //csatP1.4sbitclk=P1^5; //clk连接于P1.5sbitdat=P1^2; //dat连接于
- xqw116 单片机
- 【STM32H7S78-DK】基于TouchGFX的可视测距仪
- 【硬件】1、STM32H7S78-DK2、X-NUCLEO-53L4A3TOF评估板【软件环境】1、STM32CubeMX6.122、X-CUBE-TOF3、X-CUBE_TOUCHGFX4、TouchGFX-Designer5、MDK5.38【实现步步骤】1、使用TouchGFX-Designer生成基于STM32H7S78L-DK的TouchGFX工程,设计界面如下:2、使用STM32CubeMX打开工程,配置X-CBUE-TOF如下:
- lugl4313820 stm32/stm8