概述
目录
- 摘要
- 一、课程设计任务书
- 二、整体路线
- 三、电路与程序设计
- 总结
摘要
本文介绍了利用数字温度传感器DS18B20、光敏电阻LDR、人体红外传感器HC-SR501等作为识别传感器,基于PIC16F887的智能小夜灯装置。该系统通过通过时间模块判断是否是晚上(22:00~7:00),LDR判断光照强度是否足够,通过人体红外传感器判断是否有人经过,若以上三条件同时满足,点亮LED灯30秒,若不满足,则不动作。在LCD上显示日期及时间和DS18B20获取的温度值,通过按键可以设定闹钟,闹钟时间到,蜂鸣器间断响3秒。系统可以通过串口通信实现远端调试。该系统实际运行稳定,仿真精度较高,基本全部达到了题目的最高要求。
提示:以下是本篇文章正文内容,下面案例可供参考
一、课程设计任务书
1、课程设计基础内容及要求
(1)通过时钟芯片DS1302,读取当前时间,并将其显示在LCD屏上(年月日时分秒),判断是否是晚上(22:00~7:00)。
(2)通过读取光敏传感器LDR得知当前的光照强度,判断光照强度是否足够(阈值为30)
(3)通过人体红外传感器HC-SR501(仿真时可用按键做输入信号)判断是否有人经过。
(4)(1)(2)(3)都满足,点亮LED灯30秒后自动熄灭,若不满足,则不动作。
(5)通过按键可以设定闹钟,闹钟时间到,蜂鸣器间断响3秒
2.课程设计拓展内容及要求
(1)通过数字温度传感器DS18B20采集温度,并显示在LCD上
(2)可以通过按键进行时间设定
(3)可以通过串口通信实现远端调试
(4)可以通过按键手动开关灯
二、整体路线
三、电路与程序设计
- 串口:
- 串口发送:加回车换行,不加校验,不用HEX,波特率9600
- 串口发送命令:(回车)ON 开灯 (回车) OFF 关灯
- 串口助手打开COM1,COM2为COMPIM,COM1和COM2TX、RX交叉对接,所以COMPIM的RX接RC7/RX,TX借RC6/TX
- 虚拟终端:两个分别接收TX和RX
- 按键:
- 按键HC_SR501:模拟人体红外传感器,按下为有人经过。当晚上有人经过,且光照强度不足可亮灯30s
- 按键1:设置模式,顺序为时钟模式,时间调整模式,闹钟模式
- 按键2:数值加
- 按键3:数值减
- 按键4:向左移位
- 按键5:向右移位
- 按键6:开灯关灯
- LED:
- 绿LED:小夜灯
- DS1302:
- 时钟初始时间:2020 11-15 00:00:00
- 闹钟初始时间:00:00:20
- 闹钟时间到间断蜂鸣3s
- 通过时间模块判断晚上(22:00~7:00)
- DS18B20:
- 采用一线通信接口,读取温度显示在屏幕上(初始上电为85度,因为温度寄存器的初值为85)
- LDR:
- 光敏电阻,判断光照强度是否足够,小于等于30时可以亮灯
DS1302代码如下(示例):
//---------------写数据--------------//
void Ds1302Write(uchar addr, uchar dat)
{
uchar n;
RST = 0;
NOP();
SCLK = 0;//先将SCLK置低电平。
NOP();
RST = 1; //然后将RST(CE)置高电平。
NOP();
for (n=0; n<8; n++)//开始传送八位地址命令
{
DSIO = addr & 0x01;//数据从低位开始传送
addr >>= 1;
SCLK = 1;//数据在上升沿时,DS1302读取数据
NOP();
SCLK = 0;
NOP();
}
for (n=0; n<8; n++)//写入8位数据
{
DSIO = dat & 0x01;
dat >>= 1;
SCLK = 1;//数据在上升沿时,DS1302读取数据
NOP();
SCLK = 0;
NOP();
}
RST = 0;//传送数据结束
NOP();
}
//------------读数据------------//
uchar Ds1302Read(uchar addr)
{
uchar n,dat,dat1;
RST = 0;
NOP();
SCLK = 0;//先将SCLK置低电平。
NOP();
RST = 1;//然后将RST(CE)置高电平。
NOP();
for(n=0; n<8; n++)//开始传送八位地址命令
{
DSIO = addr & 0x01;//数据从低位开始传送
addr >>= 1;
SCLK = 1;//数据在上升沿时,DS1302读取数据
NOP();
SCLK = 0;//DS1302下降沿时,放置数据
NOP();
}
NOP();
TRISCbits.TRISC5=1;
for(n=0; n<8; n++)//读取8位数据
{
dat1 = DSIO;//从最低位开始接收
dat = (dat>>1) | (dat1<<7);
SCLK = 1;
NOP();
SCLK = 0;//DS1302下降沿时,放置数据
NOP();
}
RST = 0;
NOP();
TRISCbits.TRISC5=0;
return dat;
}
//-----------写初始化时间-----------//
void Ds1302Init(void)
{
uchar n,dat;
RST = 0;
SCLK = 0;
Ds1302Write(0x8E,0); //禁止写保护,就是关闭写保护功能
for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年
{
Ds1302Write(WRITE_RTC_ADDR[n],SET_TIME[n]);
}
Ds1302Write(0x8E,0x80); //打开写保护功能
Trans_Alarm_bit();
}
DS18B20代码如下(示例):
void ONE_WIRE_RESET(void)//DS18B20复位
{
DQ_DIR=0;
DQ=0;
__delay_us(480); //延时480us,480-960us之间
DQ_DIR=1;
while(DQ==1);
__delay_us(100);
}
void WRITE_BYTE(char A)
{
char i,j;
for(i=0;i<8;i++)
{
if((A&0x01)==0x01)
j=1;
else
j=0;
A=A>>1;
if(j==1)
{
DQ_DIR=0;
DQ=0;
__delay_us(4);//1us
DQ_DIR=1;
__delay_us(30);
}
else
{
DQ_DIR=0;
DQ=0;
__delay_us(35);
DQ_DIR=1;
}
}
}
char READ_BYTE(void)
{
char i,A;
A=0;
for(i=0;i<8;i++)
{
A=A>>1;
DQ_DIR=0;
DQ=0;
__delay_us(4);
DQ_DIR=1;
__delay_us(4);
if(DQ==1)
A+=0x80;
__delay_us(20);
}
return(A);
}
总结
这就是目前单片机课设题目,代码和实验报告全部开源,代码可能会跟描述有一些出入,是增加了老师现场布置的三题补充,兼容没有调好就先注释了
最后
以上就是淡定舞蹈为你收集整理的智能小夜灯(基于PIC16F887)摘要一、课程设计任务书二、整体路线三、电路与程序设计总结的全部内容,希望文章能够帮你解决智能小夜灯(基于PIC16F887)摘要一、课程设计任务书二、整体路线三、电路与程序设计总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复