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

news2025/2/28 15:46:58

文章目录

功能描述

一、框架

二、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) begin
    if(!rst_n) begin
        data_time<=8'h10;
    end
    else if(state_all==WORKING && state==PAUSE2 && count==49999999 && sec_time==8'h00)begin
        if(data_time[3:0]==4'h0 && data_time[7:4]>4'h0)begin
            data_time[3:0]<=4'h9;
            data_time[7:4]<=data_time[7:4]-4'd1;
        end
        else if(data_time[3:0]>4'h0 && data_time[7:4]>=4'h0)begin
            data_time[3:0]<=data_time[3:0]-4'd1;
            data_time[7:4]<=data_time[7:4];
        end
        else if(data_time[3:0]==4'h0 && data_time[7:4]==4'h0)begin
            data_time[3:0]<=data_time[3:0];
            data_time[7:4]<=data_time[7:4];
        end
    end
    else if(state_all==IDLE || state_all==OVER )begin
        data_time<=8'h10;
    end
    end    
   
    //��ת�ͷ�ת����ͣ������
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        sec_time<=8'h20;
    end
    else if(count==49999999 && (state==R_ROTATE || state==L_ROTATE))begin
        if(sec_time[3:0]==4'h0 && sec_time[7:4]>4'h0)begin
            sec_time[3:0]<=4'h9;
            sec_time[7:4]<=sec_time[7:4]-4'd1;
        end
        else if(sec_time[3:0]>4'h0 && sec_time[7:4]>=4'h0)begin
            sec_time[3:0]<=sec_time[3:0]-4'd1;
            sec_time[7:4]<=sec_time[7:4];
        end
        else if(sec_time[3:0]==4'h0 && sec_time[7:4]==4'h0)begin
            sec_time<=8'h10;
        end
    end
    else if(count==49999999 && (state==PAUSE1 || state==PAUSE2))begin
        if(sec_time[3:0]==4'h0 && sec_time[7:4]>4'h0)begin
            sec_time[3:0]<=4'h9;
            sec_time[7:4]<=sec_time[7:4]-4'd1;
        end
        else if(sec_time[3:0]>4'h0 && sec_time[7:4]>=4'h0)begin
            sec_time[3:0]<=sec_time[3:0]-4'd1;
            sec_time[7:4]<=sec_time[7:4];
        end
        else if(sec_time[3:0]==4'h0 && sec_time[7:4]==4'h0)begin
            sec_time<=8'h20;
        end
    end
    else if(state==W_IDLE)begin
        sec_time<=8'h20;
    end
    end    
    
    //1��������
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        count<=26'd0;
    end
    else if(state==R_ROTATE || state==PAUSE1|| state==L_ROTATE|| state==PAUSE2)begin
        if(count<49999999)begin
            count<=count+1;
        end
        else begin
            count<=26'd0;
        end
    end
    else begin
        count<=26'd0;
    end
    end
    
    
    
    //��״̬�л�
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        state <= W_IDLE;
        end
    else if(state_all==WORKING)begin
        case(state)
        W_IDLE:begin
            state<=R_ROTATE;
        end
        R_ROTATE:begin
            if(count==49999999 && sec_time==8'h00)begin
                state<=PAUSE1;
            end
            else begin
                state<=R_ROTATE;
            end
        end
        PAUSE1:begin
            if(count==49999999 && sec_time==8'h00)begin
                state<=L_ROTATE;
            end
            else begin
                state<=PAUSE1;
            end
        end
        L_ROTATE:begin
            if(count==49999999 && sec_time==8'h00)begin
                state<=PAUSE2;
            end
            else begin
                state<=L_ROTATE;
            end
        end
        PAUSE2:begin
            if(count==49999999 && sec_time==8'h00)begin
                state<=W_IDLE;
            end
            else begin
                state<=PAUSE2;
            end
        end
        default:state <= W_IDLE;
        endcase
    end
    else begin
        state <= W_IDLE;
    end
    end    
    
    //�ܹ���״̬�л�
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        state_all <= IDLE;
        end
    else begin
        case(state_all)
        IDLE:begin
            if(key_start==1'b1)begin
                state_all<=WORKING;
            end
            else begin
                state_all<=IDLE;
            end
        end
        WORKING:begin
            if(data_time==8'h00)begin
                state_all<=OVER;
            end
            else begin
                state_all<=WORKING;
            end
        end
        OVER:begin
                state_all<=IDLE;
        end
        default:state_all <= IDLE;
        endcase
    end
    
    
    end
endmodule

三、视频上板效果展示

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

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

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

相关文章

【Linux系列】Vim 编辑器中的高效文本编辑技巧:删除操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

大纲笔记幕布的替换

文章目录 前言类似的大纲软件探索 DynalistLogseq通过国内代码仓库建立 Git 仓库Logseq 的使用PC 端安卓端Git 操作Termux git 步骤Termux 的桌面组件&#xff1a;Termux widget 报错参考 前言 之前我一直用幕布&#xff0c;买了三年&#xff0c;奈何要过期了&#xff0c;又三…

STM32-笔记35-DMA(直接存储器访问)

一、什么叫DMA&#xff1f; DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&#xff0c;CPU对于…

【踩坑】SparkSQL union/unionAll 函数的去重问题

【踩坑】SparkSQL union/unionAll 函数的去重问题 测试数据 case class Employee(first_name:String)val employeeDF1 spark.createDataset(Seq( Employee("Mary"), Employee("Mandy"),Employee("Kurt") )) val employeeDF2 spark.createDat…

allure报告修改默认语言为中文

1、项目根目录创建.py文件&#xff0c;把代码复制进去 import os from pathlib import Pathdef create_settings_js_file(directory"../pytest_mytt/reports/allures/", filenamesettings.js):# 创建或确认目录存在Path(directory).mkdir(parentsTrue, exist_okTrue…

使用frp实现本地内网穿透

环境&#xff1a;linux &#xff08;具有公网ip的线上服务器&#xff09;、windows&#xff08;本地&#xff09;、frp Releases fatedier/frphttps://github.com/fatedier/frp/releases 首先下载下来下面两个文件 概览 | frp一些概述&#xff0c;便于您快速的了解 frp。http…

Cursor无限续杯——解决Too many free trials.

前情提要 我们都知道Cursor对新用户是有14天且500条免费限制的。 一般情况下&#xff0c;当14天过期&#xff0c;是可以注销账户再重新注册&#xff0c;这样就可以继续拥有14天的体验时长。 但是&#xff01;&#xff01;如果使用超过500次&#xff0c;Cusor就会把你的电脑I…

cursor试用出现:Too many free trial accounts used on this machine 的解决方法

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

攻防世界 Web_php_wrong_nginx_config

​ 打开题目地址&#xff0c;显示为登录页面。尝试用御剑扫描一下&#xff0c;发现了admin页面&#xff0c;点进去显示如下 点开控制台&#xff0c;发现如下 isLogin参数为0。尝试抓包并该islogin参数为1&#xff0c;返回依旧不变。 再扫描&#xff0c;发现robots.txt&#xff…

WordPress静态缓存插件WP Super Cache与 WP Fastest Cache

引言 WordPress是一款开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;最初作为博客平台开发&#xff0c;现已发展成为一个功能强大的建站工具&#xff0c;支持创建各种类型的网站&#xff0c;包括企业网站、在线商店、个人博客等。它具有用户友好的界面、丰富的插…

多模态大模型初探索:通过ollama部署多模态大模型

文章目录 前言模型下载 前言 今天和同事聊天&#xff0c;聊到多模态大模型&#xff0c;感觉可以作为2025年的一个新的探索方向。希望和大家一起学习&#xff0c;一起进步。 今天也是尝试了我能想到的最基本最快速地本地部署多模态大模型的方式&#xff0c;那便是使用ollama。…

【深度学习】布匹寻边【附完整链接】

布匹寻边 项目简介 布匹寻边是指布料裁剪过程中&#xff0c;通过AI寻边技术自动识别布匹的边缘&#xff0c;将检测到的边缘信息输出&#xff0c;确保裁剪的准确性&#xff0c;减少浪费&#xff0c;并提高生产效率。 项目需求 将打满针眼的布匹边缘裁剪掉&#xff0c;且误差小…

scanf:数据之舟的摆渡人,静卧输入港湾的诗意守候

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节我们主要来学习scanf的基本用法&#xff0c;了解scanf返回值&#xff0c;懂得scanf占位符和赋值…

vue数据请求通用方案:axios的options都有哪些值

Axios 是一个基于 promise 的 HTTP 库&#xff0c;可以用在浏览器和 Node.js 中。 在使用 Axios 发送请求时&#xff0c;可以通过传递一个配置对象来指定请求的各种选项。 以下是一些常用的 Axios 配置选项及其说明&#xff1a; 1.url: &#xff08;必需&#xff09;请求的 …

阿里mod_asr3.0集成webrtc静音算法

alibabacloud-nls-cpp-sdk-master 先到阿里官网下载nls库的源代码&#xff0c;编译生成对应的库文件和头文件。 我编译的放到了以下目录。 /home/jp/2025/alibabacloud-nls-cpp-sdk-master/build/install/NlsSdk3.X_LINUX/include/ /home/jp/2025/alibabacloud-nls-cpp-sdk-…

【大模型】百度千帆大模型对接LangChain使用详解

目录 一、前言 二、LangChain架构与核心组件 2.1 LangChain 核心架构 2.2 LangChain 核心组件 三、环境准备 3.1 前置准备 3.1.1 创建应用并获取apikey 3.1.2 开通付费功能 3.2 获取LangChain文档 3.3 安装LangChain依赖包 四、百度千帆大模型对接 LangChain 4.1 LL…

【51单片机零基础-chapter6:LCD1602调试工具】

实验0-用显示屏LCD验证自己的猜想 如同c的cout,前端的console.log() #include <REGX52.H> #include <INTRINS.H> #include "LCD1602.h" int var0; void main() {LCD_Init();LCD_ShowNum(1,1,var211,5);while(1){;} }实验1-编写LCD1602液晶显示屏驱动函…

Mysql--基础篇--事务(ACID特征及实现原理,事务管理模式,隔离级别,并发问题,锁机制,行级锁,表级锁,意向锁,共享锁,排他锁,死锁,MVCC)

在MySQL中&#xff0c;事务&#xff08;Transaction&#xff09;是一组SQL语句的集合&#xff0c;这些语句一起被视为一个单一的工作单元。事务具有ACID特性&#xff0c;确保数据的一致性和完整性。通过事务&#xff0c;可以保证多个操作要么全部成功执行&#xff0c;要么全部不…

使用VUE3创建个人静态主页

使用VUE3创建个人静态主页 &#x1f31f; 前言&#x1f60e;体验&#x1f528; 具体实现✨ 核心功能&#x1f3d7;️ 项目结构&#x1f680; 用这个项目部署 Git Page &#x1f4d6; 参考 &#x1f31f; 前言 作为开发者或者内容创作者&#xff0c;我们经常需要创建静态网页&a…

鸿蒙APP之从开发到发布的一点心得

引言&#xff1a; 做鸿蒙开发大概有1年左右时间了&#xff0c;从最开始的看官方文档、看B站视频&#xff0c;到后来成功发布两款个人APP&#xff08;房贷计算极简版、时简时钟 轻喷&#xff0c;谢谢&#xff09;。简单描述一下里边遇到的坑以及一些经历吧。 学习鸿蒙开发 个…