FPGA之旅设计99例之第十三例-----FPGA在OLED上显示DHT11数据

news/2024/5/19 12:04:42/文章来源:https://blog.csdn.net/weixin_44678052/article/details/126753057

一. 简介

这是FPGA之旅设计的第十三例啦,本例是一个综合性的例程,基于OLED屏幕显示,和DHT11温湿度采集,将DHT11采集到的温湿度显示到OLED屏幕上。

在开始本例之前,先补充一下,在上例中,代码中有个位置有错误,就是DHT11是先发送湿度然后发送温度,代码中给弄反了,已修改。

显示效果如下
在这里插入图片描述

二. 字体的显示

字体的制作,以及如何将生成的字符数据添加到FPGA中,在上一例已经说明了,以及如何显示16*8的大小的字符,也就是不需要换行字符。本例中着重介绍如何显示16*16大小的字符,即在写入字符的过程中,需要有换行的操作,即切换page。本例的汉字大小为16*16,英文和数字为8*16大小的,即两种字体大小,这也是在显示过程中需要注意的点。

(一). 字符数据输出

这部分,还是和上例中一样,不同的是额外添加了一个font_row参数,因为本例中使用的字符都是需要换行的,所以需要添加这个参数。

always@(*)
begincase(showfont_index)'d0:  showfont_data_reg <= {8'h78,8'h00,8'hB0 + show_y + font_row};'d1:  showfont_data_reg <= {8'h78,8'h00,8'h00 + show_x[3:0]};'d2:  showfont_data_reg <= {8'h78,8'h00,8'h10 + show_x[7:4]};default:	showfont_data_reg <= {8'h78,8'h40,fontdata}; //fontdataendcase
end

如何使用这个参数进行换行呢?

我们知道8*16大小的字符,一共用16个数据,每行占八个数据。所以这里需要先发送八个数据后,然后进行换行,将font_row参数加一,以及将showfont_index置0即可。在取字符的时候,需要注意,我们是根据showfont_index的值来取的,而换行后,这个参数置0了,这个时候,需要将font_row也用上,也就是还要加上8*font_row,这样就可以接着上次的位置继续取字符数据了。

当font_size字符大小为0,即8*16时,showfont_index为10的时候,就需要进行换行了,3个设置显示地址数据 加 8个正好是10(11)。

always@(posedge sys_clk or negedge rst_n)
beginif(rst_n == 1'b0)font_row <= 1'b0;else if(onefont_finish == 1'b1)  //一个字符显示完font_row <= 1'b0;else if(font_size == 'd0 && showfont_index == 'd10 && write_done == 1'b1)font_row <= 1'b1;else if(font_size == 'd1 && showfont_index == 'd18 && write_done == 1'b1)font_row <= 1'b1;elsefont_row <= font_row;
end
always@(posedge sys_clk or negedge rst_n)
beginif(rst_n == 1'b0)showfont_index <= 'd0;else if(onefont_finish == 1'b1)showfont_index <= 'd0;else if(font_size == 'd0 && showfont_index == 'd10 && write_done == 1'b1)showfont_index <= 'd0;else if(font_size == 'd1 && showfont_index == 'd18 && write_done == 1'b1)showfont_index <= 'd0;else if(write_done == 1'b1 && ShowFont_req == 1'b1)showfont_index <= showfont_index + 1'b1;elseshowfont_index <= showfont_index;
end

取数据

data <= data0[index + 'd8 * font_row];
(二). 多个字符显示

这里只需要看这两行代码。每次一个字符显示完成后,font_index就加一,当显示完14个字符的时候,将ShowFont_finish拉高即可。比较容易。

assign onefont_finish = ((showfont_index == ('d10 + 'd8 * font_size)) && (font_row == 1'b1) && write_done == 1'b1) ? 1'b1 : 1'b0;
assign ShowFont_finish = (onefont_finish == 1'b1 && font_index == 'd14) ? 1'b1 : 1'b0;

三. 整体介绍

本例中,OLED显示一共分为如下5个状态。在初始化完成后,屏幕显示的是杂乱无章的数据,所以在初始化完成后,要进行一次刷新,将OLED中的数据全部写0。然后进行显示固定不变的支符,例如像温度湿度这样的字符。然后进入空闲态,直到DHT11采集到数据后,就进入到数据显示状态,数据显示完成后,又回到空闲态。这是整个的一个流程。

localparam	OLED_INIT 		=  'd0;			//初始化
localparam	OLED_Refresh	=  'd1;			//刷新,将oled全部写0
localparam  OLED_ShowFont	=  'd2;		    //显示字符
localparam	OLED_IDLE 		=  'd3;		 	//空闲
localparam	OLED_ShowData	=  'd4;		    //显示数据

总框图如下,可以看到在top模块,除了一些模块,还有一些其他的内容,这部分是专门针对DHT11的。测试过程中,发现每次采集数据的时间间隔不能太小,否则数据一直不变,查看手册后,得知两次采集的数据间隔不能小于1s,否则会有问题。
在这里插入图片描述

详细可以看完整代码,有疑问的可以私聊。

回复 FPGA之旅设计99例之第十三例 获取下载链接

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

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

相关文章

Webpack 打包 - 14. html压缩

这里使用 html-webpack-plugin 插件压缩 html 文件。 1.文件结构 2.代码 index.html<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>webpack</title> </head> <body> <!--这里…

《Hyperspectral Image Classification With Deep Feature Fusion Network》论文笔记

论文题目《Hyperspectral Image Classification With Deep Feature Fusion Network》 论文作者:Weiwei Song, Shutao Li, Leyuan Fang,Ting Lu 论文发表年份:2018 网络简称:DFFN 一、本文提出的挑战 1.由于光谱混合和光谱特征空间变异性的存在,HSIs通常具有非常复…

KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

KingbaseES 、repmgr案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作。若主节点已经失效,希望将异地备机提升为主节点。 $bin/repmgr standby promote 适用版本:KingbaseES V8R6 集群节点信息…

Postman和Jmeter的区别

Postman是一款功能强大的用于发送HTTP请求的Chrome插件&#xff0c;主要用于接口测试&#xff1b; Jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;也可以用来进行接口测试。 很多同学经常将两款工具混淆&#xff0c;这里就为大家介绍一下二者的区别。 1…

Java 将Excel转为UOS

以.uos为后缀的文件,表示Uniform Office Spreadsheet文件,是一种国产的办公文件格式,该格式以统一办公格式(UOF)创建,使用XML和压缩保存电子表格。既有的Excel表格文件,可以通过格式转换的方式转换为UOS格式,本文将对此作相关介绍。 【导入jar包】 使用jar包:Spire.Xls…

Nginx log 日志分割

Nginx日志不处理的话,会一直追加,文件会变得很大 Linux nginx_log.sh#!/bin/bash date=$(date +%F -d -1day) cd /usr/local/nginx/logs if [ ! -d bak ] ; thenmkdir -p bak fi mv access.log bak/access_$date.log mv error.log bak/error_$date.log # /usr/bin/…

Cache一致性导致的踩内存问题【转】

转自:http://blog.coderhuo.tech/2019/07/28/DMA_mem_crash/ 本文主要分享一个Cache一致性踩内存问题的定位过程,涉及到的知识点包括:backtrace、内存分析、efence、wrap系统函数、硬件watchpoint、DMA、Cache一致性等。 1 背景 设备上跑的是嵌入式实时操作系统(RTOS,具体为…

9.7--prompt理论学习

但是这些表现低于有监督的方法&#xff0c;但是我们在工作当中&#xff0c;我们引入了PET 利用模板的训练 Pattern Exploiting Training(PET) 把分类变成了完形填空的问题&#xff0c;来帮助模型理解任务 最后卖弄一下他的论文 最后在训练集上运用了有监督的训练。 并且远远…

[NOIP2014 提高组] 飞扬的小鸟题解

[NOIP2014 提高组] 飞扬的小鸟题解 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏…

java1.8环境配置

https://blog.csdn.net/blbyu/article/details/126152202 可用,java1.8环境配置 最主要的是这个步骤,小心仔细看清楚 java1.8 下载 地址 https://www.oracle.com/java/technologies/downloads/#java8-windows 往下拉可用看到jdk8版本下载即可

iOS APP 转让避坑指南

背景 由于公司主体改变&#xff0c;跟进法务要求&#xff0c;需要将APP下面的主体改变成新主体。主体改变有两种途径&#xff1a; 直接在开发者账号-联系我们-会员资格和账户-组织名称更改。 通过App Store Connect 来进行APP转让&#xff0c;将APP转让到新主体下面。 第一…

Apple iPhone 14 Pro 药丸设计看不懂,药丸上面那条屏幕缝隙完全没有用处呀?

Apple iPhone 14 Pro 药丸设计看不懂,药丸上面那条屏幕缝隙完全没有用处呀?Apple iPhone 14 Pro 药丸设计看不懂,药丸上面那条屏幕缝隙完全没有用处呀?iPhone 14 Pro 不值得购买的原因不支持 Type-C (国外禁售罚款,欧盟;国内什么时间行动呀) 不配备充电器 (国外禁售罚…

操作系统学习笔记8 |段页式内存管理

多进程图像中的CPU管理已经告一段落,接下来要介绍另一大方面——内存管理。首先我们也来看看内存是如何被使用起来的。最后介绍段页式内存管理的实现过程。多进程图像中的CPU管理已经告一段落,接下来要介绍另一大方面——内存管理。首先我们也来看看内存是如何被使用起来的。…

阿里云的“终端云化”实践,基于ENS进行边缘架构构建

终端无休止的更新迭代,是软件对计算资源的需求激增。作者|王广芳 编辑|IMMENSE 终端云化:打破硬件的桎梏 近几年,“终端云化”技术开始规模化落地,其核心思想是“计算卸载”,即将智能终端的计算任务卸载到边缘云虚拟终端处理,解决终端设备在算力和存储等方面的不足…

数学建模—模糊综合评价模型

一、概述 1、数学归纳法和秃子悖论 数学归纳法&#xff1a;&#xff08;1&#xff09;当n1时&#xff0c;成立&#xff1b;&#xff08;2&#xff09;当nk时&#xff0c;成立&#xff1b;&#xff08;3&#xff09;只需要证明当nk1时&#xff0c;也成立&#xff1b;则推出对所…

3

1.宏与vba 宏是一系列函数和命令-----一组动作的组合 vba与vb:

ElasticSearch入门到入土手册请查阅

文章目录ElasticSearch来源用途Elasticsearch特点核心概念index语法查看索引创建索引删除索引TypeDocumentDocument的CRUD插入数据指定id使用自动生成id方式新增字段删除文档Mapping查看Mapping指定Mapping整体核心架构倒排索引分词ElasticSearch内置分词器Standard AnalyzerSi…

公众号多题库查题功能接口系统

公众号多题库查题功能接口系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#…

C++入门·收尾

你好&#xff0c;我是安然无虞。 文章目录学习网站写在前面内联函数概念特性面试题auto关键字&#xff08;C11&#xff09;auto简介auto的使用细则auto不能推导的场景基于范围的for循环&#xff08;C11&#xff09;范围for的语法范围for的使用条件指针空值nullptr&#xff08;…