肿瘤康复网,内容丰富有趣,生活中的好帮手!
肿瘤康复网 > 基于51单片机的智能护眼台灯设计proteus仿真原理图PCB

基于51单片机的智能护眼台灯设计proteus仿真原理图PCB

时间:2021-11-05 11:26:12

相关推荐

功能介绍:

0.本系统采用STC89C52作为单片机

1.LCD1602液晶实时显示当前时间/环境光强/工作模式

2.当检测到人体距离灯光太近时,蜂鸣器报警提醒

3.当使用时间超过设定阈值时,蜂鸣器报警提醒

4.可通过按键更改当前时间/工作模式/灯光亮度

原理图:

PCB:

主程序:

#define __MAIN_C#include <reg52.h>#include "main.h"//变量定义bit dispFlag = 1;bit setFlag = 0;bit alarmFlag = 0;unsigned char alarmTimeCnt = 0;unsigned char setIndex = 0;unsigned char timeLimit[2] = {0, 1};int lightValue;char dispMode = 0;bit autoFlag = 0;bit lampASwitch;unsigned char lampAPWM = 2;unsigned int time500us = 0;unsigned char second = 0;unsigned int minute = 0;void main(){//初始化LCD_Init();DS1302_Init();Timer0_Init();DelayMs(20);//开机显示LCD_DispStr(0, 0, " Welcome! ");DelayS(1);LCD_Clear();DS1302_ReadTime();DispNormal(setIndex);lampASwitch = ON;while(1){// LCD1602液晶显示if (dispFlag == 1){dispFlag = 0;if (lampASwitch == ON) //灯光打开{LampCtr(); //灯光控制}if (alarmFlag == 1) //响铃1s{BUZZER = ON; //蜂鸣器报警alarmTimeCnt++;if (alarmTimeCnt >= 4){alarmTimeCnt = 0;alarmFlag = 0;}}else{BUZZER = OFF; }if (setFlag == 0) //非设置状态{DS1302_ReadTime();if (dispMode == DISP_NORMAL){DispNormal(setIndex);}else if (dispMode == SET_TIME_LIMIT){DispSetLimit(setIndex);}}}if (lampASwitch == ON) //灯光打开状态{if (minute >= 60 * timeLimit[0] + timeLimit[1]) //时间到设定阈值提醒一次{minute = 0;alarmFlag = 1;}if (IRFLAG == 0) //距离太近提醒一次{alarmFlag = 1;}}else{second = 0;minute = 0;alarmFlag = 0;BUZZER = OFF;}KeyProcess(); //按键检测和处理}}void LampCtr(void){lightValue = 99 - 99 * ReadADC1(AIN0_GND) / 255; //读取当前光照强度if (autoFlag){if (lightValue <= 30){lampAPWM = 4;}else if (lightValue > 30 && lightValue <= 60){lampAPWM = 3;}else{lampAPWM = 2;}}}void Timer0_Init(void){TMOD &= 0xF0;TMOD |= 0x01;TL0 = 0x33;//设置定时初值TH0 = 0xFE;//设置定时初值 500usTR0 = 1; //启动T0计时ET0 = 1; //打开T0中断EA = 1; //打开总中断}void Timer0_Intterupt(void) interrupt 1{static int cnt = 0;static unsigned char ACount = 0;static unsigned int time500us = 0;TL0 = 0x33;//设置定时初值TH0 = 0xFE;//设置定时初值 500uscnt++;if (cnt >= 500) //250ms刷新一次状态{cnt = 0;dispFlag = 1;if (setFlag == 1){LCD_WriteCommand(0x0F, 0);LCD_WriteCommand(0x0F, 0);}else{LCD_WriteCommand(0x0C, 0);LCD_WriteCommand(0x0C, 0);}}if (lampASwitch == ON) //灯光PWM控制{ACount++;if (ACount <= lampAPWM) //占空比调节{LAMPA = ON;}else if ((ACount > lampAPWM) && (ACount <= 4)){LAMPA = OFF;}else{ACount = 0;}}else{LAMPA = OFF;} if (lampASwitch == ON){//灯开启后计时time500us++;if (time500us >= 2000){time500us = 0;second++;if (second >= 60){second = 0;minute++;}}}}

仿真演示视频:

/video/BV1Yg411d7ym/

实物演示视频:

/video/BV1b34y1E7Fz/

如果觉得《基于51单片机的智能护眼台灯设计proteus仿真原理图PCB》对你有帮助,请点赞、收藏,并留下你的观点哦!

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