历史上的今天
返回首页

历史上的今天

今天是:2024年12月05日(星期四)

正在发生

2019年12月05日 | 单片机全自动洗衣机程序+仿真+原理图设计调试与分析

2019-12-05 来源:51hei

一、设计任务与要求

利用51单片机模拟全自动智能洗衣机。

  • 按键功能要求

  • 通过“K1”键步进改变“标准]经济、单独、排水”四种方式,执行相应的程序。对应指示灯亮。

  • 通过“K2”键步进改变“强洗、弱洗”两种方式,执行相应的程序,对应指示灯亮。

  • 通过“K3”键控制洗衣机运行、暂停和解除报警功能。


  • 方式功能选择要求

    一般洗衣机的步骤为:洗涤,漂洗,脱水,当处于某种状态时,对应的指示灯以0.7S周期闪烁,当洗衣机在洗涤过程中,洗涤指示灯闪烁。可以通过方式选择设定具体的运行过程。

    • 标准方式:进水—> 洗涤 —> 排水 —> 进水 —> 漂洗 —> 排水 —>进水 —> 漂洗—> 排水 —> 脱水。

    • 经济方式:进水 —> 洗涤 —> 排水 —> 进水 —> 漂洗 —> 排水 —> 脱水。

    • 单独方式:进水 —> 洗涤。

    • 排水方式:排水 —> 脱水。

    • 强洗即电动机转速快,弱洗即电动机转速慢。

    • 整机功能要求

    • 开机默认状态为标准方式、强洗。

    • 在洗涤和漂洗过程中,电动机正转一次,反转一次,连续运行。

    • 在进水和脱水过程中,相应的指示灯亮,继电器吸合。

    • 当执行某个步骤时,只有“K3”键有效,按下暂停,再按恢复运行。


    • 方案设计与论证

      全自动洗衣机的实现方案组成框图如图一所示。它主要有电源、单片机最小系统、开关检测电路、控制按键输入电路和LED指示电路、继电器和电动机电路。


      • 硬件电路设计 

      图二

      • 电动机驱动模块电路设计

      电动机驱动采用LD298电动机驱动芯片,单片机P25、P24与L298的IN1、IN2分别对应相连,ENA直接接VCC,后面所加4个二极管VD3到VD6起连续作用。电动机驱动电路原理图如图二所示。

      • 电源模块电路设计

      电动机驱动芯片的电源VCC和VS之间通过0欧的电阻R20进行隔离后,对LD298进行供电。

      • 控制按键

      如图二所示,K3键接到单片机的外部中断0,通过中断实现运行、暂停、继续运行的控制功能,当K3键第一次按下时(num2=1)正常运行,当K3键第二次按下时(num2=2)暂停运行。

      • 进水阀和排水阀控制继电器

      如图二所示,单片机的P23用来控制排水阀继电器,P22用来控制进水阀继电器,P22和P23对应输出为0时对应的阀打开,输出为1时对应的阀关闭。


      软件设计

      1)流程图

      主程序流程图如图三所示。

      • 程序

      程序附在最后

      图三

      • 调试与分析

      1、软件调试:

      写程序代码时应先搭建好硬件电路,然后根据硬件电路写程序代码。在调试程序过程中,先保证程序能够运行无错误,然后在烧到实物中观察结果。


      2、硬件调试:

      硬件电路设计与软件设计完成后,将程序烧写到单片机中,观察运行结果是否符合要求。如果不符合设计要求,应先检查硬件是否能正常工作,如用实验板自带的正确代码检测硬件电路;然后根据设计要求到程序代码中分模块进行调试,比如该设计需用到液晶、矩阵键盘、定时器、独立键盘、中断和LED灯等,如果测试过程中液晶模块不能正常显示或者显示乱码,应将液晶模块单独分离出来进行测试,其他模块亦是如此。程序调试完成后,应在硬件电路上反复运行,以确保程序和硬件电路的稳定性。


      • 总结

      这次单片机程序设计专周,我感觉收获了很多,尤其是在提升自身的工作和自主学习能力方面。我在大二上学期就开始在实验室自学单片机,但是因为是自学,自觉性就很差,而且自学也是一件比较难的事,学习过程中一直都是学习和模仿别人的代码,看着别人写出来的程序代码,总觉得都能看懂,所以自己基本上没有自己构思写程序代码,唯一做过一次全自动洗衣机也是看着别人写的源程序代码,不停的修修改改。


      这次刚拿到设计题目时,本以为不难,一开始还信心满满,然而开始做就感觉有些茫然了,尤其是题目中还有些知识是我还没学过的,比如液晶。所以我们组就必须得先把液晶学了,把需要学习的模块学完后,先是毫无头绪的写主程序,整个过程举步维艰,然后我们去学习了别人的设计方法,开始分工和分模块进行。组内分组搭建硬件电路,和写程序,先把电路搭建好,再写程序。写程序的过程中,我们是把程序分成几个小模块:液晶显示模块、键盘输入模块、抢答模块,然后每个模块写成子程序,在主程序中只需调用各个子程序即可。


      在程序调试过程中,也遇到各种问题,但都逐个解决了。在整个设计过程中,我学到了许多课堂上老师无法传授的知识,也真正地做出了一件自己的产品。


      单片机源程序如下:

              #include

              #define uchar unsigned char

              #define uint unsigned int

              uchar num=0,num1=0,num2=0,num3=0,num4=0,num5=0,num6=0,flag=0,flag1=0,flag4=0,flag5=0,circle=0;

              sbit ledbiaozhun=P1^0; //LED指示灯

              sbit ledjingji  =P1^1;

              sbit leddandu   =P1^2;

              sbit ledpaishui =P1^3;

              sbit ledqiangxi =P1^4;

              sbit ledruoxi   =P1^5;

              sbit ledxidi    =P1^6;

              sbit ledpiaoxi  =P1^7;

              sbit ledtuoshui =P2^0;

              

              sbit sshuiwei   =P3^6; //水位开关

              sbit sgai       =P3^7; //盖开关

              sbit paishui=P2^3; //排水阀控制

              sbit jinshui=P2^2; //进水阀控制

              

              sbit U2=P2^4;

              sbit U3=P2^5;

              sbit k1=P3^0;  // 步进改变"标准、经济、单独、排水"四种方式

              sbit k2=P3^1;  //强洗、弱洗

              sbit k3=P3^2;  //运行、暂停和解除报替功能

              void init()

              {

                      uchar a=0,b=0,c=0;

                      TMOD=0x01;                       //T0工作于方式1

                      TH0=(65536-50000)/256; //定时时间50ms

                      TL0=(65536-50000)%256;

                      EA=1;                                   //开总中断

                      ET0=1;                                   //开T0中断

                      TR0=0;                                   //关闭T0

                      EX0=1;                                   //开外部中断0

                      IT0=1;                                   //外部中断0边沿触发方式

                      U2=1;                                   //电机停转

                      U3=1;

                      P0=0xff;

              }

              void delayms(uint xms) //延时

              {

                      uint i,j;

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

                              for(j=110;j>0;j--);

              }

              

              void key()                //控制按键

              {

                      circle=1;

                      if(k1==0)                //标准、经济、单独、排水按下

                      {

                              delayms(10); //延时消抖

                              if(k1==0)         //再判

                              {

                                      num++;         //K1按下次数加1

                                      if(num==4)

                                              num=0;        //等于4,按下次数清0

                                      while(!k1);        //等待按键释放

                              }

                      }

                      

                      if(k2==0)                                //强弱选择

                      {

                              delayms(10);   //延时消抖

                              if(k2==0)           //再判

                              {

                                      num1++;         //按下次数加1

                                      if(num1==2)

                                              num1=0;        //等于2,按下次数清0

                                      while(!k2);        //等待按键释放

                              }

                      }

              }

              

              void qiang()                          //强

              {

                      if(flag4==0)  //电机正转

                      {        

                              U2=0;

                              U3=1;

                      }

              

                      if(flag4==1)  //电机反转

                      {

                              U2=1;

                              U3=0;

                      }        

              }

              void ruo()                        //弱

              {

                      if(flag5==0) //电机正转

                      {        

                              U2=0;

                              U3=1;

                      }

              

                      if(flag5==1) //电机反转

      推荐阅读

      史海拾趣

      Global Communications公司的发展小趣事
      通过温度传感器检测环境温度,并将检测到的温度信号转换为电信号后,送入到专门的补偿电路中。补偿电路根据温度信号调整晶体振荡器的输出频率或相位,以达到补偿的目的。这种方法相对复杂,但可以实现更精确的补偿效果。
      成都成电硅海公司的发展小趣事

      随着技术的不断成熟和市场的不断扩大,成都成电硅海公司开始寻求更广阔的市场空间。公司积极参加国内外各种行业展会和论坛,与业界同行进行深入的交流和合作。同时,公司还加大了对海外市场的开拓力度,成功将产品打入欧美等发达国家市场。这一系列的市场拓展举措,使得成都成电硅海公司的知名度不断提升,市场份额也逐渐扩大。

      Elite Semiconductor Products Inc公司的发展小趣事

      随着全球对环保和可持续发展的关注度不断提高,Elite也积极响应这一趋势。公司注重环保理念在生产过程中的贯彻实施,采用环保材料和节能技术,减少生产过程中的污染排放。同时,Elite还积极参与环保公益活动,推动环保理念的普及和实践。这些努力不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

      HOPERF公司的发展小趣事

      成立于1998年的HOPERF,最初是一家专注于无线射频技术的小型创业公司。在那个通信技术日新月异的时代,公司创始人凭借敏锐的市场洞察力和对技术的执着追求,带领团队开始了自主研发之路。初期,HOPERF在无线射频领域不断突破,成功研发出多款具有自主知识产权的射频芯片,为公司的后续发展奠定了坚实的基础。这些技术创新不仅提升了产品的性能,还大大降低了成本,使得HOPERF在竞争激烈的市场中逐渐站稳脚跟。

      Heyco公司的发展小趣事

      随着全球化趋势的加剧,Heyco开始积极拓展海外市场。公司在欧洲市场取得长足发展的同时,也逐步进入北美和亚太地区。通过在全球各地建立销售网络和生产基地,Heyco实现了产品的全球化生产和销售。这一战略不仅提升了公司的市场份额,还进一步巩固了其在电子工业备品备件销售领域的领先地位。

      Emmoco公司的发展小趣事

      随着产品质量的不断提升和技术的不断创新,Emmoco开始积极拓展市场。公司制定了详细的市场拓展计划,通过参加国际展会、举办技术研讨会等方式,不断提高品牌知名度和影响力。同时,Emmoco还积极与国内外知名企业建立合作关系,共同开拓市场,实现互利共赢。这些举措使得Emmoco的市场份额不断扩大,品牌影响力逐渐增强。

      问答坊 | AI 解惑

      量程自动转换的数字电压表

      量程自动转换的数字电压表…

      查看全部问答>

      33个毕业设计——单片机类

      求         无线电子音乐门铃 相关论文。 资料 资料虽好,仅供参考,还是要自己做啊.      16×16点阵(滚动显示)论文+程序.rar cdma通信系统中的接入信道部分进行仿真与分析.rar LED ...…

      查看全部问答>

      技术人员的最终出路

      虽然是希望这个论坛成为一个纯技术性论坛,但作为一名技术人员,我总是对未来的前景感到一阵阵悲哀。发表一点自身的感慨。     做为技术人员,大家都觉得工资高,工作稳定,还能学到很多的东西。是大部份走出校门或性格内向,或希望过平静生活 ...…

      查看全部问答>

      求毕业设计急等:多波形信号发生器

      多波形信号发生器 要求:1. 能产生5种波形,至少要有三种:正弦,方波,三角波       2. 可以调频和调幅,频率为10HZ到20KHZ以上,幅度为0~5V,步进可以自己设定。       3. 求好心人帮忙,论文我自己 ...…

      查看全部问答>

      standard 下LoadLibrary失败

      我用evc4.0做了一个DLL。在PPC2003,WM5,WM6机种下基本都能正常调用。 但是在WM6 standard下失败。 hDll = ::LoadLibrary(L\".\\\\*.dll\"); 返回NULL。 请问如何解决? 谢谢。 …

      查看全部问答>

      有空时上网挣点钱.

      没事做   上网免费赚钱啦   上网免费赚钱啦 据说可以赚钱哦 嘿嘿 其实我也不清楚,不过就像下面说的 又没有损失 试试又何妨呢?要是真能赚钱 那何乐而不为 在网上,为什么各个网站都说能为你赚到很多钱呢,就连读一封 E-mail 也可以赚 ...…

      查看全部问答>

      CPLD/FPGA到底是如何实现它的控制目的的呢

      请教各位高手 我现在已经初步学习了VHDL和CPLD/FPGA的设计软件了,可是还是没能弄清楚它是怎么对控制目标实现控制的,又是如何实现的呢?举例说,单片机是可以用KEIL编辑及编译C或是汇编控制程序正确后烧写到单片机芯片里去,通过单片机连接功能电 ...…

      查看全部问答>

      【求助】想做个万年历,正在构想。

      <div><b>【上下文】</b></div>打算用超级电容+太阳能电池供电,所以功率一定要小。本来考虑AVR的,后来欣喜的发现了LPC111x系列。<div>打算用12864的液晶,能够显示基本的时间和日期(公历农历),还能够每天显示几个位图,可 ...…

      查看全部问答>

      MSP430G2 开发板学习(三):软件安装

      说起来我的MSP430G2的软件安装的可是很坎坷啊。大家见笑了。 最初开始没上TI的WIKI,有些资料也不知道,只是知道IAR和CCS都可以用,先装的是IAR 5.10.6,TI的文档上的是IAR 5.10.1 slacx.又重新装过IAR,用IAR写程序编译可以通过,下载程序不得,后 ...…

      查看全部问答>

      client connect问题

      本人在做LM3S8962作为客户端测试时,遇到个问题,如果TCP测试软件建立服务器后,客户端有可能会等很久才连上来,关掉了这个连接,就再也建立不上与8962的通信。迷惑中,请高手帮帮忙,万分感谢!我的源码如下:      &nb ...…

      查看全部问答>