基于FPGA的洗衣机控制器电子定时器

文章目录

功能描述

一、框架

二、verilog代码

控制模块实现

三、视频上板效果展示



功能描述

(1)定时启动正转20秒暂停10秒反转20秒暂 停10秒,定时未到回到“正转20秒暂停10秒……”,定时到则停止; 若定时到,则停机发出音响信号; 
(2)用两个数码管显示洗涤的预置时间(默认10分钟),再用两个数码管按倒计时方式对各个洗涤状态过程作计时显示,直到 时间到停机;(3)洗涤过程由“开始”信号开始; 
(4)三只LED灯表示“正转”,“反转”、“暂停”三个状态。
(5)用动态扫描控制四个数码管的输出

一、框架

输入:时钟、复位、开始按键

输出:LED指示灯 数码管段选和位选

这个板子段选是38译码器,所以sel是3位bit

二、verilog代码

控制模块实现

主要思想就是通过两层状态机进行控制:

首先控制空闲状态、工作状态以及结束状态。

其中围绕工作状态展开进行二次状态设计,正转、反转以及暂停等等。

module control(input       clk,input       rst_n,input       key_start,output      wire        led_R,output      wire        led_L,output      wire        led_P,output      reg [7:0]   data_time,output      reg [7:0]   sec_time);//����״̬�����С�������ֹͣparameter   IDLE           =3'd0;parameter   WORKING        =3'd1;parameter   OVER           =3'd2;//����״̬�µ�״̬����ת ֹͣ ��תparameter   W_IDLE             =4'd0;parameter   R_ROTATE           =4'd1;parameter   PAUSE1             =4'd2;parameter   L_ROTATE           =4'd3;parameter   PAUSE2             =4'd4;reg [2:0]   state_all;reg [3:0]   state;//10����
//    reg [7:0]   data_time;
//    reg [7:0]   sec_time;//��reg [25:0]  count;assign led_R=(state_all==WORKING)?(state==R_ROTATE)?1'b1:1'b0:1'b0;assign led_L=(state_all==WORKING)?(state==L_ROTATE)?1'b1:1'b0:1'b0;assign led_P=(state_all==WORKING)?(state==PAUSE1 || state==PAUSE2)?1'b1:1'b0:1'b0;//10����always @(posedge clk or negedge rst_n) beginif(!rst_n) begindata_time<=8'h10;endelse if(state_all==WORKING && state==PAUSE2 && count==49999999 && sec_time==8'h00)beginif(data_time[3:0]==4'h0 && data_time[7:4]>4'h0)begindata_time[3:0]<=4'h9;data_time[7:4]<=data_time[7:4]-4'd1;endelse if(data_time[3:0]>4'h0 && data_time[7:4]>=4'h0)begindata_time[3:0]<=data_time[3:0]-4'd1;data_time[7:4]<=data_time[7:4];endelse if(data_time[3:0]==4'h0 && data_time[7:4]==4'h0)begindata_time[3:0]<=data_time[3:0];data_time[7:4]<=data_time[7:4];endendelse if(state_all==IDLE || state_all==OVER )begindata_time<=8'h10;endend    
   //��ת�ͷ�ת����ͣ������always @(posedge clk or negedge rst_n) beginif(!rst_n) beginsec_time<=8'h20;endelse if(count==49999999 && (state==R_ROTATE || state==L_ROTATE))beginif(sec_time[3:0]==4'h0 && sec_time[7:4]>4'h0)beginsec_time[3:0]<=4'h9;sec_time[7:4]<=sec_time[7:4]-4'd1;endelse if(sec_time[3:0]>4'h0 && sec_time[7:4]>=4'h0)beginsec_time[3:0]<=sec_time[3:0]-4'd1;sec_time[7:4]<=sec_time[7:4];endelse if(sec_time[3:0]==4'h0 && sec_time[7:4]==4'h0)beginsec_time<=8'h10;endendelse if(count==49999999 && (state==PAUSE1 || state==PAUSE2))beginif(sec_time[3:0]==4'h0 && sec_time[7:4]>4'h0)beginsec_time[3:0]<=4'h9;sec_time[7:4]<=sec_time[7:4]-4'd1;endelse if(sec_time[3:0]>4'h0 && sec_time[7:4]>=4'h0)beginsec_time[3:0]<=sec_time[3:0]-4'd1;sec_time[7:4]<=sec_time[7:4];endelse if(sec_time[3:0]==4'h0 && sec_time[7:4]==4'h0)beginsec_time<=8'h20;endendelse if(state==W_IDLE)beginsec_time<=8'h20;endend    //1��������always @(posedge clk or negedge rst_n) beginif(!rst_n) begincount<=26'd0;endelse if(state==R_ROTATE || state==PAUSE1|| state==L_ROTATE|| state==PAUSE2)beginif(count<49999999)begincount<=count+1;endelse begincount<=26'd0;endendelse begincount<=26'd0;endend//��״̬�л�always @(posedge clk or negedge rst_n) beginif(!rst_n) beginstate <= W_IDLE;endelse if(state_all==WORKING)begincase(state)W_IDLE:beginstate<=R_ROTATE;endR_ROTATE:beginif(count==49999999 && sec_time==8'h00)beginstate<=PAUSE1;endelse beginstate<=R_ROTATE;endendPAUSE1:beginif(count==49999999 && sec_time==8'h00)beginstate<=L_ROTATE;endelse beginstate<=PAUSE1;endendL_ROTATE:beginif(count==49999999 && sec_time==8'h00)beginstate<=PAUSE2;endelse beginstate<=L_ROTATE;endendPAUSE2:beginif(count==49999999 && sec_time==8'h00)beginstate<=W_IDLE;endelse beginstate<=PAUSE2;endenddefault:state <= W_IDLE;endcaseendelse beginstate <= W_IDLE;endend    //�ܹ���״̬�л�always @(posedge clk or negedge rst_n) beginif(!rst_n) beginstate_all <= IDLE;endelse begincase(state_all)IDLE:beginif(key_start==1'b1)beginstate_all<=WORKING;endelse beginstate_all<=IDLE;endendWORKING:beginif(data_time==8'h00)beginstate_all<=OVER;endelse beginstate_all<=WORKING;endendOVER:beginstate_all<=IDLE;enddefault:state_all <= IDLE;endcaseendend
endmodule

三、视频上板效果展示

基于fpga的洗衣机控制器 定时器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据技术 指令笔记1

3.cd命令 cd命令用来切换工作目录至DirName。其中DirName表示法可为绝对路径或相对路径 例如&#xff1a; cd/ 切换到根目录 cd 切换到家目录 cd /etc/sysconfig/ 切换到/etc/sysconfig目录 cd .. 返回到父目录 4.Is命令 Is命令用来列出文件或…

Android 性能优化:内存优化(实践篇)

1. 前言 前一篇文章Android性能优化&#xff1a;内存优化 &#xff08;思路篇&#xff09; 大概梳理了Android 内存原理和优化的必要性及应该如何优化&#xff0c;输出了一套短期和长期内存优化治理的SOP方案。 那么这一篇文章就总结下我最近在做内存优化如何实践的&#xff0…

OSPF使能配置

OSPF路由协议是用于网际协议&#xff08;ip&#xff09;网络的链路状态的路由协议。该协议使用链路状态路由算法的内部网关协议&#xff08;IGP&#xff09;&#xff0c;在单一自治系统&#xff08;AS&#xff09;内部工作。适用于IPV4的OSPFv2协议定义于RFC 2328&#xff0c;R…

【STM32+CubeMX】 新建一个工程(STM32F407)

相关文章&#xff1a; 【HAL库】 STM32CubeMX 教程 1 --- 下载、安装 目录 第一部分、新建工程 第二部分、工程文件解释 第三部分、编译验证工程 友情约定&#xff1a;本系列的前五篇&#xff0c;为了方便新手玩家熟悉CubeMX、Keil的使用&#xff0c;会详细地截图每一步Cu…

刚体变换矩阵的逆

刚体运动中的变换矩阵为&#xff1a; 求得变换矩阵的逆矩阵为&#xff1a; opencv应用 cv::Mat R; cv::Mat t;R.t(), -R.t()*t

List ---- 模拟实现LIST功能的发现

目录 listlist概念 list 中的迭代器list迭代器知识const迭代器写法list访问自定义类型 附录代码 list list概念 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素…

谷云科技iPaaS V7.0+企业级AI Agent产品全新发布

当下&#xff0c;大数据、人工智能等前沿技术迅猛发展&#xff0c;正以前所未有的速度重塑着企业 IT 集成的格局。谷云科技作为深耕国内集成领域多年的专业厂商&#xff0c;始终紧跟技术趋势变化&#xff0c;深度洞察客户需求&#xff0c;致力于以创新驱动为企业数字化转型赋能…

h264之多视点mvc编码及解码过程(JMVC平台举例)

h264标准参考平台JMVC是针对MVC标准的&#xff0c;JMVC支持多视点编码、合流、多视点解码操作。可以利用JMVC生成h264 mvc码流和解码。 JMVC的下载地址是&#xff1a;jvet / JMVC GitLabH.264/AVC multi-view coding (MVC) extension JMVC reference softwarehttps://vcgit.hh…

快手一面-面经

1. RPC和Http的区别&#xff1f; RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是两种不同的通信机制&#xff0c;它们有不同的用途、工作原理和应用场景…

【论文+源码】基于Spring和Spring MVC的汉服文化宣传网站

为了实现一个基于Spring和Spring MVC的汉服文化宣传网站,我们需要创建一个简单的Web应用程序来展示汉服文化和相关信息。这个系统将包括以下几个部分: 数据库表设计:定义文章、用户和评论的相关表。实体类:表示数据库中的数据。DAO层接口及MyBatis映射文件:用于与数据库交…

牛客网刷题 ——C语言初阶(2分支和循环-for)——打印菱形

1. 题目描述 用C语言在屏幕上输出以下图案&#xff1a; 2. 思路 我是先上手&#xff0c;先把上半部分打印出来&#xff0c;然后慢慢再来分析&#xff0c;下面这是我先把整个上半部分打印出来&#xff0c;因为空格不方便看是几个&#xff0c;这里先用&代替空格了 然后这里…

Maven 详细配置:Maven settings 配置文件的详细说明

Maven settings 配置文件是 Maven 环境的重要组成部分&#xff0c;它用于定义用户特定的配置信息和全局设置&#xff0c;例如本地仓库路径、远程仓库镜像、代理服务器以及认证信息等。settings 文件分为全局配置文件&#xff08;settings.xml&#xff09;和用户配置文件&#x…

STM32学习之MPU6050芯片 及 软件I2C读写MPU6050实验

MPU6050是一个6轴姿态传感器&#xff0c;可测量芯片自身X、Y、Z轴的加速度、角速度参数&#xff0c;可以通过这些数据融合&#xff0c;可进一步得到姿态角&#xff08;或者叫做欧拉角&#xff09;&#xff0c;常应用于平衡车、飞行器等需要检测自身姿态的场景 一个IMU&#xf…

我用AI学Android Jetpack Compose之开篇

最近突发奇想&#xff0c;想学一下Jetpack Compose&#xff0c;打算用Ai学&#xff0c;学最新的技术应该要到官网学&#xff0c;不过Compose已经出来一段时间了&#xff0c;Ai肯定学过了&#xff0c;用Ai来学&#xff0c;应该问题不大&#xff0c;学习过程记录下来&#xff0c;…

前路漫漫,曙光在望 !

起始 从20年大一开始写作至今&#xff0c;转眼五年时光已经过去了&#xff0c;最开始在CSDN这个平台写博客也只是因为一次机缘巧合情况下得知写博客可以获取奖赏&#xff0c;所以那个时期开始疯狂在CSDN发文记录自己编程学习过程&#xff0c;但是至今也未从写作中获利一分哈…

【WPF】 数据绑定机制之INotifyPropertyChanged

INotifyPropertyChanged 是 WPF 中的一个接口&#xff0c;用于实现 数据绑定 中的 属性更改通知。它的主要作用是&#xff0c;当对象的某个属性值发生更改时&#xff0c;通知绑定到该属性的 UI 控件更新其显示内容。 以下是有关 INotifyPropertyChanged 的详细信息和实现方法&…

Netron可视化深度学习的模型框架,大大降低了大模型的学习门槛

深度学习是机器学习的一个子领域&#xff0c;灵感来源于人脑的神经网络。深度学习通过多层神经网络自动提取数据中的高级特征&#xff0c;能够处理复杂和大量的数据&#xff0c;尤其在图像、语音、自然语言处理等任务中表现出色。常见的深度学习模型&#xff1a; 卷积神经网络…

Robot---奇思妙想轮足机器人

1 背景 传统机器人有足式、轮式、履带式三种移动方式&#xff0c;每种移动方式都有各自的优缺点。轮式机器人依靠车轮在地面上移动&#xff0c;能源利用率高、移动速度快&#xff0c;但是仅以轮子与地面接触&#xff0c;缺乏越障能力和对复杂地形的适应能力&#xff0c;尤其面对…

用JAVA编写一个简单的小游戏

用Java语言编写一个简单的小游戏。这里是一个非常基础的猜数字小游戏的代码示例。在这个游戏中&#xff0c;程序会随机选择一个1到100之间的整数&#xff0c;玩家需要猜测这个数字是什么。每次猜测后&#xff0c;程序会告诉玩家他们猜的数字是太高了、太低了还是正确。 impor…

加速科技荣获“浙江省企业研究院”认定

近日&#xff0c;浙江省经济和信息化厅公布“2024年认定&#xff08;备案&#xff09;省级企业研发机构名单”。经过多轮严格评审和公示&#xff0c;加速科技荣获“省企业研究院”认定。这是加速科技继获国家级专精特新“小巨人”企业认定荣誉后的又一里程碑。 “浙江省企业研究…