选题背景与意义
可预见单片机的发展趋势将是向大容量、高性能话、外围电路内装化等方面发展,也就是对CPU、存储器、片内I/O的改进,低功耗,特别是系统的单片机是目前单片机发展的重要趋势。而从目前国内对单片机的需求来看:在未来几年里,8位、16位单片机将是单片机的发展主流,它的新发展表现在:(1)CPU功能的增加 (2)内部资源的增多 (3)引脚的多功能化 (4)低电压、低功耗。
正因为单片机有着如此多的优点,单片机在工业控制中和家用电器等上的应用中独占鳌头,故又称为微控制器(Microcontroller)
1、因为它具有“小、轻、廉、省”的特点,尤其耗电少,又可使供电电源的体积小、重量轻,所以特别适用于“电脑型产品”,在家电、玩具、游戏机、声像设备、电子秤、收银机、办公设备、厨房设备等许多产品上得到应用。
2、适用于仪器仪表,不仅能完成测量,还具有处理、监控等功能,易于实现数字化和智能化。
3、广泛应用于打印机、绘图仪等许多计算机外围设备,特别是用于智能终端,可大大减轻主机负担。
4、用于各种工业控制,如温度控制、液面控制、生产线顺序控制等。
上述的归纳还不够完整,但已知单片机的应用已渗透到国民经济的各个领域,极大地推动了计算机技术的普及,而且可以预见,随着单片机性能的进一步提高,它的应用将更趋广泛。它对我国许多产品的升级换代、工厂企业的设备更新都将起着十分巨大的作用。所以利用单片机可以实现较多的功能的前提下降低设计、生产成本。
主要任务
本次课程设计的主要任务是设计基于STC89C51单片机的智能晾衣架。主要功能如下:
1)控制晾衣架的升降。
2)具有限位开关功能。
3)具有无线遥控功能。
4)能够指示运行状态。
5)具有智能模式,可以根据环境光线控制晾衣架的升降
6)具有智能模式,可以根据环境湿度控制晾衣架的升降
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1wOiSriPs2Yn6_JLcZOMWUw?pwd=8888
部分代码展示
#include<reg52.h>
#include<intrins.h>
#include<absacc.h> //头文件
#define uc unsigned char
#define ui unsigned int
sbit in_go = P1^3;
sbit in_back = P1^2;//手动前进后退按键
sbit out_go = P3^0;
sbit out_back = P3^5;//电机控制输出
sbit limit_go = P3^4;
sbit limit_back = P3^6;//前进后退限位开关
sbit led_go = P1^4;
sbit led_back = P1^5;//前进后退限位指示灯
sbit light = P1^0;//光线传感器
sbit change = P1^1;//手动自动切换按键(默认自动)
sbit led_zhishi = P1^7;
sbit buzz = P1^6;
sbit W1=P2^2;
sbit W2=P2^1;
//定义DHT11数据口
sbit DATA = P2^0;
uc U8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;
uc U8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;
uc Mode,humidity;
bit bdata FlagStartRH,hot,cold,humid,dry;
bit bdata flag1,flag2,change_flag,flag_shan,flag_shan1,flag_shan2,flag_HH;
uc m,n,shan;
uc code table[11]={ //共阴极字型码
0x3f, //--0
0x06, //--1
0x5b, //--2
0x4f, //--3
0x66, //--4
0x6d, //--5
0x7d, //--6
0x07, //--7
0x7f, //--8
0x6f, //--9
0x00 //--NULL
};
//定时器0初始化
void Timer0_Init()
{
ET0 = 1; //允许定时器0中断
TMOD = 1; //定时器工作方式选择
TL0 = 0xb0;
TH0 = 0x3c; //定时器赋予初值
TR0 = 1; //启动定时器
EA=1;
}
void Delay1(ui j)
{
uc i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void Delay_10us(void)
{
uc i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void COM(void)
{
uc i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!DATA)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(DATA)U8temp=1;
U8FLAG=2;
while((DATA)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//rof
}
//--------------------------------
//-----温湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
uc RH(void)
{
//主机拉低18ms
DATA=0;
Delay1(180); //原来为5
DATA=1;
//总线由上拉电阻拉高 主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
DATA=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!DATA) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!DATA)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((DATA)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
DATA=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
return 1;
}
else //传感器不响应
{
return 0;
}
}
void delay(ui x)//延时函数
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void display()
{
P0=table[humidity/10];
W1=0;
delay(1); //延时
W1=1; //关显示
P0=table[humidity%10];
W2=0;
delay(1); //延时
W2=1; //关显示
}