单片机技术课程设计题目风扇模拟控制系统院系轨道交通学院专业铁道信号年级 2013级学生姓名张三李四王五学号指导教师罗世民需求书题目十一:电风扇模拟控制系统设计★★1.用4个LED显示电风扇的工作状态(1,2,3,4四档风力),显示风类:“自然风”、“常风”和“睡眠风”。
(20分)2.设计“自然风”、“常风”和“睡眠风”三个风类键用于设置风类;设计一个“摇头”键用于控制电机摇头。
(20分)3.设计一个“定时”键,用于定时时间长短设置;(20分)4*.设计过热检测与保护电路,若电风扇电机过热,则电机停止转动,蜂鸣器报警,电机冷却后电机又恢复转动。
5*. 用LCD作为用户界面显示风扇运行模式等信息。
6@.其他功能(创新部分 10分)电风扇模拟控制系统设计通信工程专业学生张三李四王五指导教师简磊【摘要】本设计以直流电机控制为基础,基于传感器技术,以单片机控制技术为核心,实现电风扇的智能控制,同时设计采用轻触开关即可具有电风扇的调档功能。
使用集成电路LM298N完成电风扇的驱动设计,通过单片机STC89C52的定时器0以及定时器1产生不同占空比的PWM波形控制电风扇电机驱动芯片从而改变电风扇电机的输入电流,最终实现电风扇电机转速调节功能,使得设计更加人性化,更加环保节能。
【关键词】调速功能单片机测温智能控制目录任务书 (1)摘要 (Ⅰ)目录 (Ⅱ)引言 (Ⅲ)一、方案设计 (Ⅳ)二、硬件电路 (Ⅳ)2.1电路系统框图 (Ⅳ)2.2 STC89C52RC最小系统 (Ⅴ)2.3 按键模块 (Ⅴ)2.4 LED指示灯模块 (Ⅵ)2.5电机温度实时测量模块 (Ⅵ)2.6电机驱动模块 (Ⅵ)2.7 LCD显示模块 (Ⅶ)三、软件程序 (Ⅷ)3.1主函数程序流程图 (Ⅷ)3.2按键模块接口程序 (Ⅸ)3.3 LED指示灯接口程序 (Ⅸ)3.4 电机测温接口程序 (Ⅸ)3.5 电机驱动接口程序 (Ⅸ)3.6 LCD显示驱动程序 (Ⅸ)四、调试结果 (Ⅹ)五、小结 (Ⅺ)附录一总电路仿真 (ⅩⅢ)附录二程序清单 (ⅩⅣ)附录三元件清单 (ⅩⅤ)引言单片机原理应用广泛根据单片机原理及应用课程的要求,主要进行两个方面的设计,即单片机最小系统和存储器扩展设计、接口技术应用设计。
其中,单片机最小系统主要要求学生熟悉单片机的内部结构和引脚功能、引脚的使用、复位电路、时钟电路、4个并行接口和一个串行接口的实际应用,从而可构成最小应用系统,并编程进行简单使用。
电风扇模拟控制系统具有电路简单、成本较低、操作方便、灵敏可靠等优点,经使用效果良好, 具有较高的推广价值,在很多领域都有广泛的应用。
本文设计出以STC89S52单片机为核心的电风扇模拟控制系统,采用了LCD1206直接指示,显示状态,并自动复位的设计思想,它能根据按键输入的信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LCD1206显示相应的状态,分别显示当前电机实时温度以及当前风力,充分利用了单片机系统结构简单、功能强大、可靠性好、实用性强的特点。
一、方案设计1.1简介本人首先设计了硬件电路,硬件电路充分体现了模块化的思想,主要由以下几个模块组成,1、STC89C52单片机最小系统;2、按键模块:共六个按键,三个控制风力的大小,两个控制电机的摇头以及睡眠定时功能;3、LED指示灯模块: 共四个绿色LED指示灯,分别指示风扇电机运行状态,自然风(natural wild),常风(ordinary wind),睡眠风(sleep wind),无风(no wind)4、电机温度实时测量模块: 本系统采用DS18B20测量电机实时温度5、电机驱动模块:本系统采用LM298N集成驱动芯片驱动电机转动6、LCD显示模块:本系统采用LCD1206模块显示电风扇实时状态1.2课程设计目的(1)综合所学的单片机原理及接口技术等课程的理论知识完成本课程设计;(2)学习并掌握基本电路设计与使用方法,单片机的编程与应用方法;(3)提高综合分析、解决实际问题的能力。
1.3任务和要求本设计以STC89C52处理器为核心,单片机作为外围检测与控制电路设计实现智能家居系统。
其中单片机系统通过传感器检测到相关信息,向嵌入式平台发送相对应的信息,嵌入式平台做出相应判断与处理,并同时通过网络告知主人与物管人员做出相应处理,以保证业主的财产人身安全。
本设计主要设计指标:(1)按键输入模块,4个按键分别调整“睡眠风”,“自然风”,“常风”,“无风”2个按键分别控制“摇头”“定时”;(2)直流电机转速控制,通过LM298N芯片驱动;(3)当前转速显示、当前电机温度显示,状态在LCD上显示。
二、硬件电路2.1电路系统框图2.2 STC89C52RC最小系统2.3 按键模块TIME BUTTON:定时按钮SHAKE BUTTON:摇头按钮NATURAL WIND 自然风按钮ORDINARY WIND 常风按钮SLEEP WIND 睡眠风按钮2.4 LED指示灯模块NATURAL WIND 自然风指示灯ORDINARY WIND 常风指示灯SLEEP WIND 睡眠风指示灯NO WIND 无风指示灯2.5 电机温度实时测量模块采用DS18B20测量电机实时温度2.6 电机驱动模块采用LM298N驱动芯片驱动两个直流电机2.7 LCD显示模块采用LCD1206输出显示当前状态2.8 蜂鸣器报警模块三、软件程序3.1 主函数程序流程图3.2 按键模块驱动程序#include "head_file.h"sbit Natural_wind_button =P2^0; sbit Ordinary_wind_button =P2^1; sbit Sleep_wind_button =P2^2;sbit Time_button =P3^6; sbit Shake_button =P3^7;void BUTTON_Config()Natural_wind_button = 1;Ordinary_wind_button = 1;Sleep_wind_button =1;Time_button = 1;Shake_button = 1;}3.3 LED指示灯驱动程序#include "head_file.h"sbit Natural_wind_LED =P2^3;sbit Ordinary_wind_LED =P2^4;sbit Sleep_wind_LED =P2^5;sbit NO_Wind_LED =P2^6; sbit Buzzer =P0^3;void GUIDE_Led_Config(){Natural_wind_LED = 1;Ordinary_wind_LED = 1;Sleep_wind_LED = 1;NO_Wind_LED = 0; //ÎÞ·çַʽµÆÁÁBuzzer = 0; //·äÃùÆ÷½²Ä¬}3.4 电机测温驱动程序#include "head_file.h"sbit dq = P2^7;void sdelay(uint i){while(i--);}void DS18B20_Reset()uchar x=0;dq=1;sdelay(8);dq=0;sdelay(80);dq=1;sdelay(14);sdelay(20);}void DS18B20_Write_Byte(uchar dat) {uchar i=0;for(i=8;i>0;i--){dq=0;dq=dat&0x01;sdelay(5);dq=1;dat>>=1;}}uchar DS18B20_Read_Byte(){uchar i=0,dat=0;for(i=8;i>0;i--){dq=0;dat>>=1;dq=1;if(dq)dat|=0x80;sdelay(4);}return(dat);}uint GET_Temperature(){uchar a=0,b=0;uint t=0;float tt=0;DS18B20_Reset();DS18B20_Write_Byte(0xCC);//Ìø¸ýROMDS18B20_Write_Byte(0x44);//¾ªÆôζÈתººDS18B20_Reset();DS18B20_Write_Byte(0xCC);DS18B20_Write_Byte(0xBE);//¶ÁÔÝ´æÆ÷a=DS18B20_Read_Byte();b=DS18B20_Read_Byte();t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5;return(t);}3.5 电机驱动驱动程序#include "head_file.h"uchar t0, add0;uchar t1,add1;sbit EN0=P3^4;sbit EN1=P3^5;sbit IN0=P3^0;sbit IN1=P3^1;sbit IN2=P3^2;sbit IN3=P3^3;void L298_Config(){t0=50;t1=50;IN0=0;IN1=1;IN2=0;IN3=1;}void TIM_Config(){TMOD = 0x11;TH0 = (65536-50000)/256;;TL0 = (65536-50000)%256;;ET0 = 1;TR0 = 1;TH1 = (65536-50000)/256;;TL1 = (65536-50000)%256;;ET1 = 1;TR1 = 1;EA = 1;}void TIM0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256 ;if(add0==100){add0=0;EN0=1;}if(add0==t0){EN0=0;}add0++;}void TIM1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256 ;if(add1==100){add1=0;EN1=1;}if(add1==t1){EN1=0;}add1++;}3.6 LCD显示驱动程序#include "head_file.h"uchar code table[]="temperature 27'c" ; //ÏÔʽµÄ×ÖÄ·uchar code table1[]="status NO Wind" ;sbit lcdrs=P0^0; //»Ä´æÆ÷Ñ¡ÔñÒý¼Åsbit lcdwr=P0^1; //¶ÁдÒý¼Åsbit lcde=P0^2; //ƬѡÒý¼Åvoid LCD1206_config(){uchar i; //¶¨Òå½Ö²¾±äÁ¾init();write_com(0x80); //Ö·ÕëµÄλÖÃfor(i=0;i<16;i++) //ÏÔʽ{write_dat(table[i]);delay(50); //ÑÓʱ£¬ÓÃÓÚµ÷¼ÚËٶȲ»Æ¥Åä }write_com(0x80+0x40);for(i=0;i<16;i++){write_dat(table1[i]);delay(50);}}/****************ÑÓʱ×Ó¹¯Êý ********************/void delay(uchar x){uchar i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}/****************дַÁî×Ó¹¯Êý********************/void write_com(uchar com){ //·ù½Ý1602Ò¹½§ÏÔʽÆ÷ÐÒé±àдP1=com;lcde=0;lcdrs=0;lcdwr=0;delay(5);lcde=1;delay(5);lcde=0;}/*****************дÊý½Ý×Ó¹¯Êý********************/ void write_dat(uchar dat){P1=dat;lcde=0;lcdrs=1;lcdwr=0;delay(5);lcde=1;delay(5);lcde=0;}/*****************³õÊ»»¯×Ó¹¯Êý********************/ void init(){write_com(0x01); //ÇåÆÁwrite_com(0x3f); //¸¦ÄÜÉèÖÃwrite_com(0x0f); //ÏÔʽ¾ØÖÆwrite_com(0x06); //ÊäÈ뷼ʼÉèÖà }四、调试结果五、小结在将近一周的单片机课程设计,终于完成了电风扇模拟控制系统的设计,虽然没有完全达到设计要求,但还是收获良多。