基于数码管的洗衣机控制系统(51单片机/实验箱)

一、设计内容

1.用直流电机的转速快慢代表三种不同洗衣方式:弱洗、强洗、漂洗。
2.用三个按键设置待洗衣物的不同方式,由 LED 数码管显示定时时间。
丝质衣服:漂洗3分钟;
棉质衣服:强洗5分钟,漂洗3分钟,弱洗2分钟;
化纤衣服:强洗4分钟,漂洗3分钟。
3.可用按键自行设定洗涤方式,即自行调整漂洗、强洗、弱洗的定时时间。
4.定时时间到,声光报警提示。
5.在给定试验箱上运行成功,试验箱图如图1所示。

图1 试验箱实物图

二、总体设计

2.1 总体设计及功能描述

本设计以单片机 AT89C51为控制核心, 采用模块化设计, 共分以下几个功能模块:

单片机控制系统模块、 电源模块、 时钟模块、 复位模块、 按键控制模块、 直流电机控制模块和显示模块等。 洗衣机主要有三种衣物的定时洗涤方式、报警和停止等功能。

系统结构框图如下图2-1所示: 

图2-1 系统整体框图

各模块功能如下:

1.AT89C51单片机:洗衣机控制系统的核心控制器件。

2.时钟电路模块:产生时钟信号驱动单片机工作。

3.复位电路模块:将单片机的寄存器重定,使程序指针回到最初位置。以便于系统运行时,程序从最初位置开始执行。

4.电机调速控制模块:直流电机驱动。

5.显示模块:显示模块电路采用7个 LED 和7个电阻以及一个四位八段数码管与单片机相连,利用 C 语言程序设计实现洗衣机自动化显示功能。

6.报警模块:定时时间到,蜂鸣器报警提示,同时报警指示灯亮,实现声光报警。

2.2 系统硬件设计

(1) 单片机最小系统电路模块的设计

AT89C51单片机是一种高效微控制器, 也是低功耗高性能单片机。 单片机是本设计的核心主要起控制作用, 采用 40 引脚双列直插封装形式, 32 个外部双向输入/输 出(I/O)埠, 同时内含 2 个外中断口, 2 个 16 位可程序设计定时计数器, 2 个全双工串行通信口,因为受引脚数目 的限制, 所以有不少引脚具有第二功能。 外形及引脚排列如图 2-2 所示。

 AT89C51单片机的主要管脚功能:

VCC: 供电电压。

 GND: 接地。

 P0 口: P0 口为一个 8 位漏级开路双向 I/O 口, 每脚可吸收 8TTL 门电流。 当 P1 口的管脚第一次写 1 时, 被定义为高阻输入。 P0 能够用于外部程序数据存储器, 它可以被定义为数据/地址的第八位。

P1 口: P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口, P1 口缓冲器能接收输出4TTL 门电流。 P1 口管脚写入 1 后, 被内部上拉为高, 可用作输入, P1 口被外部下拉为低电平时, 将输出电流, 这是由于内部上拉的缘故。

 P2 口: P2 口为一个内部上拉电阻的 8 位双向 I/O 口, P2 口缓冲器可接收, 输出 4个 TTL 门电流, 当 P2 口被写 1 时, 其管脚被内部上拉电阻拉高, 且作为输入。 并因此作为输入时, P2 口的管脚被外部拉低, 将输出电流。

P3 口: P3 口是 8 个带内部上拉电阻的双向 I/O 口, 可接收输出 4 个 TTL 门电流。当 P3 口写入 1 后, 它们被内部上拉为高电平, 并用作输入。 作为输入, 由于外部下拉为低电平, P3 口将输出电流(ILL) 这是由于上拉的缘故。 RST: 复位输入。 当振荡器复位器件时, 要保持 RST 脚两个机器周期的高电平时间。

ALE/PROG: 当访问外部内存时, 地址锁存允许的输出电平用于锁存地址的地位字节。 在 FLASH 程序设计期间, 此引脚用于输入程序设计脉冲。 在平时, ALE 端以不变的频率周期输出正脉冲信号, 此频率为振荡器频率的 1/6。 因此它可用作对外部输出的脉冲或用于定时。

PSEN : 外部程序内存的选通信号。 在由外部程序内存取指期间, 每个机器周期两次 PSEN 有效。 但在访问外部数据存储器时, 这两次有效的 PSEN 信号将不出现。

 EA/VPP: 当 EA保持低电平时, 则在此期间外部程序内存(0000H-FFFFH), 不 管是否有内部程序内存。 注意加密方式 1 时, EA将内部锁定为 RESET; 当 EA端保持高电平时, 此间内部程序内存。在 FLASH 程序设计期间, 此引脚也用于施加 12V 程序设计电源 (VPP)。             

图 2-2 AT89C51 单片机的管脚图

 电源、 时钟信号以及复位电路是单片机工作的基本条件, 缺一不可。 AT89C51 单片机最小系统的基本工作电路包括AT89C51、电源电路、 时钟电路、 复位电路,如图 2-3 所示。

图 2-3 单片机控制最小系统

电源电路模块为系统电路和其他模块提供+5V 电源。 供电电源可由开关电源提供.

时钟电路模块的设计: 

由于 AT89C51单片机芯片内有时钟振荡电路, 因此本系统单片机采用内部时钟方式,只要在单片机的 XTAL1和 XTAL2引脚外接石英晶体和微调电容, 就构成了自激振荡器并在单片机内部产生时钟脉冲信号,具体电路设计如图 2-4 所示。

工作原理:时钟信号通常用两种电路形式得到:内部振荡和外部振荡。 在 XTAL1 和 XTAL2 引脚上外接定时组件, 就能构成自激振荡电路。

   定时组件通常采用石英晶体和电容组成的并联谐振电路。一般电容 C4 和 C5 主要起频率微调作用, 电容值可选取为 30pF 左右或 40pF左右; 晶体振荡器, 简称晶振, 其晶振频率(fosc) 范围为 1. 2MHz~12MHz, 本设计中选择12MHz。 晶体振荡频率越高, 系统的时钟频率也越高, 单片机的运行速率就越快。

图 2-4 时钟振荡电路

复位电路使单片机或系统中的其他部件处于某种确定的状态。 当在 MCS-51 系列单片的 RST 引脚处引入高电平并保持 2 个机器周期, 单片机内部就执行复位操作。 复位操作有两种基本形式: 一种是上电复位, 另一位是按键复位。 本设计采用按键复位方式。 如图 2-5  工作原理: 当按下按键时, RST 直接与 VCC 相连, 出现 2 个以上的高电平形成复位, 同时电解电容被短路放电; 按键松开时, 电容充电, 电流流过电阻, RST 为高电平, 仍然是复位,充电完成后, 电容相当于开路, RST 为低电平, 正常工作。

图 2-5 复位电路

(2)按键控制电路设计

单片机设计中,重要的一个模块是按键的设计。常见的单片机按键设计分为独立式和行列式。独立式按键设计简单,但占用 I/O 口较多;行列式按键设计相对复杂,占用 I/O 口较少。由于本课题只需要4种洗涤模式和启动、停止功能,于是采用独立式按键更为简单。如图 2-6 所示。

              如图 2-6 按键模块设计

 图 2-6 为按键控制电路,为方便使用,设计了 九个独立式按键,分别为丝质、棉质、化纤、启动和停止。

丝质:K1键,选择丝质洗衣方式;

棉质:K2键,选择棉质洗衣方式;

棉质:K3键,选择化纤洗衣方式。

启动:K4键,洗衣机启动,开始洗衣。

停止:K5键,洗衣机无论在何种工作状态下都会停止工作,蜂鸣器报警,报警指示灯亮。

自定义模式:K6键,选择自定义洗涤方式。

弱洗加1:设置自定义模式中弱洗的时间。

强洗加1:设置自定义模式中强洗的时间。

漂洗加1:设置自定义模式中漂洗的时间。

(3)蜂鸣器报警电路设计 

本设计中,当某个洗衣方案完全结束或者停止键按下时,实现蜂鸣器 1.5s 报警。蜂鸣器电路设计如图 2-7所示。

由单片机直接输出的信号不足以驱动蜂鸣器的工作。因此,在单片机与蜂鸣器之间加一个 PNP 三极管作为驱动。三极管的基极通过一个 1K 欧的电阻与单片机相应的 I/O 相连,电源和蜂鸣器与发射极极相连,集电极接地。这样就完成了有源蜂鸣器的驱动电路。

图 2-7 蜂鸣器驱动电路

(4)显示电路设计

 在单片机应用系统中, 对于系统的运行状态和运行结果, 通常都需要直观显示出来。本设计采用的是7个共阳极发光二极管和四位八段数码管显示,显示电路如图 2-8 所示。 

LED显示电路:

由7个LED 和7个电阻构成。 7个电阻都分别为 100 欧姆, 在电路中,电阻的目的是起限流保护作用,防止 LED 被烧坏。7个 LED 是共阳级,当输入低电平时 LED 点亮,当输入高电平时 LED 熄灭。LED灯实时显示衣物洗涤模式如丝质,棉质或是化纤;同时显示不同洗涤模式的实时洗涤强度,如强洗,弱洗或是漂洗。洗衣机工作时,LED7始终保持熄灭,表示正在工作中,洗衣结束LED7灯亮,表示洗衣完成。

图 2-8 显示电路(LED灯)

数码管显示电路:

初始状态、洗衣结束和停止状态显示0000,洗衣机启动工作时,实时显示当前洗涤模式下倒计时。本次设计采用的共阴极四位八段数码管接法。

      图 2-8 显示电路(四位八段数码管) 

这是一个数码管内部电路原理图,a~h每个数字代表一个发光二极管,v是公共端,可以接地或者电源,对应共阴极和共阳极接法。a~g段数码管用来显示数字,h显示小数点。为了便于封装,数码管的外部一共10个引脚,5和10连在一起接公共端,其余各对应一个发光二极管:

例如,如果我们想显示数字“0”,那么就需要a~f这六个数码管亮;如果显示数字“1”,那么就需要b、c两个数码管点亮,以此类推。一般情况下,单片机的IO口和数码管的连接方式如下:

如果我们将数码管接到P1口上,显示数字“0”的话,那么P1口的八个引脚电平(共阴极数码管)应为:0011 1111转换成二进制就是P1=0x3f,如果是共阳极数码管,则P1=~0x3f,按位取反就可以。如果我们想让小数点显示出来,那么应该将P0.7置1(共阴极),对应引脚电平为1000 0000,二进制0x80,为了简便,我们直接参与按位或的方式,即:

P1=(0x3f|0x80) 共阴极

不带点的段码上加0x80即可得到带小数点的0-F段码。

(5) 直流电机驱动电路设计

原理如下:

电路图如下:

2.3 硬件仿真电路图

三、系统软件设计

(粘贴好累)略。

四、系统仿真

4.1 Protoeus8.9keil μVision5

本设计用Proteus 8.9软件作图,C语言对单片机进行控制操作,易读好懂,用Keil μVision5软件进行了调试。

软件调试一般分为以下四个阶段:

1、编写程序并查错;

2、在 C 语言的编译系统中编译源程序

3、对程序进行编译连接,并及时发现程序中存在的错误;

4、改正错误。

4.2 调试中遇到的问题

1、在程序中有的函数名未定义;

2、在抄录程序时,少录入一些字符,如},;等符号,而出现错误;

3、有一些函数名录入时少写一个字母或顺序颠倒;

4、没有注意函数名的调用及定义;

5、芯片引脚定义出错而导致没有实验现象

修改并重新编译后编译结果如下图4-1所示:

图4-1 Keil μVision5调试结果

4.3 模拟图

在Keil中生成.hex文件之后,在proteus里打开原理图,将生成的档加载到单片机中,经过反复调试,三种衣物洗涤方式如下图4-2、4-3-1、4-3-2、4-3-3、4-4-1、4-4-2所示:

(1)silk丝质衣服模拟图:漂洗3分钟倒计时为0蜂鸣器报警,洗衣结束

图4-2 Proteus8.9 silk丝质衣服漂洗中

(2)cotton棉质衣服模拟图:棉质衣服先强洗五分钟再漂洗三分钟,最后弱洗两分钟,实现最长时间10分钟倒计时,计时为0蜂鸣器报警,洗衣结束。

图4-3-2 Proteus8.9 cotton棉质衣服强洗中

图4-3-3 Proteus8.9 cotton棉质衣服漂洗中

图4-3-1 Proteus8.9 cotton棉质衣服弱洗中

(3)chemical化纤衣服模拟图:化纤衣服先强洗四分钟再漂洗三分钟,实现7分钟倒计时,计时为0蜂鸣器报警,洗衣结束。

图4-4-1 Proteus8.9chemical化纤衣服强洗中

图4-4-2 Proteus8.9chemical化纤衣服漂洗中

(4)自定义模式模拟图:例如,弱洗3分钟,强洗2分钟,漂洗3分钟,实现8分钟倒计时,计时为0蜂鸣器报警,洗衣结束。

图4-5-1 Proteus8.9 自定义模式时间设置

图4-5-2 Proteus8.9 自定义模式时间漂洗中

五、总结

1.通过最后的硬件和软件的模拟调试,本课题的研究工作已经达到预期的要求,归纳起来有以下几点:

(1)本课题实现了洗衣机控制系统的自动化。

(2)系统硬件设计使用的有芯片AT89C51,电容,晶振,电阻,L298驱动器,四位八段数码管,LED灯,蜂鸣器,按钮,三极管PNP,直流电机等。

(3)系统软件设计包括初始化程序、T0中断服务程序,三种模式程序,数码管显示程序,延时函数,报警程序等,完成了洗衣机控制系统的自动化。

2.本次设计主要是以 AT89C51单片机为核心的, 对洗衣机进行了简单的设计与阐述。 本次设计可以说是软硬结合,又以硬件为主,软件为辅。 当今科技发展迅速,单片机嵌入式开发有着光明的前景。 由于单片机具有经济实用、开发简便等特点, 所以依然在工业控制、 家电等领域占据广泛的市场。由于我以前对 51 单片机的 C 语言没有认真钻研过,所以感觉课程设计的任务十分紧迫。 通过对本系统的设计, 我学习到了硬件开发和软件开发的基本流程并有了一定的驾御此开发过程的能力。 通过实际的程序设计和不断的调试过程,我更加熟练地掌握了单片机相关程序的程序设计方法,在不断的设计过程中,我对单片机系统有了更深刻的认识,进一步熟悉和掌握了单片机的结构以及它的工作原理,对定时、中断程序等有了更深地认识,学到了如何熟练使用仿真软件Proteus8.9和程序设计软件Keil uVision5。程序设计的过程中, 虽然不乏辛苦,但更多的是程序调试成功后的喜悦。

总之, 这次课程设计对我来说是一次比较全面的、富有创造性和探索性的锻炼,完成了我选题时的心愿。令我深有感触, 对于我今后的学习、工作和生活都将是受益非浅的!

六、源代码

#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^0;//丝质方式按钮
sbit k2=P3^1;//棉质按钮
sbit k3=P3^2;//化纤方式按钮
sbit k4=P3^3;//启动
sbit k5=P3^4;//启动
sbit k6=P1^2;//自定义按钮
sbit k7=P1^3;//弱洗加
sbit k8=P1^4;//强洗加
sbit k9=P1^5;//漂洗加

sbit out=P1^0;//电机正转
//sbitout=P1^1;//电机反转
sbit beep=P2^4;//蜂鸣器

sbit led1=P3^5;//弱洗//洗涤强度指示
sbit led2=P1^7;//强洗
sbit led3=P1^6;//漂洗

sbit led4=P2^5;//丝质衣物//洗涤模式
sbit led5=P2^6;//棉质衣物
sbit led6=P2^7;//化纤衣物
//sbitled7=P1^6;//自定义模式
sbit led7=P1^1;//报警指示灯
sbit smg1=P2^0;//数码管
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;

uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点//共阴极数码管
uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//显示0~9,有小数点
//丝质silk,棉质Cotton,化纤Chemical fiber
uchar time=0,miao=0,fen=0;//时间
uchar start=0,mode=0,beep_time=0;
uint time1=0,time2=0,time3=0;//自定义时间

int   N,K;//定义占空比的变量
int flag = 0;

void disp();//函数声明
//延时
void delay(uint i)
{
    while(i--)
}

代码剩余部分略(私信获取完整版)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值