基于51单片机的模拟洗衣机控制程序
原理:此例程使用51单片机作为控制器,通过按键设定洗衣机的工作时间并用数码管显示工作时间,然后控制2个继电器循环工作状态,模拟洗衣机间歇正反转,一般正转3s,停止2s,然后反转3s,停止2s,循环上述动作。
程序如下
#define KeyPort P3#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;// 位锁存sbit RELAY1 = P1^1;//定义继电器信号输出端口1
sbit RELAY2 = P1^2;//定义继电器信号输出端口2
/*------------------------------------------------全局变量
------------------------------------------------*/
unsigned char hour,minute,second;//定义时分秒bit UpdateTimeFlag;//定义读时间标志unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量
/*------------------------------------------------函数声明
------------------------------------------------*/
void DelayUs2x(unsigned char t);//us级延时函数声明
void DelayMs(unsigned char t); //ms级延时
void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数
unsigned char KeyScan(void);//键盘扫描
void Init_Timer0(void);//定时器初始化
void Stop(void);
void Clockwise (void);
void Anticlockwise(void);
/*------------------------------------------------主函数
------------------------------------------------*/
void main (void)
{
unsigned char num;
Init_Timer0(); //初始化定时器0,主要用于数码管动态扫描
Stop(); //初始化洗衣机停止转动
while (1) //主循环{num=KeyScan(); //循环调用按键扫描if(num==1) //定时长度增加{if(minute<99)minute++;}else if(num==2) //定时长度减小{if(minute>0)minute--;}if(UpdateTimeFlag==1)//定时刷新显示数据{UpdateTimeFlag=0;TempData[2]=dofly_DuanMa[minute/10];//分解显示信息,如要显示68,则68/10=6 68%10=8 TempData[3]=dofly_DuanMa[minute%10];//分解显示信息,如要显示68,则68/10=6 68%10=8 TempData[4]=0x40;TempData[5]=dofly_DuanMa[second/10];//分解显示信息,如要显示68,则68/10=6 68%10=8 TempData[6]=dofly_DuanMa[second%10];//分解显示信息,如要显示68,则68/10=6 68%10=8 if((minute==0)&&(second==0))//定时时间到,洗衣机停止转动{Stop();} }}
}
/*------------------------------------------------uS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{ while(--t);
}
/*------------------------------------------------mS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}
}
/*------------------------------------------------显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示,如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{static unsigned char i=0;DataPort=0; //清空数据,防止有交替重影LATCH1=1; //段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存LATCH2=0;DataPort=TempData[i]; //取显示数据,段码LATCH1=1; //段锁存LATCH1=0;i++;if(i==Num)i=0;
}
/*------------------------------------------------定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 //TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开
}
/*------------------------------------------------定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{static unsigned int num,i,times;TH0=(65536-2000)/256; //重新赋值 2msTL0=(65536-2000)%256;Display(0,8); // 调用数码管扫描i++;if(i==20) //20ms更新一次{i=0;UpdateTimeFlag=1; //更新时间志位置1}num++;if(num==500) //大致1s{num=0;/////执行正反转动作。switch(times){case 1:Clockwise (); break;//正转3scase 4:Stop(); break;//停止2scase 6:Anticlockwise();break;//反转3scase 9:Stop(); break;//停止2scase 11:times=0; break;//清零循环上述动作default:break;}times++;///if((minute!=0)||second)//如果分钟和秒都为0,不进行计时second--;//秒减1if(second==0xff)//如果=0后再减1则赋值59,即00过后显示59{second=59;if(minute>0)//倒计时条件{minute--;}}}
}/*------------------------------------------------
按键扫描函数,返回扫描键值
------------------------------------------------*/
unsigned char KeyScan(void)
{unsigned char keyvalue;if(KeyPort!=0xff){DelayMs(10);if(KeyPort!=0xff){keyvalue=KeyPort;while(KeyPort!=0xff);switch(keyvalue){case 0xfe:return 1;break;case 0xfd:return 2;break;case 0xfb:return 3;break;case 0xf7:return 4;break;case 0xef:return 5;break;case 0xdf:return 6;break;case 0xbf:return 7;break;case 0x7f:return 8;break;default:return 0;break;}}}return 0;
}/*------------------------------------------------顺时针转动
------------------------------------------------*/
void Clockwise (void)
{RELAY1=1; //继电器1吸合,接通正向线圈RELAY2=0;
}
/*------------------------------------------------逆时针转动
------------------------------------------------*/
void Anticlockwise(void)
{RELAY1=0;RELAY2=1; //继电器2吸合,接通反向线圈
}/*------------------------------------------------停止转动
------------------------------------------------*/
void Stop(void)
{RELAY1=0; RELAY2=0;
}
源码+AD电路图 下载:请关注公众号,首页回复“洗衣机”获取资料
基于51单片机的模拟洗衣机控制程序相关推荐
- 洗衣机控制系统c语言编程,采用C语言编辑基于51单片机的全自动洗衣机控制系统毕业论文.doc...
采用C语言编辑基于51单片机的全自动洗衣机控制系统毕业论文 深 圳 大 学 本 科 毕 业 论 文(设计) 题目: 基于单片机设计的全自动 洗衣机控制器 姓名: 郑嘉泽 专业: 电子信息工程 学院: ...
- 基于51单片机的智能洗衣机
提示:记录2022年4月做的毕设 文章目录 前言 一.任务书 1.1设计(研究)目标: 1.2设计(研究)内容: 二.设计思路 三.硬件 四.代码以及框图等资料 喜欢请点赞哦! 前言 基于51单片机的 ...
- 基于51单片机实现模拟IIC总线时序
最近用到测量光线的模块BH1750FVI时需要用到IIC总线操作, 于是就又费功夫学习了下, 基本上算是了解了, 所以呢, 就用51的IO口, 模拟出了总线时序, 并能正确操纵需要用IIC总线访问地一 ...
- 51开发实例 基于51单片机的模拟电梯系统
一.系统设计 电梯的控制对于我们来说既陌生又显得格外亲切,本次基于52单片机开发的模拟电梯系统,系统没有通过电机模拟电梯运转,按键可以设置楼层,一共设置了3个楼层按键,按下对应的楼层按键就会直接向指定 ...
- 基于51单片机的全自动洗衣机系统设计-protues原理图、程序(转发)
摘 要 本文详细介绍了国内洗衣机控制系统的发展现状,发展中所面临的问题.从产品质量.性能及应用方面看洗衣机的差距,同时也详尽的介绍了此次设计中最重要的组成部件单片机的概念.工作原理及设备总体结构.根据 ...
- 单片机c语言电梯程序设计,基于51单片机的模拟电梯控制系统设计.doc
摘要:本文介绍了一种电梯模拟控制系统,包括怎样利用对STC89C52进行编程从而对电梯实现自由控制的方式.该系统采用了STC89C52芯片进行控制,用单片机进行编程,能实现的功能非常多而且方便设计,并 ...
- 基于51单片机的全自动洗衣机仿真原理图程序方案设计
设计总方框图 (末尾附文件) 原理图: 控制系统的功能 基于单片机洗衣机通过控制系统设定洗衣程序在洗涤脱水桶内自动完成注水.洗涤.漂洗.排水和脱水全过程.洗衣时控制系统打开进水电磁阀开始注水:当洗涤脱 ...
- 洗衣机程序c语言代码大全,采用C语言编辑基于51单片机的全自动洗衣机控制系统毕业论文资料.doc...
深 圳 大 学 本 科 毕 业 论 文(设计) 题目: 基于单片机设计的全自动 洗衣机控制器 姓名: 郑嘉泽 专业: 电子信息工程 学院: 信息工程学院 学号: 2009130099 指导教师: 李霞 ...
- 基于51单片机的全自动洗衣机设计
硬件方案 全自动洗衣机的电路主要有电源.单片机最小系统.开关检测电路.控制按键输入电路和LED指示电路.继电器和电动机电路. 原理图如图: 仿真图如图: 设计功能 由独立式按键确定功能键,包括&quo ...
最新文章
- 比杠精网友更可怕的,是懂王同事
- iphone开发如何测试?
- python线程池模块_Python并发编程之线程池/进程池--concurrent.futures模块
- Oracle OS Block Header
- windows 7 安装及.net开发环境搭建
- SSH初体验系列--Hibernate--1--环境配置及demo
- 夺命雷公狗---微信开发39----微信语言识别接口1
- 2022年最值得学习的 5 种编程语言,你有在学习吗?
- MongoDB 数组类型查询 —— $elemMatch 操作符
- java.lang.NoSuchMethodError: android.app.Notification$Builder.setChannelId
- 启发式算法在最优化问题求解中的应用与实践
- day10 Python 形参顺序
- Flutter 底部向上动画弹出的菜单选项
- 轻松实现函数计算文件上传下载
- matlab intersect
- 牛津大学教授Michael Wooldridge:AI社区40+年如何看待神经网络
- CSDN学生大本营“每日进步”文章
- 硅谷始祖-仙童半导体浮沉录
- Android Studio 文件读取、存储小记
- 向量的matlab写法,Matlab向量
热门文章
- Timeline Service V2.0 Reader 启动不了
- 使用weinre调试移动端真机
- miui9支持android,MIUI9详细体验:最好用Android不是吹的!
- 过360云查杀vc++代码
- 无法在此配置的计算机上运行,win7系统出现“无法将windows配置为在此计算机的硬件上运行”的解决方法...
- [STM32]详解单片机GPIO输出模式配置-推挽与开漏
- ElasticSearch集群架构原理
- C语言 malloc() + 结构体指针定义结构体变量
- 风电滑环的作用有哪些
- immutable.js中文文档