基于51单片机的带坐姿检测语音提醒智能护眼台灯proteus仿真原理图PCB
功能介绍:
0.本系统采用STC89C52作为单片机
1.LCD1602液晶实时显示当前时间/灯光亮度/姿势检测
2.姿势不正确时,蜂鸣器报警,同时语音提醒
3.具备久坐提醒功能,到达提醒时间,蜂鸣器报警,同时语音提醒
4.有人时根据环境光强调整台灯亮度,人离开后,灯光调到最暗,当回到座位自动变亮,以节约用电
5.可通过按键更改当前时间
6.采用DC002作为电源接口可直接输入5V给整个系统供电
原理图:
PCB :
主程序:
#define __MAIN_C
#include <reg52.h>
#include "main.h"#define ALARM_TIME 1 //定时提醒时间,最大59分钟bit dispFlag = 1;
bit setFlag = 0;
unsigned char setIndex = 0;
unsigned char lightValue;
char dispMode = NORMAL;
bit bodyFlag = 0;
bit postureRightFlag = 0;unsigned char lampAPWM = 1;
unsigned int time500us = 0;
unsigned char timeMinuteBuf = 0;
unsigned char timeSecondBuf = 0;unsigned char alarmDelay = 0;void main()
{//初始化UART_Init(); //初始化串口Timer0_Init(); //初始化定时器LCD_Init();DS1302_Init();DelayMs(20);//开机显示LCD_DispStr(0, 0, " Welcome! ");DelayS(2);LCD_Clear();DS1302_ReadTime();timeMinuteBuf = timeBufDec[5]; //重置计时timeSecondBuf = timeBufDec[6]; //重置计时while(1){// LCD1602液晶显示if (dispFlag == 1 && setFlag == 0){dispFlag = 0;DS1302_ReadTime();if (BODY_PIN == 0) //有人{bodyFlag = 1; //有人标志LampCtr();if (POSTURE_PIN == 0) //姿势正确{postureRightFlag = 1; //姿势正确标志}else{postureRightFlag = 0; //姿势不正确标志UART_SendStr("请注意坐姿\r\n", 12); //发送数据DelayS(3);}if (timeMinuteBuf >= (60 - ALARM_TIME)) //分钟大于(60 - ALARM_TIME)的处理{if (timeBufDec[5] == (timeMinuteBuf + ALARM_TIME - 60)) //ALARM_TIME分钟到{if (timeBufDec[6] == timeSecondBuf){alarmDelay = 10; //蜂鸣器报警UART_SendStr("请注意休息\r\n", 12); //发送数据timeMinuteBuf = timeBufDec[5]; //重置计时timeSecondBuf = timeBufDec[6]; //重置计时}}}else{if (timeBufDec[5] == timeMinuteBuf + ALARM_TIME) //ALARM_TIME分钟到{if (timeBufDec[6] == timeSecondBuf){alarmDelay = 10; //蜂鸣器报警UART_SendStr("请注意休息\r\n", 12); //发送数据timeMinuteBuf = timeBufDec[5]; //重置计时timeSecondBuf = timeBufDec[6]; //重置计时}}}}else{bodyFlag = 0; //没人lampAPWM = 1; //将台灯亮度调到最暗timeMinuteBuf = timeBufDec[5]; //重置计时timeSecondBuf = timeBufDec[6]; //重置计时}if (dispMode == NORMAL){DispNormal(setIndex);}Alarm();}KeyProcess();}
}void LampCtr()
{lightValue = 99 - 99 * ReadADC1(AIN0_GND) / 255; //读取当前光照强度if (lightValue <= 30){lampAPWM = 3;}else if (lightValue > 30 && lightValue <= 60){lampAPWM = 2;}else if (lightValue > 60){lampAPWM = 1;}}void Alarm(void)
{if (alarmDelay > 0) //蜂鸣器响{alarmDelay--;BUZZER = 0;}else{BUZZER = 1;}
}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 unsigned char ACount = 0;static unsigned int cnt;TL0 = 0x33; //设置定时初值TH0 = 0xFE; //设置定时初值 500uscnt++;if (cnt >= 500) //250ms刷新一次状态{cnt = 0;dispFlag = 1;}ACount++;if (ACount <= lampAPWM) //占空比调节{LAMPA = LAMP_ON;}else if ((ACount > lampAPWM) && (ACount <= 3)){LAMPA = LAMP_OFF;}else{ACount = 0;}}/************************* 串口配置 *************************/
void UART_Init(void)
{SCON = 0x50;TH2 = 0xFF;TL2 = 0xDB;RCAP2H = 0xFF; //(65536-(FOSC/32/BAUD)) BAUD = 9600 FOSC = 11059200RCAP2L = 0xDB;/*****************/TCLK = 1;RCLK = 1;C_T2 = 0;EXEN2 = 0;/*****************/TR2 = 1;ES = 0; //打开串口中断EA = 1; //打开总中断}/************************* 串口发送字节 *************************/
void UART_SendByte(unsigned char dat) //串口发送单字节数据
{unsigned char time_out;time_out = 0;SBUF = dat; //将数据放入SBUF中while ((!TI) && (time_out < 100)) //检测是否发送出去{time_out++;DelayUs10x(2);} //未发送出去 进行短暂延时TI = 0; //清除ti标志
}/************************* 串口发送字符串 *************************/
void UART_SendStr(unsigned char *s, unsigned char length)
{unsigned char num;num = 0x00;while (num < length) //发送长度对比{UART_SendByte(*s); //放松单字节数据s++; //指针++num++; //下一个++}
}
仿真演示视频:
https://www.bilibili.com/video/BV1gZ4y1h7Yx/
实物演示视频:
https://www.bilibili.com/video/BV13Y4y167WM/
基于51单片机的带坐姿检测语音提醒智能护眼台灯proteus仿真原理图PCB相关推荐
- 基于51单片机红外遥控人体感应自动车库门控制设计(程序+Proteus仿真+原理图+PCB图+参考论文+开题报告+任务书等)
一.硬件方案 单片机的红外遥控人体感应自动门控制系统设计的实现主要有电源5V供电.单片机最小系统.红外感应遥控模块,红外一体接收头,按键电路,步进电机驱动电路,指示灯电路组成.. 二.设计功能 1.如 ...
- 基于51单片机的高速汽车列车汽车速度测量及报警装置proteus仿真原理图PCB
功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶显示测量车速,同时蓝牙串口上报速度测量结果 2.红外避障模块1触发,启动测速定时器,红外避障模块2触发,停止定时器,完成测速 ...
- 基于51单片机霍尔转速测量温度电机保护PWM调速设计proteus仿真原理图PCB
功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示温度,PWM档位值和当前转速 2.可通过按键控制电机启动,停止,正转,反转,加速,减速 3.温度超过50℃蜂鸣器报警,且 ...
- 54、基于51单片机饮水机温度水位控制无线蓝牙APP控制报警系统设计(程序+原理图+PCB源文件+Proteus仿真+参考论文+开题报告+元器件清单等)
方案的选择 方案一:采用51单片机作为控制核心,配合无线蓝牙模块.水温加热模块继电器开关.基于Dallas单线数字式的DS18B20温度传感器模块.蜂鸣器报警模块.按键模块.LCD1602液晶显示器模 ...
- T027基于51单片机的智能窗帘窗户控制系统proteus仿真原理图PCB
功能: 0.本系统采用单片机STC89C52作为系统的主控芯片 1.系统采用LCD1602液晶实时显示当前时间/窗帘状态/光照强度 2.系统具有四个功能按键,支持手动按键/定时/遥控三种模式控制窗帘 ...
- 基于51单片机的6位毫秒百分秒级秒表倒计时器proteus仿真
#include <AT89X52.H> #define uint unsigned int //宏定义无符号整型数据 #define uchar unsigned char //宏定义无 ...
- 51单片机计算器_基于51单片机的倒计时温度检测报警器
基于51单片机的倒计时温度检测报警器 学习单片机断断续续半年了,在学长学姐的教学帮助下,完成了51单片机的入门学习,开始实践做项目,在一周时间内设计和制作出个人项目.起初,我设计和选择的是12864显 ...
- 基于51单片机的倒计时温度检测报警器
广西河池学院 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来自河池学院:OpenWRT无线路由组 写作时间:2020年8月12日16:00:03 基于51单片机的倒计时温度检 ...
- 基于51单片机的多路温度检测调节串口传输系统
本设计基于51单片机的多路温度检测调节串口传输系统(仿真+源码+视频讲解) 仿真:proteus8.9 程序编译器:keil 4 编程语言:C语言 编号C0009 [腾讯文档]C0009 网盘链接 资 ...
- 基于51单片机的SHT11温湿度检测调节系统(LCD12864显示)
目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现(protues8.7) 程序(Keil5) 全部资料(压缩文件) 具体实现功能 (1)实时检测温湿度值,LCD12864分别显示温度值 ...
最新文章
- 对 Thinking in java 4th Edition I/O DirList.java的疑问
- MyEclipse2014安装svn插件
- 单链表按顺序插入节点
- java垃圾回收到老年代次数,Java垃圾回收之回收算法
- 用Vue来实现购物车功能(二)
- 不实例化图片,获取图片宽高的方法(vb.net)
- while求和java,while语句基本练习(求和思想,统计思想)
- 离职 Oracle 首席工程师怒喷:MySQL 是“超烂的数据库”,建议考虑 PostgreSQL
- SQL数据库面试题以及答案(50例题)
- 知道创宇获CNNVD年度优秀技术支撑单位及漏洞预警报送专项奖
- 随机森林python反欺诈_携程金融自动化迭代反欺诈模型体系
- UVA-816 Abbott's Revenge (bfs)
- JVM 垃圾回收机制主要原理
- python交集和补集的符号_python数组并集交集补集
- FIL是否值得长期持有以及未来评估
- 微信小程序实现圆形菜单弹出选中动画
- PMI推出新认证:PgMP 项目集管理
- 哪个ppt模板网站好
- Linux——vi/vim文本编辑器、用户管理、关机重启的相关命令
- 2022年最新浙江道路运输安全员真题题库及答案
热门文章
- 设计模式快速入门——结构型模式之装饰者模式(Java)
- 修复 WordPress 的 is_dir(): open_basedir restriction in effect. 错误
- 2021年税收优惠政策,如何解决高额的税负压力?
- 【三维重建】特征检测与匹配
- python中奇奇怪怪的注释方式
- [工业自动化-1]:PLC架构与工作原理
- 钟表,可以回到起点,却已不是昨天。使人成熟的是经历,而不是岁月
- 家具协会理事长称达芬奇合法
- 安捷伦Agilent B1500A半导体测试仪
- 【NOIP普及组】1961:【13NOIP普及组】计数问题