基于51单片机的定时插座设计

目录

一、方案流程及技术规格书设计

二、系统硬件电路设计

三、软件编写及调试

四、系统调试测试与分析

前言

       随着现代社会的不断进步,人们的生活水平也不断提高,人们对生活品质的要求也就越来越高,开始追求个性化、智能化,追求快捷、高效,充满乐趣的生活方式。人们在居住条件不断改善和提升的基础上,对家庭电器的档次要求越来越高,对家居环境也追求一种人性化、智能化,智能家居也就应运而生。由此,智能电子技术也开始在智能家居电子产品中得到广泛了应用,而网络通信技术的飞速发展,给现代人们的家居生活也带来了全新的体验。智能家居正在口渐兴起,插座智能化正在成为一种趋势。

       智能化系统是从上个世纪八十年代兴起于欧美国家和口本,并于九十年代末进入我国,经过十几年发展,尤其是伴随我国住宅与房地产业的高速发展。“智能插座”是以住宅为平台,集系统、结构、服务、管理、控制于一体,利用先进的网络通讯技术、电力自动化技术、计算机技术、将与居家生活有关的各种设备有机地结合起来,通过网络化的综合管理家中插座设备,来创造一个优质、高效、安全、便利、节能、健康、环保的居住生活环境空间。

       传统的家居插座系统一般采用集中控制器为中心,采用界面按键操作的方式来控制家居家电。采用界面操作控制的弊端是操作复杂,必须在固定地点操作。随着定时识别技术的快速发展,定时识别的准确率和可靠性大幅提高。定时识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。定时识别TTI(Timing To Identify)的最大优势在于使得人机用户界面更加自然和容易使用。

       基于定时识别技术的上述特点,同时结合当代智能家居在控制中的实际需求,我们选择定时控制插座系统。本系统具有良好的开发和应用前景,在智能插座这个概念广为人知的时代,定时控制技术与智能插座的融合,最终会让智能插座引领市场并且走向更为广泛的应用。

 

软件工具准备

软件:

电路设计:protel99 se(up主使用版本) 或者其他版本,或者其他电路设计软件;

单片机开发:Keil5;

调试测试:串口调试助手,逻辑分析仪等;

工具:

电路焊接:电烙铁,SMT(有条件的);

调试:

万用表、示波器(基础入门即可,可以白嫖学校或者公司)USB转串口工具、仿真器;

一、方案流程及技术规格书设计

方案流程设计

技术规格书设计

1.单片机读取实时时钟DS1302时间。

2.实时时钟信号输入单片机IAP15F2K61S2,单片机处理相关数据并在LCD1602液晶显示。

3.有信息提示,当系统检测到达设定定时时间,蜂鸣器发出鸣响, 控制继电器断开电源,控制插座断电。

4.按键可以设置当前时间和定时时间并通过LCD1602显示。

5.设计运用单片机来控制系统,DS1302实时时钟、LCD1602显示和蜂鸣器模块在与它周围连接,模块与模块之间传送信号实现最终要求。本设计采用IAP15F2K61S2芯片。IAP15F2K61S2 是一款有4k字节FLASH的8位单片机。本芯片是一款可以为许多嵌入式控制应用提供高效灵活低成本解决方案的微控器。我对其中原理的理解是:单片机读取DS1302实时时钟芯片时间,在IAP15F2K61S2单片机识别按键操作后,单片机根据命令设定定时时间,使用LCD1602闪烁显示,判断是否检测到达设定时间,检测到蜂鸣器发出鸣响,控制继电器断开电源,控制插座断电。综上总体硬件设计框图如图所示。

系统的硬件整体框图如下:

系统硬件电路设计

2.1微处理控制电路

       单片机采用了宏晶公司的IAP15F2K61S2,单片或微型计算机集成电路中通常有复位电路、晶振时钟电路等,从而避免了外部的复位环和周边晶振。

2.2  LCD1602液晶显示电路

       LCD1602A是LCD1602A的 LCD驱动 IC (HD44780 LCD)的功率电路,以及与 LCD组件连接的16个插头,电路如上图;LCD1602是一个具有32个字符的显示单元,、一行16个字符,可以同时显示两行16*2个字符,电路如图所示

2.3  继电器驱动电路

       继电器由永久磁铁保持释放状态,加上工作电压后,电磁感应使衔铁与永久磁铁产生吸引和排斥力矩,产生向下运动,最后达到吸合状态。1,它具有控制系统和被控制系统之间的互动关系。2,继电器是一种当输入量变化到某一定值时。3,继电器是一种电控制器件,当输入量的变化达到规定要求时。

2.4  DS1302实时时钟电路

       DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。电路如上图。

2.5  蜂鸣器电路设计

       采用被动式蜂鸣器,当蜂鸣器不响时,P33端口输出低电平,Q1不导电,没有电流通过蜂鸣器,P33端口输出4 KHz的方波,Q1在P33高电平时导通,在低压时导通。蜂鸣器的电流也是4千赫兹,因此蜂鸣器发出声音。

2.6 电平转换电路

       本系统采用外部9 V的电源适配器,但 MCU、 LCD均要求5 V的电压,采用7805三端稳压集成电路。

2.7 原理图及PCBA版图

三、软件编写及调试

3.1 protues软件仿真设计

       电路的仿真使用了Proteus软件,Proteus是一款电路设计和模拟的软件。

       上电初始状态的仿真如图,显示当前时间00-00-00

       上电后通过控制按键设定目标时间为00-01-00,当当前时间为00-01-00时继电器闭合,插座通电,蜂鸣器提示。

        一分钟继电器闭合后通过控制按键设定目标时间为00-02-00,当当前时间为00-02-00时继电器断开,插座断电,蜂鸣器提示

四、系统调试测试与分析

4.1  步进电机

/* 步进电机启动函数、angle-需要转过的角度 */

void StartMotor(unsigned long angle)

{

//在计算前关闭中断,完成再开启,避免中断打断计算过程而造成错误

//EA = 0;

beats = (angle * 4076) / 360; // 实测为4076拍转一圈

//EA = 1;

}

void turn_motor_1(unsigned long angle)

{

unsigned char tmp;

unsigned char index;

unsigned char BeatCode[8] = {0xE,0xC,0xD,0x9,0xB,0x3,0x7,0x6}; //步进电机节拍对应的IO控制代码

if (beats != 0) //节拍不为0产生一个驱动节拍

{

tmp = P1; //用tmp把p1口当前值暂存

tmp = tmp & 0xF0; //用&操作清零低4位

tmp = tmp | BeatCode[index];  //用|操作把节拍代码写到低4位

P1 = tmp; //把低4位的节拍代码和高4位的原值送回P1

index++; //节拍输出索引递增

index = index & 0x07; //用&操作实现到8归零

beats--; //总节拍数减一

}

else //节拍为0则关闭电机所有的相

{

P1 = P1 | 0x0F;

}

}

4.2  LCD1602液晶显示

/***写命令***/

void cmd_w(uchar cmd)

{

  RW=0;

  RS=0;

  E=1;

  P1=cmd;

  delay(1);

  E=0;

}

/***写数据***/

void dat_w(uchar dat)

{

  RW=0;

  RS=1;

  E=1;

  P1=dat;

  delay(1);

  E=0;

}

/***清屏****/   /*

void lcd_clear(void)

{

  cmd_w(0x01);   //清屏

  cmd_w(0x02);   //清屏回到左上角

}   */

/***初始化**/

void Lcd1602_init(void)

{

  cmd_w(0x38);

  cmd_w(0x0c);

  cmd_w(0x06);

  cmd_w(0x01);

  cmd_w(0x80);    

}

/***光标定位****/

void gotoxy(uchar x,uchar y) //x是行数,y是列数

{

 if(x==1)

 {cmd_w(0x80+y);}

 else

 {cmd_w(0xc0+y);}

}

void dsp_ch(uchar _ch)

{

dat_w(_ch);

}

4.3  LCD1602液晶显示

void  inputbyte(unsigned char dat)

{

    unsigned char i;

for ( i=8; i>0; i-- )

{

SCLK_1302 = 0;

NOP;

NOP;

if(dat&0x01)

{

DIO_1302 = 1;

}

else

{

DIO_1302 = 0;

}

NOP;

NOP;

dat >>= 1;

SCLK_1302 = 1;

NOP;

NOP;

NOP;

NOP;

}

}

unsigned char  outputbyte(void)

{

    unsigned char i;

unsigned char dat=0;

for ( i=8; i>0; i-- )

{  

dat >>= 1;

NOP;

NOP;

SCLK_1302 = 0;

NOP;

NOP;

if(DIO_1302)

{

   dat|=0X80;

}

NOP;

NOP;

SCLK_1302 = 1;

NOP;NOP;NOP;NOP;

}

return(dat);

}

void write1302 ( unsigned char addr,dat )

{

    CE_1302 = 0;

    NOP;

NOP;

    SCLK_1302 = 0;

    NOP;

NOP;

    CE_1302 = 1;

NOP;NOP;NOP;NOP;

    inputbyte(addr);    

    inputbyte(dat);

    CE_1302 = 0;

}

unsigned char read1302 (unsigned char addr)

{

    unsigned char  dat,data_buff;

    

CE_1302 = 0;

    NOP;

NOP;

    SCLK_1302 = 0;

    NOP;

NOP;

    CE_1302 = 1;

NOP;NOP;NOP;NOP;

    inputbyte(addr);  

    dat=outputbyte();

    SCLK_1302 = 1;

    NOP;

NOP;

    CE_1302 = 0;

    data_buff=dat;

    data_buff/=16;

    dat=dat%16;

    dat=data_buff*10+dat;

    return (dat);

}

void ds1302_init(void)

{

    write1302 (WRITE_PROTECT,0X00);

    write1302 (WRITE_SECOND,0);

    write1302 (WRITE_MINUTE,0);

    write1302 (WRITE_HOUR,0);  

    write1302 (WRITE_DAY,1);

write1302 (WRITE_DATE,1);

    write1302 (WRITE_MONTH,1);  

    write1302 (WRITE_YEAR,0x22);  

    write1302 (WRITE_CHARG,0xA9);   

write1302 (WRITE_TIMEINIT,0x55);

    write1302 (WRITE_PROTECT,0x80);

}

4.3  LCD1602液晶显示

void buzz_on(void)

{

if(buzz_state)

{

buzz_state = 0;

}

else

{

buzz_state = 1;

}

if(buzz_state) //PA8口0.25ms取反

{

BUZZ = 1;

}

else

{

BUZZ = 0;

}

}

void buzz_off(void)

{

BUZZ = 0;

}

void task_buzz(void) //蜂鸣器任务函数,250us运行

{

if(buzz_time) //蜂鸣器响时长

{

buzz_on();

}

else

{

buzz_off();

}

}

void buzz_run_time(void) //buzz_time计时,250us定时器运行,1s减1

{

int i = 4;

if(buzz_time)

{

i--;

if(i == 0)

{

i = 4;

buzz_time--;

}

}

}

void start_buzz(unsigned int _time)

{

buzz_time = _time; //设置蜂鸣器响时长

}

定时开关插座是一款能在特定时间段内控制电器通、断电的开关插座。能实现24小时制和100小时制两种时钟走时模式,在24小时制时钟模式,可以实现二组360天内的任意定时定时时间范围最小为1分钟。可以对家中一些需要在特定时间对电器进行自动断、通电控制,而不需要拔掉插头,减少电器的待机损耗,解决生活中的一些烦恼。 1.设计构思 通过模式(模式0为24小时制,模式1为100小时制)选定时钟的走时方式,作为定时时间的判断标准。然后通过按键设置定时时间分别存储在定时开始数组begin和结束数组end,通过数组的值与时钟的值进行比较,时间在定时数组时间范围内则继电器接通,否则断开。用一个红色发光二极管的亮、灭来指示继电器的通、断的状态。定时智能插座的显示则用LCD来实现。电源部分用220V转换为直流5V给定时开关系统供电。用5个键盘实现时钟、定时的设置及开始/停止等按键设置功能。 2.系统框图 3.详细设计 整个系统的硬件设计可以分为四个模块:单片机最小系统及液晶显示、继电器工作电路、键盘电路。单片机AT89S52、继电器、键盘、LCD12232及其他外围电路。单片机最小系统部分是整个系统的智能控制部分,也是整个系统的核心部分。单片机在实现时钟的同时,也负责键盘检测,驱动液晶显示,实现定时功能,并负责控制继电器的通、断,红色指示灯的亮、灭指示继电器的通、断状态。液晶在单片机的控制下显示时钟、定时组别及定时时间的信息。继电器在单片机的控制下实现通、断,从而达到控制插座通、断电的目的。 3.1单片机最小系统及液晶显示 单片机控制电路是整个系统的核心,完成数据处理和控制任务。 液晶显示屏用来显示时间、定时开始结束时间、定时模式等。 3.2继电器驱动电路 发光二极管用于显示继电器的通断状态,直流电压5V可以通过市电220V经过AC-DC电源模块引出。 3.3键盘电路 使用矩阵键盘能用较少的I/O口实现较多的按键功能。 定时复位按键:用于实现定时时间归零和继电器复位。 加值键:用于实现日期、星期、时间和定时时间的加值。 选择键:用于实现当前设置右移一位。 减值键:用于实现日期、星期、时间和定时时间的减值。 功能键:用于实现进入修改日期、星期和时间,设定定时时间。 3.4 DS1302 时钟电路 3.5 DS18B20温度传感器电路 3.6 IR1308红外接外头电路
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vx cr_8118

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值