Verilog实现的莫尔斯电码发生器

莫尔斯或者摩尔斯电码(Morse Code),发明于1837年(另有一说是1836年),通过不同的排列顺序来表达不同的英文字母、数字和标点符号,在这里作一简单处理,仅产生点(Dit)和划(Dah),时长在0.25秒之内为点,超过为划,用按键控制时间模拟实现,5个点或划表示一个数字(0-9),通过数码管显示按键发声频率1350Hz。

//莫尔斯代码发生器
module morse(rst_n,clk,key,seg,dg,beep);
input clk,rst_n,key;//clk50M,rst_n低电平有效,key按下为0
output reg beep; //蜂鸣器
output reg[7:0]  seg;//段码
output reg[5:0]  dg;//位码
reg [10:0] ct; //1350Hz分频计数
reg [3:0] cnt,kcnt; //50Hz分频计数,按键计数
reg clk50hz,clk1k; //分频得到的时钟
reg [3:0] num,number; //要显示的数,点划编码数
reg [2:0] i=0;  //要显示的点划序号
reg [9:0] dh=10'b0000000000;  //点划输入,点为10,划为11,不按为00
wire clk5;  //PLL输出的5.4M
reg [2:0] state; //按键状态
localparam S0 = 0; //初始状态
localparam S1 = 1;  //按键按下0-0.25S
localparam S2 = 2; //按键在0.25S内释放
localparam S3 = 3; //按键按下超过0.25S
localparam S4 = 4; //按键在0.25S后释放clk5m4 PLLA(   //PLL产生5.4M时钟.refclk(clk) ,.reset(~rst_n),.clk0_out(),.clk1_out(clk5) 
);always @ (posedge clk5 or negedge rst_n)  //分频成约1350Hzif (!rst_n) ct<=0;else if (ct>=2000-1)   //5.4M->1350Hz    begin clk1k<=~clk1k; ct<=0; end else ct<=ct+1;always @ (posedge clk1k or negedge rst_n)  //分频成约52Hzif (!rst_n) cnt<=0;else if (cnt>=13-1)   //1k->50      begin clk50hz<=~clk50hz; cnt<=0; end else cnt<=cnt+1;always @ (posedge clk50hz or negedge rst_n)  //按键检测并计数if (!rst_n) begin  state<=S0; kcnt<=0; dh<=10'b0000000000; i<=0; end  //初始状态S0else case(state)S0:begin if (key) begin  state<=S0; kcnt<=0; endelse begin i<=(i>=5)?1:i+1; state<=S1; endendS1:begin if (key) begin  state<=S2; kcnt<=0; end  //短按(0.25S内)按键,S1状态else if (kcnt<=13) begin  state<=S1; kcnt<=kcnt+1; endelse state<=S3; endS2: if (key) begin {dh[11-2*i],dh[10-2*i]}<=2'b10; state<=S2; kcnt<=0; end //短按并释放,S2状态else begin state<=S1;if (i>=5)begin i<=1; dh<=10'b0000000000;endelsei<=i+1;end S3:state<=(!key)?S3:S4;                      //长按(>0.25S),S3状态S4:if (key) begin {dh[11-2*i],dh[10-2*i]}<=2'b11; state<=S4; kcnt<=0; end //长按释放,S4状态else  begin state<=S1;if (i>=5)begin i<=1; dh<=10'b0000000000;endelsei<=i+1;end  default:;endcasealways@(state)   //发声case(state)S1,S3:beep=clk1k;default:beep=0;endcasealways@(posedge clk1k or  negedge rst_n) //数码管扫描显示(右5位为点划),最左为点划编码数字if (!rst_n) dg<=6'b111111; else case (dg)6'b111110:begin num=dh[3:2]+10;  dg<=6'b111101;end6'b111101:begin num=dh[5:4]+10;  dg<=6'b111011;end6'b111011:begin num=dh[7:6]+10;  dg<=6'b110111;end6'b110111:begin num=dh[9:8]+10;  dg<=6'b101111;end6'b101111:begin num=number;      dg<=6'b011111;enddefault:begin num=dh[1:0]+10;dg<=6'b111110;endendcase always@(dh)case({dh[9:8],dh[7:6],dh[5:4],dh[3:2],dh[1:0]})10'b1011111111:number<=1;10'b1010111111:number<=2;10'b1010101111:number<=3;10'b1010101011:number<=4;10'b1010101010:number<=5;10'b1110101010:number<=6;10'b1111101010:number<=7;10'b1111111010:number<=8;10'b1111111110:number<=9;10'b1111111111:number<=0;default:if (dh[1:0]==2'b00) number<=14;  //等待输入标示else number<=11;  //出错标示endcasealways @(num)   //数码管译码,共阳极,0点亮,段码顺序:DP,G-Acase(num)0:seg<=8'b11000000;1:seg<=8'b11111001;2:seg<=8'b10100100;3:seg<=8'b10110000;4:seg<=8'b10011001;5:seg<=8'b10010010;6:seg<=8'b10000010;7:seg<=8'b11111000;8:seg<=8'b10000000;9:seg<=8'b10010000;11:seg<=8'b10000110;//出错标示12:seg<=8'b01111111; //点标示13:seg<=8'b11110111;//划标示14:seg<=8'b10110110; //等待输入标示default:seg<=8'b11111111; //全暗不亮endcaseendmodule

运行时,将首先在左侧数码管显示“三”,表示等待输入,随着按键通过控制时间长短输入点和划,并同步显示在数码管上,键入5次后,译码输出数字,若出错,将显示出错符号“E”。

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

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

相关文章

【系统架构设计师】七、设计模式

7.1 设计模式概述 设计经验在实践者之间日益广泛地利用&#xff0c;描述这些共同问题和解决这些问题的方案就形成了所谓的模式。 7.1.1 设计模式的历史 建筑师Christopher Alexander首先提出了模式概念&#xff0c;他将模式分为了三个部分&#xff1a; 特定的情景&#xff…

Maven介绍,IDEA集成方式

概述 什么是Maven&#xff1f; Maven 的正确发音是[ˈmevən],Maven在美国是一个口语化的词语&#xff0c;代表专家、内行的意思。 一个对 Maven 比较正式的定义是这么说的&#xff1a; Maven 是一个项目管理工具&#xff0c;它包含了一个项目对象模型 (POM&#xff1a;Proj…

pyav保存视频

目录 imageio替代pyav imageio替代pyav import imageio import numpy as np import torch# 创建一个随机的图像张量&#xff0c;形状为 (N, C, H, W) # 这里 N 30&#xff08;帧数&#xff09;&#xff0c;C 3&#xff08;通道数&#xff09;&#xff0c;H 64&#xff08;…

stl_stack/queue

一.适配器 stack和queue实际上并不能算是一种容器&#xff0c;而是一种容器适配器。而适配器作为stl的6大组件之一&#xff0c;其实是一种设计模式。适配器模式其实就是将一个类的接口&#xff08;该接口无法直接满足客户的需求&#xff09;转换成客户希望的另一个接口&#x…

利用Docker Compose构建微服务架构

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 利用Docker Compose构建微服务架构 引言 Docker Compose 简介 安装 Docker Compose 创建项目结构 编写 Dockerfile 前端 Dockerf…

lru_cache用法

在python中&#xff0c;lru_cache是一个装饰器&#xff0c; 是 Python 标准库中 functools 模块的一部分。lru_cache 装饰器可以用来为一个函数添加一个缓存系统。这个缓存系统会存储函数的输入和对应的输出。如果函数被调用&#xff0c;并且给出了已经缓存过的输入&#xff0c…

Redis未授权访问漏洞复现和修复建议

Redis未授权访问漏洞利用&#xff08;总结&#xff09; 一、漏洞介绍及危害1.1 原理1.2 漏洞影响版本1.3 漏洞危害1.4 实战中redis常用命令 二、漏洞复现2.1 环境准备2.1.1 靶机安装redis服务器2.1.2 kali安装Redis客户端&#xff08;Redis-cli&#xff09; 三、漏洞利用3.1 利…

无人机之集群控制方法篇

无人机的集群控制方法涉及多个技术和策略&#xff0c;以确保多架无人机能够协同、高效地执行任务。以下是一些主要的无人机集群控制方法&#xff1a; 一、编队控制方法 领航-跟随法&#xff08;Leader-Follower&#xff09; 通过设定一架无人机作为领航者&#xff08;长机&am…

流水线商品标签如何快速打印?商品标签自定义打印软件操作方法

一、概述 【软件可定制详情点文章最后信息卡片】 流水线商品标签如何快速打印&#xff1f;商品标签自定义打印软件操作方法 ‌定义与用途‌ 商品标签打印软件&#xff0c;即用于打印商品标签的应用软件。标签包含产品上的文字、商品详情等说明信息 如图&#xff0c;可以预先…

Python - PDF 分割成单页、PDF 转图片(PNG)

文章目录 PDF 分割成一页页的 PDFPDF 转 PNGPDF 分割成一页页的 PDF import fitz def split_pdf(pdf_path, save_dir):source_pdf = fitz.open(pdf_path)# 遍历source_pdf中的每一页,page_number从0开始计数 for idx

不只是任务分配!管理者应具备的核心认知

背景 二十年&#xff0c;中国的互联网行业飞速发展&#xff0c;让无数年轻人有了从技术岗走向管理岗的机会。然而&#xff0c;许多工程师在走上管理岗位时往往是“仓促上任”&#xff0c;没有足够时间适应管理工作和责任。少数悟性高、能力突出的工程师能够迅速胜任&#xff0…

java拷贝应用场景

文件分块上传&#xff1a;允许大文件分块上传&#xff0c;以便于更高效地管理和恢复上传。 文件元数据存储&#xff1a;在数据库中存储文件的元数据&#xff08;如文件名、大小、上传时间等&#xff09;。 异步处理&#xff1a;使用异步方法处理文件上传和下载&#xff0c;以提…

第二十五章 Vue父子通信之sync修饰符

目录 一、概述 二、完整代码 2.1. main.js 2.2. App.vue 2.3. BaseDialog.vue 三、运行效果 一、概述 前面的章节我们讲到&#xff0c;通过v-model我们可以实现父子组件间的通信&#xff0c;但是使用v-model的时候&#xff0c;子组件接收的prop属性名必须固定为valu…

【浪潮商城-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

轻松成为文本文件管理大师,将每个文件夹中的所有TXT分别合并成一个文本文档,发现办公软件TXT合并功能的无限可能

文本文件如潮水般涌来&#xff0c;管理它们成为了一项令人头疼的任务。但是&#xff0c;别怕&#xff0c;有了首助编辑高手软件&#xff0c;你将成为办公软件达人&#xff0c;轻松驾驭这些文本文件&#xff0c;体验无限魅力&#xff01;想象一下&#xff0c;杂乱无章的文件夹瞬…

单例模式四种写法

饿汉式&#xff08;线程安全&#xff09; public class Singleton {// 直接创建实例&#xff0c;在类加载时就完成实例化private static final Singleton instance new Singleton();// 私有构造函数private Singleton() {}// 提供公共的静态方法获取实例public static Single…

安卓13默认连接wifi热点 android13默认连接wifi

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 有时候我们需要让固件里面内置好,相关的wifi的ssid和密码,让固件起来就可以连接wifi,不用在手动操作。 2.问题分析 这个功能,使用普通的安卓代码就可以实现了。 3.代…

青春的海洋:海滨学院班级回忆录项目

3系统分析 3.1可行性分析 通过对本海滨学院班级回忆录实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本海滨学院班级回忆录采用SSM框架&#xff0c;JAVA作为开…

青春海风:海滨学院班级回忆录设计与实现

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了海滨学院班级回忆录的开发全过程。通过分析海滨学院班级回忆录管理的不足&#xff0c;创建了一个计算机管理海滨学院班级回忆录的方案。文章介绍了海滨学院班级回…

C#中JsonConvert.DeserializeObject方法

JsonConvert.DeserializeObject 是一个在 Newtonsoft.Json 库中用来将 JSON 字符串转换为相应 .NET 对象的方法。 以下是一些使用 JsonConvert.DeserializeObject 的示例&#xff1a; 将 JSON 字符串转换为一个匿名对象&#xff1a; string json "{ Name: John Doe, A…