单片机实训智能洗衣机
单片机实训智能洗衣机
目录
- 单片机实训智能洗衣机
- 第一部分 内容介绍
- 第二部分 实训代码
- 第三部分 硬件仿真电路
- 第四部分 设计过程
- 1、安装软件
- 2、仿真图绘制
- 3、编写代码
- 4、装载hex文件
- 第五部分 使用方法
- 第六部分 软件链接
第一部分 内容介绍
- 此实训内容使用软件Proteus7.8和Keil4设计完成,设计使用的语言是C语言,使用的单片机型号是AT89C51单片机,可以实现洗衣机的定时洗涤、定时甩干、转速和洗涤时间的设置。
第二部分 实训代码
#include<reg51.h>
#include<stdio.h>
void delay(unsigned int t);
#define uchar unsigned char
#define uint unsigned int
sbit F1 = P0^0;
sbit F2 = P0^1;
sbit F3 = P0^2;
sbit F4 = P0^3;
sbit K1 = P3^0;//慢速
sbit K2 = P3^1;//快速
sbit K3 = P3^7;//甩干
sbit K4 = P3^3;//设定模式
sbit K5 = P3^4;//增加时间
sbit K6 = P3^5;//减少时间
sbit K7 = P3^6;//启动
sbit K8 = P3^2;//紧急停止
sbit lcdrs = P0^5;
sbit lcdrw = P0^6;
sbit lcden = P0^7;
sbit Sound = P1^7;
unsigned char code FFW[8]={0xfc,0xf9,0xf3,0xf6,0xfc,0xf9,0xf3,0xf6};//步进电机正转
unsigned char code FFZ[8]={0xf6,0xf3,0xf9,0xfc,0xf6,0xf3,0xf9,0xfc};//步进电机反转
unsigned int key,K,rate;//声明模式键,步进电机模式、速度
unsigned int rest,LedNumVal=1;//声明模式选择标志,Led显示时间并设定初值为1
//函数功能:控制步进电机采取正转还是反转模式
void motor_ffw()
{unsigned int i;for(i = 0;i<8;i++){if(K==1&&LedNumVal != 0)P0 = FFW[i];if(K==2&&LedNumVal != 0)P0 = FFZ[i];delay(rate*10);//通过选择的速度控制步进电机转速}
}
//函数功能:延时函数
void delay(uint z)
{uint x,y;for(x=z;x>0;x--){for(y=100;y>0;y--);}
}
//函数功能:获得模式按键的选择结果
void getkey()
{key = 1;rest = 0;do{P3 = 0xff;if((K1 || K2 || K3 ||K4)!= 0){delay(2);if((K1||K2||K3||K4)!=0){if(K1==0)key=1;if(K2==0)key=2;if(K3==0)key=3;if(K4==0){rest=rest%2+1;}}}}while(rest==0);
}
//函数功能:设置洗衣或者甩干的时间
void timedesign()
{unsigned int j = 0;void time(void);do{P3 = 0xff;if((K5&&K6&&K7)!= 1){delay(2);if((K5&&K6&&K7)!= 1){if(K5==0)LedNumVal++;if(K6==0)LedNumVal--;if(K7==0)j=1;delay(150);}}if(LedNumVal>=6){LedNumVal=6;}if(LedNumVal==0){LedNumVal++;}time();}while(j==0);
}
//函数功能:写命令
void write_com(uchar com)
{lcdrs=0;lcdrw=0;lcden=0;P2=com;delay(5);lcden=1;delay(5);lcden=0;
}
//函数功能:写数据
void write_date(uchar dat)
{lcdrs=1;lcdrw=0;lcden=0;P2 = dat;delay(5);lcden=1;delay(5);lcden=0;
}
//函数功能:写字符串,将想显式地内容输出
void write_str(uchar *str)
{uchar idata i;for(i=0;str[i]!='\0';i++)write_date(str[i]);
}
//函数功能:液晶显视屏初始化
void init(void)
{delay(75);write_com(0x38);//模式:8位总线,双行,5*7字体delay(25);write_com(0x38);delay(25);write_com(0x38);write_com(0x38);write_com(0x08);//屏幕关闭write_com(0x01);//清除DDRAM的所有单元,光标被移动到屏幕左上角write_com(0x06);//写入DDRAM后,地址指针加一write_com(0x0c);//打开显示屏,不显示光标,光标所在位置的字符不闪烁
}
//函数功能:将获得的时间在显示屏输出
void time(void)
{unsigned int i,time;unsigned char num[3];time = LedNumVal*10;sprintf(num,"%3d",time);write_com(0x80+0x40);for(i=0;i<3;i++){write_date(num[i]);}write_str("min");
}
//函数功能:外部中断子函数,用于中断危险情况
void int0() interrupt 0
{LedNumVal=0;time();
}
//主函数
void main(void)
{unsigned int t;unsigned int n;int m;init();//初始化液晶显示屏EA=1;//开启总中断EX0=1;IT0 = 0;//开启外部中断while(1){write_com(0x80);write_str("enter key");time();getkey();if(key==1){rate=20;//步进电机速度write_com(0x80);write_str("deng ji:1");//模式1,轻柔模式}if(key==2){rate=15;//步进电机速度write_com(0x80);write_str("deng ji:2");//模式2,强洗模式}if(key==3){rate=10;//步进电机速度write_com(0x80);write_str("shuai gan...");//模式3,甩干模式}timedesign();//设置洗衣时间time();//显示设定的时间t = rate/5;//用于时间减少标志n=0;//控制时间减少次数do{if(key==1 ||key==2){K=1;//开启步进电机正转模式motor_ffw();//步进电机正转K=2; //开启步进电机反转模式motor_ffw();//步进电机反转n++;if((t==4)&&(n%3)==0){LedNumVal--;//时间标志数减少time();//显示此时剩余时间}if((t==3)&&(n%4)==0){LedNumVal--;time();}}else//甩干功能{K=1;motor_ffw();n++;if(n%5==0){LedNumVal--;time();}}}while(LedNumVal!=0);//当时间标志数为0时结束,开始下一次循环time();for(m=0;m<20;m++)//蜂鸣器{Sound = 1;delay(305);Sound = 0;delay(305);}}
}
第三部分 硬件仿真电路
- 原件列表
第四部分 设计过程
1、安装软件
- 安装路径必须是全英文路径包括电脑的用户名,也不能是中文。否则无法正常安装使用。
- 安装Proteus7.8,我已经将软件打包按需下载即可,破解和安装方法都包含在其中。
- 安装Keil4,我也将Keil4软件打包按需下载即可。
- 需要注意的是,Keil4安装后需要输入用户名和密码,随心填就好,已经破解好了。
2、仿真图绘制
- 按照第三部分在Proteus中画出来,连接出来后,开启仿真查看是否漏掉端口没有连接,这点很重要。
3、编写代码
- 首先在Project中选择新建项目。
- 最好将所有实训文件命名为同一个名字并放在相同名字的文件夹下,例如
- 选择Atmel公司的89C51单片机,然后选择OK
- 然后选择 是
- 然后将左侧工作组展开,并新建一个空白文档
- 然后将此文件保存,并命名为.C为扩展名的文件,名字与项目名相同
- 将保存好的文件添加到资源组里,在Source Group 1上右键即可选择
- 选择与项目名称相同的C语言文件,并选择Add
- 添加成功后,即可将代码复制到其中
- 依次选择编译和创建
- 观察编译和创建的结果,创建可能会产生警告,但是不影响运行,但是错误会影响运行
- 最后生成hex文件
- 选择output选项卡,勾选Creat HEX File,最后选择OK
- 查看项目文件夹下是否有hex为扩展名的文件,如果没有可以多做几次生成hex文件操作即可解决
4、装载hex文件
- 双击仿真图上的单片机即可打开装载hex文件的窗口,选择文件夹后,选择hex文件的所在位置,如果都在同一文件夹下的话可以很快找到
- 装载完成后进行仿真
- 仿真启动后的样子
第五部分 使用方法
- 首先选择洗衣模式,有轻柔洗、强力洗、甩干三种模式,然后按下模式选择(起到确定选择的作用),然后设置时间最少十分钟,可增加,也可减少,最后按下启动按键,即可启动洗衣机等到时间结束,蜂鸣器会发出报警声,危险中断可以在任意时间紧急停止洗衣机运行,但是下一次启动需要将仿真终止然后重新开启,洗衣机才能再次正常使用。
第六部分 软件链接
链接:https://pan.baidu.com/s/1ad0LEtuvFAzZseQG-iKAgg
提取码:8096
单片机实训智能洗衣机相关推荐
- 单片机8位抢答器实训机电报告_16路抢答器单片机实训报告.docx
<16路抢答器单片机实训报告.docx>由会员分享,可在线阅读,更多相关<16路抢答器单片机实训报告.docx(33页珍藏版)>请在微传网上搜索. 1.四川信息职业技术学院课程 ...
- 北京电子科技学院c语言实验报告,最新单片机 实训报告电子万年历实训报告.doc...
最新单片机 实训报告电子万年历实训报告 河南工程学院 单片机 实训报告 学 院 电气信息工程学院 专 业 电气工程及其自动化 组员及学号 李 东 盼 201250712138 高 辉 20125071 ...
- 单片机实训与毕业设计开放式训练系统QY-DPJ14
一.系统概述: QY-DPJ14单片机实训与毕业设计开放式训练系统是根据机电工学中有关"数字电子"."模拟电子"."单片机应用技术".&qu ...
- 51单片机c语言学习感想,51单片机实训心得体会
[www.hywsbj.com--心得体会] 单片机实训有哪些心得体会呢?下面是小编为大家收集的资料,欢迎阅读哦. 51单片机实训心得体会 通过为期一周的单片机实训,是我们对这门课有了许多新的了解,弥 ...
- 计算机单片机实训报告,计算器单片机实训报告.doc
计算器单片机实训报告 重庆电力高等专科学校 单片机实训报告 简易计算器 专业:电子信息工程技术 班级:信息1212 组员:张忠艳 学号:201203020207 组员:王传胜 学号:201203020 ...
- 计算机单片机实训报告,单片机实训总结
单片机实训总结 总结在一个时期.一个年度.一个阶段对学习和工作生活等情况加以回顾和分析的一种书面材料,它可以给我们下一阶段的学习和工作生活做指导,快快来写一份总结吧.你所见过的总结应该是什么样的?下面 ...
- 基于51单片机的全自动智能洗衣机控制系统Proteus仿真(仿真+源码+全套资料)
资料编号:108 设计功能: 1.对水温实时显示 2.显示滚筒转速 3.显示运行倒计时 4.能通过按钮分别设置洗涤时间和脱水时间 5.运行过程为:加热--洗涤--脱水 具体功能请看下方演示视频 10 ...
- 项目实训 - 智能车系统 - 第七周记录
项目实训 - 智能车系统 - 第七周记录 日期:4.04 – 4.10 项目进度 本周工作进展: 更换了底层的通信框架(shm) 熟悉速腾雷达驱动,以及ros相关驱动,为二次开发驱动做准备 1.更换底 ...
- 单片机c语言 王东锋,单片机实训总结报告.docx
单片机实训总结报告.docx 超声波测距实训总结报告专业 电子信息工程 班级 信息091 姓名 郑干恒(15) 何清华(43) 指导教师 邬志锋 日期 2012.6. 19 广东交通职业技术学院交通信 ...
最新文章
- mysql 触发器 赋值_MYSQL的触发器中 变量赋值
- vba代码编程800例_VBA编程常用“积木”过程代码Address的含义
- CentOS7.2 开启内网转发
- 工具用的好下班走的早
- 数学建模感悟:新的算法的学习
- arm cpu 超频_树莓派 400 超频方法介绍
- Nacos(四)之安装
- .Net/C#中Cache的用法
- 硬件电路基础(2)RF 一些概念
- 用计算机来控制飞船在太空中运行,神舟飞船在太空中靠什么动力运行
- 我应关注的AEC算法细分
- java虚拟机是什么?
- Spring框架学习笔记6-AOP编程-AspectJ方式
- 凯撒密码(移位密码)
- 索隆:九山八海,无我不断者。
- Detail-revealing Deep Video Super-resolution 论文笔记
- iOS之UITableView组头组尾视图/标题悬停
- 小红书java算法难吗_Java面试系列之记一次小红书之旅
- window下Python查看已经启动的进程名称并关闭
- ssh整合:spring+springmvc+hibernate